Aliran lantunan sistem perdagangan purata bergerak berganda digabungkan dengan strategi pengoptimuman stop loss dinamik ATR

EMA ATR SL TP MA
Tarikh penciptaan: 2025-01-10 15:19:40 Akhirnya diubah suai: 2025-01-10 15:19:40
Salin: 1 Bilangan klik: 454
1
fokus pada
1617
Pengikut

Aliran lantunan sistem perdagangan purata bergerak berganda digabungkan dengan strategi pengoptimuman stop loss dinamik ATR

Gambaran keseluruhan

Strategi ini ialah sistem perdagangan mengikut arah aliran berdasarkan sistem purata bergerak berganda dan stop loss dinamik ATR. Ia menggunakan purata bergerak eksponen (EMA) 38 dan 62 tempoh untuk mengenal pasti arah aliran pasaran, menentukan isyarat kemasukan melalui persilangan harga dengan EMA pantas dan menggabungkannya dengan penunjuk ATR untuk pengurusan henti kerugian dinamik. Strategi ini menyediakan kedua-dua mod perdagangan yang agresif dan konservatif untuk disesuaikan dengan peniaga yang mempunyai keutamaan risiko yang berbeza.

Prinsip Strategi

Logik teras strategi adalah berdasarkan elemen utama berikut:

  1. Penentuan arah aliran: Aliran pasaran semasa ditentukan oleh hubungan kedudukan antara EMA 38 dan 62 tempoh. Apabila EMA pantas berada di atas EMA perlahan, ia adalah aliran menaik, jika tidak ia adalah aliran menurun.
  2. Isyarat Kemasukan: Dalam aliran menaik, isyarat panjang dijana apabila harga menembusi EMA pantas dari bawah dalam aliran menurun, isyarat pendek dijana apabila harga menembusi di bawah EMA pantas dari atas.
  3. Pengurusan Risiko: Menggunakan sistem henti rugi dinamik berdasarkan ATR, tahap henti rugi diselaraskan sewajarnya apabila harga bergerak ke arah yang menggalakkan, melindungi keuntungan sedia ada sambil tidak meninggalkan pasaran lebih awal. Peratusan tetap henti rugi dan sasaran keuntungan juga ditetapkan.

Kelebihan Strategik

  1. Prestasi penjejakan arah aliran yang sangat baik: Sistem purata bergerak berkembar boleh menangkap arah aliran jangka sederhana dan panjang dengan berkesan serta mengelakkan dagangan yang kerap dalam pasaran yang tidak menentu.
  2. Kawalan risiko yang sempurna: Menggabungkan stop loss tetap dan stop loss dinamik boleh mengehadkan risiko maksimum dan melindungi keuntungan.
  3. Kebolehsuaian yang kukuh: Ia menyediakan dua mod dagangan, agresif dan konservatif, yang boleh diselaraskan secara fleksibel mengikut persekitaran pasaran dan keutamaan risiko peribadi.
  4. Maklum balas visual yang jelas: Status pasaran dan isyarat dagangan dipaparkan secara intuitif melalui garis-K dan tanda anak panah dengan warna yang berbeza.

Risiko Strategik

  1. Risiko pembalikan arah aliran: Hentian berterusan mungkin berlaku pada titik pembalikan arah aliran. Adalah disyorkan untuk berdagang hanya apabila arah aliran jelas.
  2. Risiko gelinciran: Apabila pasaran turun naik dengan kuat, harga transaksi sebenar mungkin menyimpang dengan ketara daripada harga isyarat. Julat henti rugi hendaklah dilonggarkan dengan sewajarnya.
  3. Kepekaan parameter: Pilihan tempoh purata bergerak dan berbilang ATR akan mempengaruhi prestasi strategi dengan ketara. Perlu dioptimumkan untuk persekitaran pasaran yang berbeza.

Arah pengoptimuman strategi

  1. Tambah penapis kekuatan arah aliran: Penunjuk kekuatan aliran seperti ADX boleh diperkenalkan untuk memasuki pasaran hanya apabila arah aliran itu jelas.
  2. Mekanisme henti rugi yang dioptimumkan: Berbilang ATR boleh dilaraskan secara dinamik mengikut turun naik untuk menjadikan henti rugi lebih mudah disesuaikan.
  3. Tambah pengesahan kelantangan: Apabila isyarat masuk muncul, gabungkannya dengan analisis kelantangan untuk meningkatkan kebolehpercayaan isyarat.
  4. Klasifikasi persekitaran pasaran: Laraskan parameter strategi secara dinamik mengikut persekitaran pasaran yang berbeza (trend/ayunan).

ringkaskan

Strategi ini membina sistem perdagangan mengikut arah aliran yang lengkap dengan menggabungkan sistem purata bergerak berganda klasik dengan teknologi henti rugi dinamik moden. Kelebihan strategi ini ialah kawalan risikonya yang sempurna dan kebolehsuaian yang kukuh, tetapi pedagang masih perlu mengoptimumkan parameter dan mengurus risiko mengikut persekitaran pasaran tertentu. Melalui arahan pengoptimuman yang disyorkan, kestabilan dan keuntungan strategi dijangka akan dipertingkatkan lagi.

Kod sumber strategi
/*backtest
start: 2024-12-10 00:00:00
end: 2025-01-08 08:00:00
period: 4h
basePeriod: 4h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © aalapsharma

//@version=5
strategy(title="CM_SlingShotSystem - Strategy", shorttitle="SlingShotSys_Enhanced_v5", overlay=true, initial_capital=100000, default_qty_type=strategy.percent_of_equity, default_qty_value=100, pyramiding=1)

// Inputs
sae = input.bool(true, "Show Aggressive Entry Bars? (Highlight only)")
sce = input.bool(true, "Show Conservative Entry Bars? (Highlight only)")
st = input.bool(true, "Show Trend Arrows (Top/Bottom)?")
def = input.bool(false, "(Unused) Only Choose 1 - Either Conservative Entry Arrows or 'B'-'S' Letters")
pa = input.bool(true, "Show Conservative Entry Arrows?")
sl = input.bool(false, "Show 'B'-'S' Letters?")
useStopLoss = input.bool(true, "Use Stop-Loss?")
stopLossPerc = input.float(5.0, "Stop-Loss (%)", step=0.1)
useTakeProfit = input.bool(true, "Use Take-Profit?")
takeProfitPerc = input.float(20.0, "Take-Profit (%)", step=0.1)
useTrailingStop = input.bool(false, "Use ATR Trailing Stop?")
atrLength = input.int(14, "ATR Length", minval=1)
atrMult = input.float(2.0, "ATR Multiple for Trailing Stop", step=0.1)

// Calculations
emaSlow = ta.ema(close, 62)
emaFast = ta.ema(close, 38)
upTrend = emaFast >= emaSlow
downTrend = emaFast < emaSlow
pullbackUpT() => emaFast > emaSlow and close < emaFast
pullbackDnT() => emaFast < emaSlow and close > emaFast
entryUpT() => emaFast > emaSlow and close[1] < emaFast and close > emaFast
entryDnT() => emaFast < emaSlow and close[1] > emaFast and close < emaFast
entryUpTrend = entryUpT() ? 1 : 0
entryDnTrend = entryDnT() ? 1 : 0
atrValue = ta.atr(atrLength)

// Trailing Stop Logic (Improved)
var float trailStopLong = na
var float trailStopShort = na

if (strategy.position_size > 0)
    trailStopLong := math.max(close - (atrValue * atrMult), nz(trailStopLong[1], close))
    trailStopLong := strategy.position_avg_price > trailStopLong ? strategy.position_avg_price : trailStopLong
else
    trailStopLong := na

if (strategy.position_size < 0)
    trailStopShort := math.min(close + (atrValue * atrMult), nz(trailStopShort[1], close))
    trailStopShort := strategy.position_avg_price < trailStopShort ? strategy.position_avg_price : trailStopShort
else
    trailStopShort := na

// Plotting
col = emaFast > emaSlow ? color.lime : emaFast < emaSlow ? color.red : color.yellow
p1 = plot(emaSlow, "Slow MA (62)", linewidth=4, color=col)
p2 = plot(emaFast, "Fast MA (38)", linewidth=2, color=col)
fill(p1, p2, color=color.silver, transp=50)
barcolor((sae and pullbackUpT()) ? color.yellow : (sae and pullbackDnT()) ? color.yellow : na)
barcolor((sce and entryUpT()) ? color.aqua : (sce and entryDnT()) ? color.aqua : na)
plotshape(st and upTrend, title="Trend UP", style=shape.triangleup, location=location.bottom, color=color.lime)
plotshape(st and downTrend, title="Trend DOWN", style=shape.triangledown, location=location.top, color=color.red)
plotarrow((pa and entryUpTrend == 1) ? 1 : na, title="Up Entry Arrow", colorup=color.lime, maxheight=30, minheight=30)
plotarrow((pa and entryDnTrend == 1) ? -1 : na, title="Down Entry Arrow", colordown=color.red, maxheight=30, minheight=30)
plotchar(sl and entryUpTrend ? (low - ta.tr) : na, title="Buy Entry (Letter)", char='B', location=location.absolute, color=color.lime)
plotchar(sl and entryDnTrend ? (high + ta.tr) : na, title="Short Entry (Letter)", char='S', location=location.absolute, color=color.red)
plot(useTrailingStop and strategy.position_size > 0 ? trailStopLong : na, "Trailing Stop Long", color=color.green, style=plot.style_linebr)
plot(useTrailingStop and strategy.position_size < 0 ? trailStopShort : na, "Trailing Stop Short", color=color.red, style=plot.style_linebr)

// Function to calculate stop and limit prices
f_calcStops(_entryPrice, _isLong) =>
    _stopLoss = _isLong ? _entryPrice * (1.0 - stopLossPerc / 100.0) : _entryPrice * (1.0 + stopLossPerc / 100.0)
    _takeProfit = _isLong ? _entryPrice * (1.0 + takeProfitPerc / 100.0) : _entryPrice * (1.0 - takeProfitPerc / 100.0)
    [_stopLoss, _takeProfit]

// Entry and Exit Logic (Simplified using strategy.close)
if (entryUpT() and strategy.position_size == 0)
    strategy.entry("Long", strategy.long)

if (entryDnT() and strategy.position_size == 0)
    strategy.entry("Short", strategy.short)

// Exit conditions based on Stop-loss and Take-profit
[slPrice, tpPrice] = f_calcStops(strategy.position_avg_price, strategy.position_size > 0)

if (strategy.position_size > 0)
    strategy.exit("Exit Long", "Long", stop=slPrice, limit=tpPrice, trail_price = trailStopLong, trail_offset = atrValue * atrMult)

if (strategy.position_size < 0)
    strategy.exit("Exit Short", "Short", stop=slPrice, limit=tpPrice, trail_price = trailStopShort, trail_offset = atrValue * atrMult)

// Close opposite position on new entry signal
if (entryUpT() and strategy.position_size < 0)
    strategy.close("Short", comment="Close Short on Long Signal")

if (entryDnT() and strategy.position_size > 0)
    strategy.close("Long", comment="Close Long on Short Signal")