이 전략은 여러 시간 프레임에서 MACD 크로스 신호를 동적 지원 및 저항 수준과 결합하여 52 주 최고 및 최저치를 기반으로합니다. 이 전략은 수익을 보장하면서 위험을 효과적으로 제어하기 위해 동적 스톱 로스 메커니즘을 사용합니다.
이 전략은 다음과 같은 핵심 논리에 기반합니다.
이 전략은 다중 타임프레임 MACD 크로스 신호를 52주간의 최고와 최저에 기반한 동적 지원 및 저항 라인과 결합하여 완전한 트렌드-추천 거래 시스템을 구축합니다. 이 전략의 장점은 신호 확인 신뢰성과 포괄적인 위험 통제에 있습니다. 시장 및 지연 위험에 주의를 기울여야만 합니다. 지속적인 최적화 및 개선을 통해이 전략은 트렌딩 시장에서 안정적인 수익을 달성하는 것을 약속합니다.
/*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)