Mayer Mehrere Zonen (Krypto)

Mayer Mehrere Zonen (Krypto)

Erweiterte Krypto-Bewertungszonen mit ETH/BTC-Kontext

1. Zeigt 6 Preiszonen basierend auf MA200-Multiplikatoren (Blase, Take-Profit, Fair Value, Akkumulation, Value Buy, Strong Buy)

2. Fügt ETH/BTC-Verhältniskontext für stärkere Signale hinzu

3. Funktioniert mit jeder Kryptowährung mit ausreichender Preishistorie (ETH, SOL, AAVE usw.)
Farbintensität ändert sich basierend auf den Marktbedingungen

kryptoanalysis

Farbzonen: Preis relativ zu seiner MA200-Historie
Zonenopazität: Stärkere Farbe = stärkeres Signal (beeinflusst durch ETH/BTC-Kontext)
Statusfeld: Zeigt den aktuellen „Erweiterten Status“ an, der Preisniveau mit ETH/BTC-Kontext kombiniert
Kontextzeile: Erklärt, warum das Signal stark oder schwach ist

Starke Kaufsignale:

  • „EXTREM WERT“ (blaue Zone + BTC-Dominanz)
  • „STARKER WERTKAUF“ (cyanfarbene Zone + BTC-Präferenz)
    Take-Profit-Signale:
  • „BESTÄTIGTE BLASE“ (lila Zone + Altcoin-Dominanz)
  • „NAHME AN BLASE“ (rote Zone + steigende Altcoin-Stärke)
  • Mehrere Schwellenwerte anpassen (0,6x, 0,8x, 2,0x, 2,5x, 3,0x)
  • ETH/BTC-Kontextanalyse umschalten
  • ETH/BTC-Schwellenwerte für Markttendenz konfigurieren
  • MA-Länge von Standard 200 ändern

Dieser Indikator hilft dabei, optimale Einstiegs- und Ausstiegspunkte zu identifizieren, indem er die vertikalen Farbstreifen auf Ihrem Diagramm beobachtet. Suchen Sie nach tiefblauen/cyanfarbenen Zonen mit hoher Opazität für starke Kaufgelegenheiten und intensiven violetten/roten Zonen für potenzielle Ausstiege. Je dunkler die Farbintensität, desto stärker das Signal – keine komplexe Interpretation erforderlich!

Quelle: https://de.tradingview.com/script/gpQ2PDyM-Mayer-Multiple-Zones-Crypto/

//@version=5
// =====================================================
// Mayer Multiple Zones with ETH/BTC Context
// Description: Visualizes price zones with context from the ETH/BTC ratio on ETH/USDT chart
// Author: Warp
// Version: 1.0.0
// =====================================================

indicator(title=" Mayer Multiple Zones (Crypto)", overlay=true, precision=2, max_labels_count=500)

// =====================================================
// Configuration Parameters
// =====================================================
source = close
ma_length = input.int(200, "MA Length", minval=1, group="Core Settings")

// Configurable multipliers
mult_strong_buy = input.float(0.6, "Strong Buy Multiple", minval=0.1, step=0.1, group="Mayer Multipliers")
mult_value_buy = input.float(0.8, "Value Buy Multiple", minval=0.1, step=0.1, group="Mayer Multipliers")
mult_fair_value = input.float(2.0, "Fair Value Threshold", minval=1.0, step=0.1, group="Mayer Multipliers")
mult_take_profit = input.float(2.5, "Take Profit Threshold", minval=1.0, step=0.1, group="Mayer Multipliers")
mult_bubble = input.float(3.0, "Bubble Territory Threshold", minval=1.0, step=0.1, group="Mayer Multipliers")

// ETH/BTC Settings
use_ethbtc = input.bool(true, "Use ETH/BTC Context", group="ETH/BTC Analysis")
ethbtc_symbol = input.symbol("ETHBTC", "ETH/BTC Symbol", group="ETH/BTC Analysis")
ethbtc_lookback = input.int(200, "ETH/BTC MA Length", minval=10, group="ETH/BTC Analysis")
ethbtc_low_threshold = input.float(0.8, "ETH/BTC Low Threshold", minval=0.5, maxval=0.95, step=0.05, tooltip="ETH/BTC ratio below this value of its MA200 indicates BTC Dominance", group="ETH/BTC Analysis")
ethbtc_high_threshold = input.float(1.2, "ETH/BTC High Threshold", minval=1.05, maxval=2.0, step=0.05, tooltip="ETH/BTC ratio above this value of its MA200 indicates Altcoin Dominance", group="ETH/BTC Analysis")

// =====================================================
// MA200 and Multiple Calculation
// =====================================================
standard_ma200 = ta.sma(source, ma_length)

// Propagate MA200 value across all bars in all timeframes
var float last_valid_ma = na

// Update last valid MA when we have a value
if not na(standard_ma200)
    last_valid_ma := standard_ma200

// Use last valid MA when current is NA
true_ma200 = not na(standard_ma200) ? standard_ma200 : last_valid_ma

// Calculate current price multiple
curr_multiple = close / true_ma200

// =====================================================
// ETH/BTC Context Analysis
// =====================================================
// Get ETH/BTC data
[ethbtc_close, ethbtc_security_available] = request.security(ethbtc_symbol, "", [close, 1], lookahead=barmerge.lookahead_off)

// Calculate ETH/BTC MA200
ethbtc_ma200 = ta.sma(ethbtc_close, ethbtc_lookback)

// Calculate normalized ETH/BTC ratio (relative to its own MA200)
ethbtc_normalized = ethbtc_close / ethbtc_ma200

// Define the market context based on ETH/BTC
var string ethbtc_context = "NEUTRAL"
var color ethbtc_context_color = color.gray

if use_ethbtc and not na(ethbtc_normalized)
    if ethbtc_normalized < ethbtc_low_threshold
        ethbtc_context := "BTC DOMINANCE"
        ethbtc_context_color := #F9A825   // Gold for BTC
    else if ethbtc_normalized > ethbtc_high_threshold
        ethbtc_context := "ALTCOIN DOMINANCE"
        ethbtc_context_color := #26A69A   // Teal for Altcoins
    else
        ethbtc_context := "BALANCED MARKET"
        ethbtc_context_color := #78909C   // Blue-Gray for neutral

// =====================================================
// Combined Market Analysis
// =====================================================
var string combined_status = "UNKNOWN"
var string context_detail = ""

// Define alpha adjustments based on context
var int alpha_adjustment = 0
var int label_alpha_adjustment = 0

if use_ethbtc and not na(ethbtc_normalized)
    // For Bubble Zone
    if curr_multiple >= mult_bubble
        if ethbtc_normalized > ethbtc_high_threshold
            combined_status := "CONFIRMED BUBBLE"
            context_detail := "Double confirmation: high multiple + altcoin season"
            alpha_adjustment := -30  // More opaque/visible (less transparent)
            label_alpha_adjustment := -20
        else if ethbtc_normalized < ethbtc_low_threshold
            combined_status := "BTC-CENTRIC BUBBLE"
            context_detail := "BTC-focused bubble - watch for rotation"
            alpha_adjustment := 0
            label_alpha_adjustment := 0
        else
            combined_status := "DEVELOPING BUBBLE"
            context_detail := "High multiple but balanced market"
            alpha_adjustment := 15
            label_alpha_adjustment := 10
    
    // For Take Profit Zone
    else if curr_multiple >= mult_take_profit
        if ethbtc_normalized > ethbtc_high_threshold
            combined_status := "APPROACHING BUBBLE"
            context_detail := "Take profit + altcoin strength signals peak forming"
            alpha_adjustment := -20
            label_alpha_adjustment := -15
        else if ethbtc_normalized < ethbtc_low_threshold
            combined_status := "BTC TAKE PROFIT"
            context_detail := "Strong BTC but limited altcoin interest"
            alpha_adjustment := 10
            label_alpha_adjustment := 5
        else
            combined_status := "GENERAL TAKE PROFIT"
            context_detail := "Elevated valuation in balanced market"
            alpha_adjustment := 0
            label_alpha_adjustment := 0
    
    // For Fair Value Zone
    else if curr_multiple >= 1.0
        if ethbtc_normalized > ethbtc_high_threshold
            combined_status := "ALTCOIN PREFERENCE"
            context_detail := "Fair BTC value with altcoin rotation"
            alpha_adjustment := 0
            label_alpha_adjustment := 0
        else if ethbtc_normalized < ethbtc_low_threshold
            combined_status := "BTC PREFERENCE"
            context_detail := "Fair value with BTC dominance"
            alpha_adjustment := 0
            label_alpha_adjustment := 0
        else
            combined_status := "BALANCED GROWTH"
            context_detail := "Fair value in balanced market"
            alpha_adjustment := 0
            label_alpha_adjustment := 0
    
    // For Accumulation Zone
    else if curr_multiple >= mult_value_buy
        if ethbtc_normalized > ethbtc_high_threshold
            combined_status := "ALTCOIN ACCUMULATION"
            context_detail := "BTC accumulation with altcoin strength"
            alpha_adjustment := 10
            label_alpha_adjustment := 5
        else if ethbtc_normalized < ethbtc_low_threshold
            combined_status := "STRONG ACCUMULATION"
            context_detail := "BTC accumulation with BTC preference"
            alpha_adjustment := -15
            label_alpha_adjustment := -10
        else
            combined_status := "GENERAL ACCUMULATION"
            context_detail := "Accumulation in balanced market"
            alpha_adjustment := 0
            label_alpha_adjustment := 0
    
    // For Value Buy Zone
    else if curr_multiple >= mult_strong_buy
        if ethbtc_normalized > ethbtc_high_threshold
            combined_status := "VALUE BUY (ALTCOIN BIAS)"
            context_detail := "Value zone with altcoin preference"
            alpha_adjustment := 15
            label_alpha_adjustment := 10
        else if ethbtc_normalized < ethbtc_low_threshold
            combined_status := "STRONG VALUE BUY"
            context_detail := "Value zone with BTC preference - strong signal"
            alpha_adjustment := -25
            label_alpha_adjustment := -15
        else
            combined_status := "VALUE BUY"
            context_detail := "Value zone in balanced market"
            alpha_adjustment := 0
            label_alpha_adjustment := 0
    
    // For Strong Buy Zone
    else
        if ethbtc_normalized > ethbtc_high_threshold
            combined_status := "STRONG BUY (CAUTION)"
            context_detail := "Strong buy but with altcoin preference"
            alpha_adjustment := 10
            label_alpha_adjustment := 5
        else if ethbtc_normalized < ethbtc_low_threshold
            combined_status := "EXTREME VALUE"
            context_detail := "Strong buy with BTC preference - maximum opportunity"
            alpha_adjustment := -30
            label_alpha_adjustment := -20
        else
            combined_status := "STRONG BUY"
            context_detail := "Strong buy in balanced market"
            alpha_adjustment := 0
            label_alpha_adjustment := 0
else
    // Fallback to basic status if not using ETH/BTC or if data is NA
    if not na(curr_multiple)
        if curr_multiple >= mult_bubble
            combined_status := "BUBBLE ZONE"
        else if curr_multiple >= mult_take_profit
            combined_status := "TAKE PROFIT ZONE"
        else if curr_multiple >= mult_fair_value
            combined_status := "FAIR VALUE ZONE"
        else if curr_multiple >= 1.0
            combined_status := "FAIR VALUE ZONE"
        else if curr_multiple >= mult_value_buy
            combined_status := "ACCUMULATION ZONE"
        else if curr_multiple >= mult_strong_buy
            combined_status := "VALUE BUY ZONE"
        else
            combined_status := "STRONG BUY ZONE"

// =====================================================
// Color Definitions - Dynamic based on context
// =====================================================
// Primary colors for lines
color color_ma200 = color.new(color.white, 0)
color color_06x = color.new(#1E88E5, 0)  // Blue
color color_08x = color.new(#00ACC1, 0)  // Cyan
color color_20x = color.new(#FB8C00, 0)  // Orange
color color_25x = color.new(#F44336, 0)  // Red
color color_30x = color.new(#9C27B0, 0)  // Purple
color color_accum = color.new(#FDD835, 0) // Yellow

// Base transparency values
var int base_zone_alpha = 85
var int base_label_alpha = 60

// Compute actual alpha values with context adjustments
int zone_strong_buy_alpha = math.max(0, math.min(100, base_zone_alpha + alpha_adjustment))
int zone_value_buy_alpha = math.max(0, math.min(100, base_zone_alpha + alpha_adjustment))
int zone_accum_alpha = math.max(0, math.min(100, base_zone_alpha + alpha_adjustment))
int zone_fair_alpha = math.max(0, math.min(100, base_zone_alpha + alpha_adjustment))
int zone_profit_alpha = math.max(0, math.min(100, base_zone_alpha + alpha_adjustment))
int zone_bubble_alpha = math.max(0, math.min(100, base_zone_alpha + alpha_adjustment))

int label_strong_buy_alpha = math.max(0, math.min(100, base_label_alpha + label_alpha_adjustment))
int label_value_buy_alpha = math.max(0, math.min(100, base_label_alpha + label_alpha_adjustment))
int label_accum_alpha = math.max(0, math.min(100, base_label_alpha + label_alpha_adjustment))
int label_fair_alpha = math.max(0, math.min(100, base_label_alpha + label_alpha_adjustment))
int label_profit_alpha = math.max(0, math.min(100, base_label_alpha + label_alpha_adjustment))
int label_bubble_alpha = math.max(0, math.min(100, base_label_alpha + label_alpha_adjustment))

// Apply dynamic transparency based on context
color color_zone_strong_buy = color.new(color_06x, zone_strong_buy_alpha)
color color_zone_value_buy = color.new(color_08x, zone_value_buy_alpha)
color color_zone_accum = color.new(color_accum, zone_accum_alpha)
color color_zone_fair = color.new(color_20x, zone_fair_alpha)
color color_zone_profit = color.new(color_25x, zone_profit_alpha)
color color_zone_bubble = color.new(color_30x, zone_bubble_alpha)

// Dynamic label colors
color color_label_06x = color.new(color_06x, label_strong_buy_alpha)
color color_label_08x = color.new(color_08x, label_value_buy_alpha)
color color_label_20x = color.new(color_20x, label_fair_alpha)
color color_label_25x = color.new(color_25x, label_profit_alpha)
color color_label_30x = color.new(color_30x, label_bubble_alpha)
color color_label_accum = color.new(color_accum, label_accum_alpha)

// Precomputed even more transparent colors for table backgrounds
var color color_bg_25x = color.new(color_25x, 95)
var color color_bg_30x = color.new(color_30x, 95)
var color color_bg_gray = color.new(color.gray, 95)

// =====================================================
// Band Calculation Based on Multiples
// =====================================================
// Calculate band prices
band_06x = true_ma200 * mult_strong_buy
band_08x = true_ma200 * mult_value_buy
band_20x = true_ma200 * mult_fair_value
band_25x = true_ma200 * mult_take_profit
band_30x = true_ma200 * mult_bubble

// =====================================================
// Plot Lines
// =====================================================
// 200-day MA as horizontal line
plot(true_ma200, "200-Day MA", color=color_ma200, linewidth=2)

// Mayer Band plots
p_06x = plot(band_06x, "0.6x Band", color=color_06x, linewidth=1)
p_08x = plot(band_08x, "0.8x Band", color=color_08x, linewidth=1)
p_20x = plot(band_20x, "2.0x Band", color=color_20x, linewidth=1)
p_25x = plot(band_25x, "2.5x Band", color=color_25x, linewidth=1)
p_30x = plot(band_30x, "3.0x Band", color=color_30x, linewidth=1)

// Bottom reference for filling
p_bottom = plot(band_06x * 0.5, "Bottom Reference", color=color.new(color_06x, 100))

// Invisible plot for fills
p_ma200_fill = plot(true_ma200, "MA200 for Fill", color=color.new(color_ma200, 100))

// =====================================================
// Fill Between Bands with Context-Adjusted Colors
// =====================================================
fill(p_ma200_fill, p_20x, color=color_zone_fair, title="Fair Value Zone")
fill(p_20x, p_25x, color=color_zone_profit, title="Take Profit Zone")
fill(p_25x, p_30x, color=color_zone_bubble, title="Bubble Zone")
fill(p_08x, p_ma200_fill, color=color_zone_accum, title="Accumulation Zone")
fill(p_06x, p_08x, color=color_zone_value_buy, title="Value Buy Zone")
fill(p_bottom, p_06x, color=color_zone_strong_buy, title="Strong Buy Zone")

// =====================================================
// Market Status Determination
// =====================================================
var string basic_market_status = ""
var color status_color = color.white
var color status_bg_color = color.new(color.white, 20)

// Set basic status based on current multiple with error handling
if not na(curr_multiple)
    if (curr_multiple < mult_strong_buy)
        basic_market_status := "STRONG BUY ZONE"
        status_color := color_06x
    else if (curr_multiple < mult_value_buy)
        basic_market_status := "VALUE BUY ZONE" 
        status_color := color_08x
    else if (curr_multiple < 1.0)
        basic_market_status := "ACCUMULATION ZONE"
        status_color := color_accum
    else if (curr_multiple < mult_fair_value)
        basic_market_status := "FAIR VALUE ZONE"
        status_color := color_20x
    else if (curr_multiple < mult_take_profit)
        basic_market_status := "TAKE PROFIT ZONE"
        status_color := color_25x
    else
        basic_market_status := "BUBBLE ZONE"
        status_color := color_30x
    
    // Precompute status background color with alpha
    status_bg_color := color.new(status_color, 20)

// =====================================================
// Zone Labels
// =====================================================
if barstate.islast and not na(true_ma200)
    // Calculate horizontal position for labels
    var int label_offset = 20
    var int x_position = bar_index + label_offset
    
    // Create labels for each zone - using context-adjusted colors
    label.new(x_position, (band_25x + band_30x) / 2, "BUBBLE ZONE", 
             color=color_label_30x, 
             textcolor=color.white, 
             style=label.style_label_left, 
             size=size.small)
    
    label.new(x_position, (band_20x + band_25x) / 2, "TAKE PROFIT ZONE", 
             color=color_label_25x, 
             textcolor=color.white, 
             style=label.style_label_left, 
             size=size.small)
    
    label.new(x_position, (true_ma200 + band_20x) / 2, "FAIR VALUE ZONE", 
             color=color_label_20x, 
             textcolor=color.white, 
             style=label.style_label_left, 
             size=size.small)
    
    label.new(x_position, (band_08x + true_ma200) / 2, "ACCUMULATION ZONE", 
             color=color_label_accum, 
             textcolor=color.white,
             style=label.style_label_left, 
             size=size.small)
    
    label.new(x_position, (band_06x + band_08x) / 2, "VALUE BUY ZONE", 
             color=color_label_08x, 
             textcolor=color.white, 
             style=label.style_label_left, 
             size=size.small)
    
    label.new(x_position, band_06x / 2 + band_06x * 0.25, "STRONG BUY ZONE", 
             color=color_label_06x, 
             textcolor=color.white, 
             style=label.style_label_left, 
             size=size.small)

// =====================================================
// Enhanced Information Table
// =====================================================
if (barstate.islast)
    // Create table
    var table infoTable = table.new(position.top_right, 2, 12, 
                                   bgcolor=color.new(color.black, 80), 
                                   border_width=1, 
                                   border_color=color.new(color.gray, 70),
                                   frame_width=1,
                                   frame_color=color.new(color.gray, 70))
    
    // Text size
    textSize = size.normal
    
    // Header with Combined Status
    table.cell(infoTable, 0, 0, "ENHANCED STATUS", 
              text_color=color.white, 
              bgcolor=status_bg_color, 
              text_size=textSize)
    table.cell(infoTable, 1, 0, combined_status, 
              text_color=color.white, 
              bgcolor=status_bg_color, 
              text_size=textSize)
    
    // Add context detail if available
    if use_ethbtc and context_detail != ""
        table.cell(infoTable, 0, 1, "CONTEXT", 
                 text_color=color.white, 
                 bgcolor=color.new(ethbtc_context_color, 85), 
                 text_size=size.small)
        table.cell(infoTable, 1, 1, context_detail, 
                 text_color=color.white, 
                 bgcolor=color.new(ethbtc_context_color, 85), 
                 text_size=size.small)
    
    // Current price and multiple - handle NA case
    row_offset = use_ethbtc and context_detail != "" ? 2 : 1
    
    table.cell(infoTable, 0, row_offset, "Price", 
              text_color=color.white, 
              bgcolor=color_bg_gray, 
              text_size=textSize)
    
    price_str = str.tostring(close, "#.##")
    multiple_str = not na(curr_multiple) ? " (" + str.tostring(curr_multiple, "#.##") + "x)" : ""
    price_color = not na(curr_multiple) ? 
                 (curr_multiple < mult_value_buy ? color_08x : 
                  curr_multiple > mult_take_profit ? color_25x : color_accum) : 
                  color.white
                  
    table.cell(infoTable, 1, row_offset, price_str + multiple_str, 
              text_color=price_color, 
              bgcolor=color_bg_gray, 
              text_size=textSize)
    
    // MA200 value
    row_offset += 1
    table.cell(infoTable, 0, row_offset, "MA200", 
              text_color=color_ma200, 
              text_size=textSize)
    table.cell(infoTable, 1, row_offset, str.tostring(true_ma200, "#.##"), 
              text_color=color_ma200, 
              text_size=textSize)
    
    // ETH/BTC Section (if enabled)
    if use_ethbtc
        row_offset += 1
        table.cell(infoTable, 0, row_offset, "ETH/BTC Context", 
                  text_color=ethbtc_context_color, 
                  text_size=textSize)
        table.cell(infoTable, 1, row_offset, ethbtc_context, 
                  text_color=ethbtc_context_color, 
                  text_size=textSize)
        
        row_offset += 1
        table.cell(infoTable, 0, row_offset, "ETH/BTC Ratio", 
                  text_color=color.white, 
                  text_size=textSize)
        
        ethbtc_str = str.tostring(ethbtc_normalized, "#.##") + "x MA"
        ethbtc_display_color = ethbtc_context_color
        
        table.cell(infoTable, 1, row_offset, ethbtc_str, 
                  text_color=ethbtc_display_color, 
                  text_size=textSize)
    
    // Show the actual multiplier values in the labels to reflect user configuration
    row_offset += 1
    mult_06x_str = str.tostring(mult_strong_buy, "#.#") + "x"
    mult_08x_str = str.tostring(mult_value_buy, "#.#") + "x"
    mult_20x_str = str.tostring(mult_fair_value, "#.#") + "x"
    mult_25x_str = str.tostring(mult_take_profit, "#.#") + "x"
    mult_30x_str = str.tostring(mult_bubble, "#.#") + "x"
    
    // 0.6x Band (or user configured value)
    table.cell(infoTable, 0, row_offset, mult_06x_str, 
              text_color=color_06x, 
              text_size=textSize)
    table.cell(infoTable, 1, row_offset, str.tostring(band_06x, "#.##"), 
              text_color=color_06x, 
              text_size=textSize)
    
    // 0.8x Band (or user configured value)
    row_offset += 1
    table.cell(infoTable, 0, row_offset, mult_08x_str, 
              text_color=color_08x, 
              text_size=textSize)
    table.cell(infoTable, 1, row_offset, str.tostring(band_08x, "#.##"), 
              text_color=color_08x, 
              text_size=textSize)
    
    // 2.0x Band (or user configured value)
    row_offset += 1
    table.cell(infoTable, 0, row_offset, mult_20x_str, 
              text_color=color_20x, 
              text_size=textSize)
    table.cell(infoTable, 1, row_offset, str.tostring(band_20x, "#.##"), 
              text_color=color_20x, 
              text_size=textSize)
    
    // 2.5x Band (RED) (or user configured value)
    row_offset += 1
    table.cell(infoTable, 0, row_offset, mult_25x_str, 
              text_color=color_25x, 
              text_size=textSize,
              bgcolor=color_bg_25x)
    table.cell(infoTable, 1, row_offset, str.tostring(band_25x, "#.##"), 
              text_color=color_25x, 
              bgcolor=color_bg_25x,
              text_size=textSize)
              
    // 3.0x Band (VIOLET) (or user configured value)
    row_offset += 1
    table.cell(infoTable, 0, row_offset, mult_30x_str, 
              text_color=color_30x, 
              text_size=textSize,
              bgcolor=color_bg_30x)
    table.cell(infoTable, 1, row_offset, str.tostring(band_30x, "#.##"), 
              text_color=color_30x, 
              bgcolor=color_bg_30x,
              text_size=textSize)