Strategi mengikuti tren stop-profit dan stop-loss multi-mode berdasarkan EMA, Madrid Bands, dan Donchian Channels

EMA RRR
Tanggal Pembuatan: 2025-01-10 16:24:30 Akhirnya memodifikasi: 2025-01-10 16:24:30
menyalin: 2 Jumlah klik: 418
1
fokus pada
1617
Pengikut

Strategi mengikuti tren stop-profit dan stop-loss multi-mode berdasarkan EMA, Madrid Bands, dan Donchian Channels

Ringkasan

Ini adalah strategi mengikuti tren yang menggabungkan Rata-Rata Pergerakan Eksponensial (EMA), Pita Madrid, dan Saluran Donchian. Keunikan strategi ini terletak pada penyediaan tiga mode stop-profit dan stop-loss yang dapat dialihkan: berdasarkan poin, berdasarkan jumlah, dan berdasarkan rasio risiko-imbal hasil. Keandalan transaksi ditingkatkan melalui mekanisme konfirmasi sinyal sekunder, dan transaksi hanya dilakukan ketika sinyal valid muncul untuk kedua kalinya.

Prinsip Strategi

Strategi ini menggunakan kombinasi tiga indikator teknis untuk mengidentifikasi peluang perdagangan:

  1. Rata-rata pergerakan eksponensial periode 200 digunakan untuk menentukan arah tren keseluruhan
  2. Madrid Bands (persilangan EMA 5 periode dan EMA 100 periode) digunakan untuk menentukan tren jangka menengah
  3. Penembusan Saluran Donchian untuk Waktu Masuk Tertentu

Kondisi perdagangan panjang: harga berada di atas 200EMA, Madrid Band berubah menguat dan harga menembus Saluran Donchian bagian atas. Kondisi perdagangan pendek: harga di bawah 200EMA, Madrid Band berubah menjadi bearish dan harga keluar dari Saluran Donchian bagian bawah. Untuk mengurangi sinyal palsu, strategi ini mengeksekusi perdagangan hanya ketika sinyal valid muncul untuk kedua kalinya.

Keunggulan Strategis

  1. Sistem manajemen stop-profit dan stop-loss yang fleksibel, yang dapat beralih mode sesuai dengan gaya perdagangan yang berbeda
  2. Kombinasi beberapa indikator teknis memberikan sinyal perdagangan yang lebih andal
  3. Mekanisme konfirmasi sekunder secara efektif mengurangi dampak sinyal palsu
  4. Strategi ini sepenuhnya menghindari bias melihat ke depan dan tidak ada masalah menggambar ulang.
  5. Sangat dapat disesuaikan untuk beradaptasi dengan lingkungan pasar yang berbeda

Risiko Strategis

  1. Retracement yang lebih besar mungkin terjadi ketika tren berbalik Solusi: Anda dapat meningkatkan sensitivitas strategi dengan menyesuaikan parameter indikator
  2. Terlalu bergantung pada indikator teknis dapat menyebabkan hilangnya peluang pasar Solusi: Disarankan untuk menggabungkan analisis fundamental
  3. Stop-loss dan take-profit tetap mungkin tidak cocok untuk semua kondisi pasar Solusi: Sesuaikan level take-profit dan stop-loss secara dinamis berdasarkan volatilitas

Arah optimasi strategi

  1. Memperkenalkan indikator volatilitas untuk menyesuaikan level take-profit dan stop-loss secara dinamis
  2. Menambahkan analisis volume untuk meningkatkan keandalan sinyal
  3. Menambahkan lebih banyak indikator sentimen pasar
  4. Pengembangan sistem optimasi parameter adaptif
  5. Tambahkan modul manajemen risiko, seperti kontrol penarikan maksimum

Meringkaskan

Ini adalah strategi pelacakan tren yang menggabungkan beberapa indikator teknis klasik, meningkatkan stabilitas transaksi melalui manajemen stop-profit dan stop-loss yang fleksibel dan mekanisme konfirmasi sekunder. Kustomisasi strategi yang tinggi memungkinkannya beradaptasi dengan berbagai lingkungan pasar dan gaya perdagangan. Disarankan untuk melakukan pengujian ulang data historis yang memadai sebelum penggunaan aktual dan menyesuaikan pengaturan parameter menurut karakteristik pasar tertentu.

Kode 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)