This strategy combines MACD cross signals from multiple timeframes with dynamic support and resistance levels based on 52-week highs and lows. It confirms trading signals through MACD crossovers on both weekly and daily timeframes while utilizing dynamic support and resistance lines formed by 52-week highs and lows to assist in market trend analysis, enabling more robust trading decisions. The strategy employs a dynamic stop-loss mechanism to effectively control risk while ensuring profits.
The strategy is based on the following core logic:
This strategy constructs a complete trend-following trading system by combining multi-timeframe MACD cross signals with dynamic support and resistance lines based on 52-week highs and lows. Its strengths lie in signal confirmation reliability and comprehensive risk control, though attention must be paid to ranging market and lag risks. Through continuous optimization and improvement, this strategy shows promise for achieving stable returns in trending markets.
/*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)