Sumber daya yang dimuat... Pemuatan...

Trend Multi-Mode Take Profit/Stop Loss Mengikuti Strategi Berdasarkan EMA, Madrid Ribbon dan Donchian Channel

Penulis:ChaoZhang, Tanggal: 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

Gambaran umum

Ini adalah strategi trend yang menggabungkan EMA, Ribbon Madrid, dan Donchian Channel. Keunikan strategi ini terletak pada tiga mode take-profit/stop-loss yang dapat beralih: berbasis tik, berbasis dolar, dan berdasarkan rasio risiko-imbalan.

Prinsip Strategi

Strategi ini menggunakan kombinasi tiga indikator teknis untuk mengidentifikasi peluang perdagangan: 1. EMA 200 periode untuk menentukan arah tren keseluruhan 2. Madrid Ribbon (crossover dari EMA 5 periode dan 100 periode) untuk penilaian tren jangka menengah 3. Penembusan Saluran Donchian untuk waktu masuk tertentu

Kondisi perdagangan jangka panjang: harga di atas 200 EMA, ribbon Madrid bullish, dan price breaks di atas saluran Donchian. Kondisi perdagangan jangka pendek: harga di bawah 200 EMA, Ribbon Madrid yang menurun, dan harga yang turun di bawah Saluran Donchian. Untuk mengurangi sinyal palsu, perdagangan hanya dieksekusi pada kejadian sinyal valid kedua.

Keuntungan Strategi

  1. Sistem manajemen TP/SL yang fleksibel yang dapat disesuaikan dengan gaya perdagangan yang berbeda
  2. Kombinasi dari beberapa indikator teknis memberikan sinyal yang lebih dapat diandalkan
  3. Mekanisme konfirmasi ganda secara efektif mengurangi sinyal palsu
  4. Strategi benar-benar menghindari bias melihat ke depan tanpa melukis ulang
  5. Sangat dapat disesuaikan untuk lingkungan pasar yang berbeda

Risiko Strategi

  1. Potensi pemotongan signifikan selama pembalikan tren Solusi: Sesuaikan parameter indikator untuk meningkatkan sensitivitas strategi
  2. Percaya berlebihan pada indikator teknis dapat kehilangan peluang pasar tertentu Solusi: Rekomendasi menggabungkan dengan analisis fundamental
  3. TP/SL tetap mungkin tidak sesuai dengan semua kondisi pasar Solusi: Sesuaikan secara dinamis tingkat TP/SL berdasarkan volatilitas

Arah Optimasi Strategi

  1. Memperkenalkan indikator volatilitas untuk penyesuaian TP/SL dinamis
  2. Tambahkan analisis volume untuk meningkatkan keandalan sinyal
  3. Masukkan lebih banyak indikator sentimen pasar
  4. Mengembangkan sistem optimasi parameter adaptif
  5. Tambahkan modul manajemen risiko, seperti kontrol penarikan maksimum

Ringkasan

Ini adalah strategi trend berikut yang menggabungkan beberapa indikator teknis klasik, meningkatkan stabilitas perdagangan melalui manajemen TP / SL yang fleksibel dan mekanisme konfirmasi ganda. kemampuan kustomisasi strategi yang tinggi memungkinkan untuk beradaptasi dengan lingkungan pasar dan gaya perdagangan yang berbeda.


/*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 banyak