이것은 기하급수적인 이동 평균 (EMA), 마드리드 리본, 그리고 돈치안 채널을 결합한 트렌드 다음 전략이다. 전략의 독특함은 세 개의 전환 가능한 영업/손실 중지 모드 (tick-based, dollar-based, and risk-reward ratio based) 에 있다. 이중 확인 메커니즘을 통해 신뢰성을 높여서 두 번째 유효 신호에 따라 거래를 실행한다.
이 전략은 세 가지 기술 지표 조합을 사용하여 거래 기회를 식별합니다. 1. 200주기 EMA는 전체 트렌드 방향을 결정합니다. 2. 중장기 트렌드 판단을 위한 마드리드 리본 (5주기 및 100주기 EMA의 크로스오버) 3. 특정 진입 시기를 위해 돈치안 채널의 탈출
긴 거래 조건: 200 EMA 이상의 가격, 상승 마드리드 리본, 돈치안 채널 이상의 가격 파업. 단기 거래 조건: 200 EMA 이하의 가격, 하락 마드리드 리본, 돈치안 채널 이하의 가격 파업. 잘못된 신호를 줄이기 위해 거래는 두 번째 유효한 신호 발생일 때만 실행됩니다.
이 전략은 여러 가지 고전적인 기술 지표를 결합하여 유연한 TP/SL 관리 및 이중 확인 메커니즘을 통해 거래 안정성을 향상시키는 트렌드 다음 전략입니다. 전략의 높은 사용자 정의 가능성은 다른 시장 환경과 거래 스타일에 적응 할 수 있습니다. 라이브 거래 전에 철저한 역사 데이터 백테스팅을 수행하고 특정 시장 특성에 따라 매개 변수를 조정하는 것이 좋습니다.
/*backtest start: 2019-12-23 08:00:00 end: 2025-01-08 08:00:00 period: 1d basePeriod: 1d exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT","balance":49999}] */ //@version=6 strategy("Pamplona Enhanced TP/SL Toggleable", overlay=true, default_qty_type=strategy.fixed, default_qty_value=1) // Input settings use_tick_based = input.bool(false, title="Use Tick-Based TP/SL") use_dollar_based = input.bool(false, title="Use Dollar-Based TP/SL") use_risk_reward = input.bool(true, title="Use Risk-Reward TP/SL") // Default option tick_size = input.float(0.1, title="Tick Size (for Tick-Based)", minval=0.0001, step=0.0001) ticks = input.int(10, title="Ticks (for Tick-Based TP/SL)", minval=1) dollar_tp = input.float(10.0, title="Dollar Take Profit (for Dollar-Based)", minval=0.01, step=0.01) dollar_sl = input.float(10.0, title="Dollar Stop Loss (for Dollar-Based)", minval=0.01, step=0.01) risk_reward_ratio = input.float(2.0, title="Risk-Reward Ratio (for Risk-Reward TP/SL)", minval=0.1, step=0.1) contract_size = input.int(1, title="Contract Size", minval=1) // Retrieve indicators ema200 = ta.ema(close, 200) src = close ma05 = ta.ema(src, 5) ma100 = ta.ema(src, 100) madrid_green = ma05 > ma100 dlen = input.int(20, title="Donchian Channel Period") highest_d = ta.highest(high, dlen) lowest_d = ta.lowest(low, dlen) donchian_green = close > highest_d[1] donchian_red = close < lowest_d[1] // Track signals var int long_signal_count = 0 var int short_signal_count = 0 // Conditions long_condition_raw = madrid_green and donchian_green and close > ema200 short_condition_raw = not madrid_green and donchian_red and close < ema200 // Update signal counters if long_condition_raw long_signal_count += 1 else long_signal_count := 0 if short_condition_raw short_signal_count += 1 else short_signal_count := 0 // Final conditions to enter on the second signal long_condition = long_signal_count == 2 short_condition = short_signal_count == 2 // Ensure exactly one TP/SL mode is enabled tp_sl_mode_count = (use_tick_based ? 1 : 0) + (use_dollar_based ? 1 : 0) + (use_risk_reward ? 1 : 0) if tp_sl_mode_count != 1 runtime.error("Enable exactly ONE TP/SL mode (Tick-Based, Dollar-Based, or Risk-Reward).") // Function to calculate TP/SL based on active mode calc_tp_sl(entry_price, is_long) => float tp = na float sl = na if use_tick_based tp := is_long ? entry_price + ticks * tick_size : entry_price - ticks * tick_size sl := is_long ? entry_price - ticks * tick_size : entry_price + ticks * tick_size else if use_dollar_based tp := is_long ? entry_price + (dollar_tp / contract_size) : entry_price - (dollar_tp / contract_size) sl := is_long ? entry_price - (dollar_sl / contract_size) : entry_price + (dollar_sl / contract_size) else if use_risk_reward risk = is_long ? close - low : high - close tp := is_long ? close + (risk * risk_reward_ratio) : close - (risk * risk_reward_ratio) sl := is_long ? close - risk : close + risk [tp, sl] // Entry logic if long_condition [take_profit, stop_loss] = calc_tp_sl(close, true) strategy.entry("Long", strategy.long, qty=contract_size) strategy.exit("Take Profit", from_entry="Long", limit=take_profit, stop=stop_loss) if short_condition [take_profit, stop_loss] = calc_tp_sl(close, false) strategy.entry("Short", strategy.short, qty=contract_size) strategy.exit("Take Profit", from_entry="Short", limit=take_profit, stop=stop_loss) // Plot indicators plot(ema200, title="200 EMA", color=color.white, linewidth=2) bgcolor(long_condition ? color.new(color.green, 90) : short_condition ? color.new(color.red, 90) : na)