Strategi Kombinasi Pelacakan Tren Crossover Rata-rata Bergerak Dinamis

EMA SMA Moving Average CROSSOVER TREND FOLLOWING STOP LOSS TAKE PROFIT
Tanggal Pembuatan: 2025-02-24 09:46:10 Akhirnya memodifikasi: 2025-02-24 09:46:10
menyalin: 1 Jumlah klik: 315
2
fokus pada
319
Pengikut

Strategi Kombinasi Pelacakan Tren Crossover Rata-rata Bergerak Dinamis Strategi Kombinasi Pelacakan Tren Crossover Rata-rata Bergerak Dinamis

Ringkasan

Strategi ini adalah sistem pelacakan tren berbasis crossover multiple mean line, yang menggabungkan indikator SMA dan EMA untuk menangkap tren pasar. Strategi ini menggunakan kombinasi rata-rata bergerak sederhana (SMA) dan dua rata-rata bergerak indeks (EMA) dengan siklus kustom untuk membangun sistem perdagangan pelacakan tren yang lengkap.

Prinsip Strategi

Strategi ini membuat keputusan perdagangan berdasarkan hubungan dinamis antara tiga garis rata. Sistem ini menentukan arah tren dengan memantau posisi harga relatif terhadap SMA, dan persilangan EMA cepat dengan EMA lambat. Sinyal masuk dibagi menjadi dua cara pemicu: pertama, harga berada di atas SMA (di bawah) dan EMA cepat (di atas) melalui EMA lambat; kedua, harga menembus SMA dan harga periode sebelumnya terus berada di atas SMA (di bawah).

Keunggulan Strategis

  1. Menggunakan kombinasi garis rata-rata ganda meningkatkan akurasi penilaian tren dan mengurangi kerugian akibat terobosan palsu
  2. Desain dengan syarat masuk ganda dapat menangkap peluang pada awal tren dan melacak kelanjutan dari tren yang telah ditetapkan
  3. Mekanisme Stop Loss Dinamis melindungi posisi yang sudah menguntungkan dan memberikan ruang bagi tren untuk berkembang sepenuhnya
  4. Stop Loss Ratio diatur secara wajar, dengan keseimbangan yang baik antara ruang kontrol risiko dan ruang keuntungan
  5. Persilangan rata-rata sebagai kondisi penutupan tambahan, membantu menghindari risiko pembalikan tren tepat waktu

Risiko Strategis

  1. Perdagangan yang sering terjadi di pasar yang bergejolak dapat menyebabkan kerugian.
  2. Multiple linear system dapat menyebabkan keterlambatan dalam pasar yang berfluktuasi cepat
  3. Stop loss multiplier tetap mungkin tidak cocok untuk semua kondisi pasar
  4. Stop loss bergerak dapat mengunci keuntungan terlalu dini di pasar yang lebih berfluktuasi
  5. Optimasi parameter yang berlebihan dapat menyebabkan strategi tidak berkinerja dengan hasil pengembalian di hard drive

Arah optimasi strategi

  1. Memperkenalkan indikator volatilitas untuk menyesuaikan stop loss dan stop loss multiplier secara dinamis, sehingga strategi lebih sesuai dengan kondisi pasar yang berbeda
  2. Meningkatkan indikator volume transaksi sebagai konfirmasi tambahan, meningkatkan keandalan sinyal masuk
  3. Adaptasi siklus rata-rata sesuai dengan dinamika karakteristik pasar yang bergejolak untuk meningkatkan fleksibilitas strategi
  4. Menambahkan filter intensitas tren untuk menghindari sering berdagang di lingkungan tren yang lemah
  5. Mengembangkan mekanisme stop loss yang dapat beradaptasi untuk menyesuaikan jarak stop loss sesuai dengan dinamika volatilitas pasar

Meringkaskan

Strategi ini menggunakan kombinasi dari beberapa garis rata untuk membangun sistem pelacakan tren yang lengkap, dengan desain aturan yang terperinci dalam hal masuk, keluar, dan manajemen risiko. Keuntungan dari strategi ini adalah kemampuan untuk mengidentifikasi dan melacak tren secara efektif, sekaligus melindungi keuntungan melalui mekanisme stop loss dinamis. Meskipun ada beberapa risiko yang melekat, strategi ini dapat ditingkatkan lebih lanjut melalui stabilitas dan adaptasi melalui arah optimasi yang diusulkan.

Kode Sumber Strategi
/*backtest
start: 2025-02-17 17:00:00
end: 2025-02-20 00:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Binance","currency":"SOL_USDT"}]
*/

//@version=5
strategy("交易策略(自定义EMA/SMA参数)", overlay=true, initial_capital=100000, currency=currency.EUR, default_qty_type=strategy.percent_of_equity, default_qty_value=10)

// 输入参数:可调的 SMA 和 EMA 周期
smaLength     = input.int(120, "SMA Length", minval=1, step=1)
emaFastPeriod = input.int(13, "EMA Fast Period", minval=1, step=1)
emaSlowPeriod = input.int(21, "EMA Slow Period", minval=1, step=1)

// 计算均线
smaVal   = ta.sma(close, smaLength)
emaFast  = ta.ema(close, emaFastPeriod)
emaSlow  = ta.ema(close, emaSlowPeriod)

// 绘制均线
plot(smaVal, color=color.orange, title="SMA")
plot(emaFast, color=color.blue, title="EMA Fast")
plot(emaSlow, color=color.red, title="EMA Slow")

// 入场条件 - 做多
// 条件1:收盘价高于SMA 且 EMA Fast 向上穿越 EMA Slow
longTrigger1 = (close > smaVal) and ta.crossover(emaFast, emaSlow)
// 条件2:收盘价上穿SMA 且前5根K线的最低价均高于各自的SMA
longTrigger2 = ta.crossover(close, smaVal) and (low[1] > smaVal[1] and low[2] > smaVal[2] and low[3] > smaVal[3] and low[4] > smaVal[4] and low[5] > smaVal[5])
longCondition = longTrigger1 or longTrigger2

// 入场条件 - 做空
// 条件1:收盘价低于SMA 且 EMA Fast 向下穿越 EMA Slow
shortTrigger1 = (close < smaVal) and ta.crossunder(emaFast, emaSlow)
// 条件2:收盘价下穿SMA 且前5根K线的最高价均低于各自的SMA
shortTrigger2 = ta.crossunder(close, smaVal) and (high[1] < smaVal[1] and high[2] < smaVal[2] and high[3] < smaVal[3] and high[4] < smaVal[4] and high[5] < smaVal[5])
shortCondition = shortTrigger1 or shortTrigger2

// 定义变量记录入场时的价格与EMA Fast值,用于计算止损
var float entryPriceLong      = na
var float entryEMA_Fast_Long   = na
var float entryPriceShort     = na
var float entryEMA_Fast_Short = na

// 入场与初始止盈止损设置 - 做多
// 止损取“开仓时的EMA Fast价格”与“0.2%止损”中较大者;止盈为止损的5倍
if (longCondition and strategy.position_size == 0)
    entryPriceLong      := close
    entryEMA_Fast_Long  := emaFast
    strategy.entry("Long", strategy.long)
    stopPercLong = math.max(0.002, (entryPriceLong - entryEMA_Fast_Long) / entryPriceLong)
    stopLong     = entryPriceLong * (1 - stopPercLong)
    tpLong       = entryPriceLong * (1 + 5 * stopPercLong)
    strategy.exit("LongExit", "Long", stop=stopLong, limit=tpLong)

// 入场与初始止盈止损设置 - 做空
// 止损取“开仓时的EMA Fast价格”与“0.2%止损”中较大者;止盈为止损的5倍
if (shortCondition and strategy.position_size == 0)
    entryPriceShort      := close
    entryEMA_Fast_Short  := emaFast
    strategy.entry("Short", strategy.short)
    stopPercShort = math.max(0.002, (entryEMA_Fast_Short - entryPriceShort) / entryPriceShort)
    stopShort     = entryPriceShort * (1 + stopPercShort)
    tpShort       = entryPriceShort * (1 - 5 * stopPercShort)
    strategy.exit("ShortExit", "Short", stop=stopShort, limit=tpShort)

// 移动止损逻辑
// 当持仓盈利达到0.8%时更新止损和止盈,保持止盈为止损的5倍
var float longHighest = na
if (strategy.position_size > 0)
    longHighest := na(longHighest) ? high : math.max(longHighest, high)
    if (high >= entryPriceLong * 1.008)
        newLongStop = longHighest * (1 - 0.003)
        newPerc     = (entryPriceLong - newLongStop) / entryPriceLong
        newLongTP   = entryPriceLong * (1 + 5 * newPerc)
        strategy.exit("LongExit", "Long", stop=newLongStop, limit=newLongTP)
else
    longHighest := na

var float shortLowest = na
if (strategy.position_size < 0)
    shortLowest := na(shortLowest) ? low : math.min(shortLowest, low)
    if (low <= entryPriceShort * 0.992)
        newShortStop  = shortLowest * (1 + 0.003)
        newPercShort  = (newShortStop - entryPriceShort) / entryPriceShort
        newShortTP    = entryPriceShort * (1 - 5 * newPercShort)
        strategy.exit("ShortExit", "Short", stop=newShortStop, limit=newShortTP)
else
    shortLowest := na

// 额外平仓条件
// 如果持多仓时EMA Fast下穿EMA Slow,则立即平多
if (strategy.position_size > 0 and ta.crossunder(emaFast, emaSlow))
    strategy.close("Long", comment="EMA下穿平多")
// 如果持空仓时EMA Fast上穿EMA Slow,则立即平空
if (strategy.position_size < 0 and ta.crossover(emaFast, emaSlow))
    strategy.close("Short", comment="EMA上穿平空")