Sumber dimuat naik... memuat...

Trend mengambil keuntungan/berhenti kehilangan pelbagai mod mengikut strategi berdasarkan EMA, Ribbon Madrid dan Saluran Donchian

Penulis:ChaoZhang, Tarikh: 2025-01-10 16:24:30
Tag:EMARRR

 Multi-Mode Take Profit/Stop Loss Trend Following Strategy Based on EMA, Madrid Ribbon and Donchian Channel

Ringkasan

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.

Prinsip Strategi

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.

Kelebihan Strategi

  1. Sistem pengurusan TP/SL yang fleksibel yang dapat disesuaikan dengan gaya perdagangan yang berbeza
  2. Gabungan beberapa penunjuk teknikal memberikan isyarat yang lebih boleh dipercayai
  3. Mekanisme pengesahan berganda berkesan mengurangkan isyarat palsu
  4. Strategi benar-benar mengelakkan bias melihat ke hadapan tanpa melukis semula
  5. Sangat disesuaikan untuk persekitaran pasaran yang berbeza

Risiko Strategi

  1. Potensi pengeluaran yang signifikan semasa pembalikan trend Penyelesaian: Sesuaikan parameter penunjuk untuk meningkatkan kepekaan strategi
  2. Kepercayaan yang berlebihan pada penunjuk teknikal boleh kehilangan peluang pasaran tertentu Penyelesaian: Cadangkan menggabungkan dengan analisis asas
  3. TP/SL tetap mungkin tidak sesuai dengan semua keadaan pasaran Penyelesaian: Sesuaikan tahap TP/SL secara dinamik berdasarkan turun naik

Arahan Pengoptimuman Strategi

  1. Memperkenalkan penunjuk turun naik untuk penyesuaian TP/SL dinamik
  2. Tambah analisis jumlah untuk meningkatkan kebolehpercayaan isyarat
  3. Memasukkan lebih banyak penunjuk sentimen pasaran
  4. Membangunkan sistem pengoptimuman parameter adaptif
  5. Tambah modul pengurusan risiko, seperti kawalan pengambilan maksimum

Ringkasan

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)


Berkaitan

Lebih lanjut