Ini adalah strategi trend berikut yang menggabungkan Exponential Moving Average (EMA), Madrid Ribbon, dan Saluran Donchian. Keunikan strategi ini terletak pada tiga mod mengambil keuntungan / berhenti kerugian yang boleh ditukar: berasaskan tik, berasaskan dolar, dan berasaskan nisbah risiko-balasan. Ia meningkatkan kebolehpercayaan melalui mekanisme pengesahan berganda, hanya melaksanakan perdagangan pada isyarat sah kedua.
Strategi ini menggunakan gabungan tiga penunjuk teknikal untuk mengenal pasti peluang perdagangan: 1. EMA 200 tempoh untuk menentukan arah trend keseluruhan 2. Ribbon Madrid (crossover EMA 5 tempoh dan 100 tempoh) untuk penilaian trend jangka sederhana 3. Penembusan Saluran Donchian untuk masa kemasukan tertentu
Keadaan perdagangan panjang: harga di atas 200 EMA, Ribbon Madrid yang menaik, dan harga pecah di atas Saluran Donchian. Keadaan perdagangan pendek: harga di bawah 200 EMA, Ribbon Madrid yang menurun, dan harga pecah di bawah Saluran Donchian. Untuk mengurangkan isyarat palsu, dagangan hanya dilaksanakan pada kejadian isyarat yang sah kedua.
Ini adalah strategi trend berikut yang menggabungkan beberapa penunjuk teknikal klasik, meningkatkan kestabilan perdagangan melalui pengurusan TP / SL yang fleksibel dan mekanisme pengesahan berganda. Keupayaan strategi yang tinggi membolehkannya menyesuaikan diri dengan persekitaran pasaran dan gaya perdagangan yang berbeza.
/*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)