Diese Strategie kombiniert MACD-Kreuzsignale aus mehreren Zeitrahmen mit dynamischen Unterstützungs- und Widerstandsniveaus basierend auf 52-wöchigen Höchst- und Tiefstniveaus. Sie bestätigt Handelssignale durch MACD-Kreuzsignale sowohl auf wöchentlichen als auch auf täglichen Zeitrahmen und nutzt gleichzeitig dynamische Unterstützungs- und Widerstandslinien, die durch 52-wöchige Höchst- und Tiefstniveaus gebildet werden, um die Marktrendanalyse zu unterstützen und robustere Handelsentscheidungen zu ermöglichen. Die Strategie verwendet einen dynamischen Stop-Loss-Mechanismus, um das Risiko effektiv zu kontrollieren und gleichzeitig Gewinne zu erzielen.
Die Strategie basiert auf der folgenden Grundlogik:
Diese Strategie baut ein komplettes Trend-folgende Handelssystem auf, indem sie Multi-Timeframe MACD-Kreuzsignale mit dynamischen Unterstützungs- und Widerstandslinien kombiniert, die auf 52-Wochen-Hoch- und Tiefstständen basieren. Ihre Stärken liegen in der Signalbestätigungszuverlässigkeit und der umfassenden Risikokontrolle, obwohl auf unterschiedliche Markt- und Verzögerungsrisiken geachtet werden muss. Durch kontinuierliche Optimierung und Verbesserung verspricht diese Strategie eine stabile Rendite in Trendmärkten.
/*backtest start: 2019-12-23 08:00:00 end: 2024-12-25 08:00:00 period: 1d basePeriod: 1d exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("MACD Bitcoin strategy con 52W High/Low (linee estese)", overlay=true) // === MACD SETTINGS === fastLength = 12 slowLength = 26 signalSmoothing = 9 // Funzione per ottenere i valori MACD getMACD(source, timeframe) => [macdLine, signalLine, _] = ta.macd(source, fastLength, slowLength, signalSmoothing) [macdLine, signalLine] // Valori MACD Settimanali [macdWeekly, signalWeekly] = request.security(syminfo.tickerid, "W", getMACD(close, "W"), lookahead=barmerge.lookahead_on) // Valori MACD Giornalieri [macdDaily, signalDaily] = getMACD(close, "D") // Variabile per lo stop loss var float lowOfSignalCandle = na // Condizione per l'ingresso longConditionWeekly = ta.crossover(macdWeekly, signalWeekly) exitConditionDaily = ta.crossunder(macdDaily, signalDaily) // Imposta Stop Loss sulla candela giornaliera if (exitConditionDaily) lowOfSignalCandle := low // Condizione di ingresso nel trade enterTradeCondition = macdWeekly > signalWeekly and ta.crossover(macdDaily, signalDaily) if (enterTradeCondition) strategy.entry("MACD Long", strategy.long) if (not na(lowOfSignalCandle)) strategy.exit("Stop Loss", "MACD Long", stop=lowOfSignalCandle) if (strategy.position_size == 0) lowOfSignalCandle := na // // === 52 WEEK HIGH/LOW SETTINGS === // // Input per selezionare tra Highs/Lows o Close // high_low_close = input.string(defval="Highs/Lows", title="Base 52 week values on candle:", options=["Highs/Lows", "Close"]) // // Calcolo dei valori delle 52 settimane // weekly_hh = request.security(syminfo.tickerid, "W", ta.highest(high, 52), lookahead=barmerge.lookahead_on) // weekly_ll = request.security(syminfo.tickerid, "W", ta.lowest(low, 52), lookahead=barmerge.lookahead_on) // weekly_hc = request.security(syminfo.tickerid, "W", ta.highest(close, 52), lookahead=barmerge.lookahead_on) // weekly_lc = request.security(syminfo.tickerid, "W", ta.lowest(close, 52), lookahead=barmerge.lookahead_on) // // Selezione dei valori in base all'input // high_plot = high_low_close == "Highs/Lows" ? weekly_hh : weekly_hc // low_plot = high_low_close == "Highs/Lows" ? weekly_ll : weekly_lc // // === LINEE ORIZZONTALI ESTESE FINO AL PREZZO ATTUALE === // var line highLine = na // var line lowLine = na // // Linea Orizzontale per il 52W High // if (na(highLine)) // highLine := line.new(bar_index, high_plot, bar_index + 1, high_plot, color=color.green, width=2, style=line.style_dashed, extend=extend.right) // else // line.set_y1(highLine, high_plot) // line.set_y2(highLine, high_plot) // // Linea Orizzontale per il 52W Low // if (na(lowLine)) // lowLine := line.new(bar_index, low_plot, bar_index + 1, low_plot, color=color.red, width=2, style=line.style_dashed, extend=extend.right) // else // line.set_y1(lowLine, low_plot) // line.set_y2(lowLine, low_plot) // // Etichette per le linee orizzontali // var label highLabel = na // var label lowLabel = na // if (na(highLabel)) // highLabel := label.new(bar_index, high_plot, "52W High", color=color.green, textcolor=color.white, style=label.style_label_down, size=size.small) // else // label.set_y(highLabel, high_plot) // label.set_x(highLabel, bar_index) // if (na(lowLabel)) // lowLabel := label.new(bar_index, low_plot, "52W Low", color=color.red, textcolor=color.white, style=label.style_label_up, size=size.small) // else // label.set_y(lowLabel, low_plot) // label.set_x(lowLabel, bar_index) // // Tracciamento delle Linee Estese // plot(high_plot, title="52W High", color=color.green, style=plot.style_linebr) // plot(low_plot, title="52W Low", color=color.red, style=plot.style_linebr)