Strategi mengikut arah aliran henti untung dan henti rugi berbilang mod berdasarkan EMA, Pancaragam Madrid dan Saluran Donchian

EMA RRR
Tarikh penciptaan: 2025-01-10 16:24:30 Akhirnya diubah suai: 2025-01-10 16:24:30
Salin: 2 Bilangan klik: 418
1
fokus pada
1617
Pengikut

Strategi mengikut arah aliran henti untung dan henti rugi berbilang mod berdasarkan EMA, Pancaragam Madrid dan Saluran Donchian

Gambaran keseluruhan

Ini ialah strategi mengikut aliran yang menggabungkan Purata Pergerakan Eksponen (EMA), Reben Madrid dan Saluran Donchian. Keunikan strategi terletak pada penyediaan tiga mod henti untung dan henti rugi boleh tukar: berdasarkan mata, berdasarkan jumlah dan berdasarkan nisbah pulangan risiko. Kebolehpercayaan transaksi dipertingkatkan melalui mekanisme pengesahan isyarat sekunder, dan transaksi hanya dibuat apabila isyarat yang sah muncul untuk kali kedua.

Prinsip Strategi

Strategi ini menggunakan gabungan tiga penunjuk teknikal untuk mengenal pasti peluang dagangan:

  1. Purata pergerakan eksponen 200 tempoh digunakan untuk menentukan arah aliran keseluruhan
  2. Pancaragam Madrid (silang EMA 5 tempoh dan 100 tempoh) digunakan untuk menentukan arah aliran jangka sederhana
  3. Pecahan Saluran Donchian untuk Masa Kemasukan Khusus

Keadaan dagangan yang panjang: harga melebihi 200EMA, Madrid Band bertukar menaik dan harga menembusi saluran atas Donchian. Syarat dagangan pendek: harga di bawah 200EMA, Madrid Band bertukar menurun dan harga menembusi saluran Donchian yang lebih rendah. Untuk mengurangkan isyarat palsu, strategi melaksanakan perdagangan hanya apabila isyarat sah muncul untuk kali kedua.

Kelebihan Strategik

  1. Sistem pengurusan henti untung dan henti rugi yang fleksibel, yang boleh menukar mod mengikut gaya dagangan yang berbeza
  2. Gabungan pelbagai penunjuk teknikal menyediakan isyarat dagangan yang lebih dipercayai
  3. Mekanisme pengesahan sekunder berkesan mengurangkan kesan isyarat palsu
  4. Strategi ini benar-benar mengelakkan berat sebelah pandangan ke hadapan dan tidak ada masalah lukisan semula.
  5. Sangat disesuaikan untuk menyesuaikan diri dengan persekitaran pasaran yang berbeza

Risiko Strategik

  1. Anjakan yang lebih besar mungkin berlaku apabila arah aliran berbalik Penyelesaian: Anda boleh meningkatkan sensitiviti strategi dengan melaraskan parameter penunjuk
  2. Pergantungan yang berlebihan pada penunjuk teknikal boleh menyebabkan terlepas peluang pasaran Penyelesaian: Adalah disyorkan untuk menggabungkan analisis asas
  3. Henti rugi dan ambil untung tetap mungkin tidak sesuai untuk semua keadaan pasaran Penyelesaian: Laraskan tahap ambil untung dan henti rugi secara dinamik berdasarkan turun naik

Arah pengoptimuman strategi

  1. Memperkenalkan penunjuk turun naik untuk melaraskan tahap ambil untung dan henti kerugian secara dinamik
  2. Menambah analisis volum untuk meningkatkan kebolehpercayaan isyarat
  3. Menambah lebih banyak petunjuk sentimen pasaran
  4. Pembangunan sistem pengoptimuman parameter adaptif
  5. Tambah modul pengurusan risiko, seperti kawalan pengeluaran maksimum

ringkaskan

Ini ialah strategi penjejakan arah aliran yang menggabungkan berbilang penunjuk teknikal klasik, meningkatkan kestabilan transaksi melalui pengurusan henti untung dan henti rugi yang fleksibel serta mekanisme pengesahan sekunder. Kebolehsesuaian strategi yang tinggi membolehkannya menyesuaikan diri dengan persekitaran pasaran dan gaya dagangan yang berbeza. Adalah disyorkan untuk menjalankan ujian balik data sejarah yang mencukupi sebelum penggunaan sebenar dan melaraskan tetapan parameter mengikut ciri pasaran tertentu.

Kod sumber strategi
/*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)