Strategi henti untung dan henti rugi purata bergerak tiga indeks


Tarikh penciptaan: 2024-02-04 10:38:42 Akhirnya diubah suai: 2024-02-04 10:38:42
Salin: 0 Bilangan klik: 680
1
fokus pada
1617
Pengikut

Strategi henti untung dan henti rugi purata bergerak tiga indeks

Gambaran keseluruhan

Strategi hentian terhenti tiga indeks rata-rata adalah strategi pemantauan trend untuk masuk dan keluar dari pasaran berdasarkan purata bergerak indeks dari tiga tempoh yang berbeza. Ia menggunakan penunjuk purata true amplitude untuk menetapkan titik hentian terhenti dan menguruskan risiko.

Prinsip Strategi

Strategi ini menggunakan tiga rata-rata bergerak indeks: garis cepat, garis tengah, dan garis perlahan. Lakukan lebih banyak ketika melintasi garis perlahan di garis tengah; posisi rata ketika melintasi garis tengah di bawah garis cepat. Ini adalah strategi pengesanan trend yang tipikal, yang menentukan arah trend melalui perpindahan tiga garis rata.

Strategi ini juga menggunakan indikator purata gelombang sebenar untuk mengira titik hentian. Secara khusus, lebih banyak titik hentian tunggal adalah harga masuk + purata gelombang sebenar.*Koefisien hentian; tempat hentian kosong sebagai harga masuk - purata gelombang sebenar*Kaedah penangguhan adalah sama dengan penangguhan, yang secara efektif dapat mengehadkan risiko unilateral.

Analisis kelebihan

  1. Penunjuk keputusan yang jelas dan mudah difahami.
  2. Ia adalah sistematik dan mudah diukur.
  3. Mengambil kira trend dan mengawal risiko.

Analisis risiko

  1. Terdapat beberapa kelewatan dan tidak dapat menangkap perubahan dalam masa yang tepat.
  2. Ia juga boleh menyebabkan kerosakan dalam tren gegaran.
  3. Tetapan parameter perlu dioptimumkan, jika tidak ia tidak akan berjaya.

Langkah-langkah untuk menangani risiko termasuklah: memendekkan kitaran purata dengan sewajarnya, mengoptimumkan faktor stop loss, dan menambah penilaian penyokong penunjuk keputusan lain.

Arah pengoptimuman

  1. Kombinasi pelbagai penunjuk rata-rata untuk mencari parameter terbaik.
  2. Menambah penilaian kepada penunjuk teknikal lain seperti MACD, RSI dan sebagainya.
  3. Parameter pengoptimuman automatik menggunakan algoritma pembelajaran mesin.
  4. Berdasarkan dinamik gelombang sebenar, penyesuaian Stop Loss.
  5. Mengelakkan transaksi yang terlalu sesak dengan penunjuk emosi.

ringkaskan

Strategi ini secara keseluruhan merupakan strategi trend-tracking yang stabil, parameter yang mudah ditetapkan, mudah dilaksanakan. Dengan berhenti berhenti dinamik purata gelombang sebenar, risiko unilateral dapat dikurangkan. Tetapi perlu berhati-hati dengan pengoptimuman parameter dan gabungan indikator, untuk mengelakkan pengoptimuman berlebihan dan penundaan keputusan. Secara keseluruhan, keseimbangan risiko dan keuntungan adalah baik dan patut dipertimbangkan.

Kod sumber strategi
/*backtest
start: 2024-01-04 00:00:00
end: 2024-02-03 00:00:00
period: 3h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
//© Densz
strategy("3EMA with TP & SL (ATR)", overlay=true )

// INPUTS
startTime           =       input(title="Start Time", type = input.time, defval = timestamp("01 Jan 2017 00:00 +0000"))
endTime             =       input(title="End Time", type = input.time, defval = timestamp("01 Jan 2022 00:00 +0000"))

slowEMALength       =       input(title="Slow EMA Length", type = input.integer, defval = 55)
middleEMALength     =       input(title="Middle EMA Length", type = input.integer, defval = 21)
fastEMALength       =       input(title="Fast EMA Length", type = input.integer, defval = 9)

trendMALength       =       input(title="Trend indicator MA Length", type = input.integer, defval = 200)

atrLength           =       input(title="ATR Length", type = input.integer, defval = 14)
tpATRMult           =       input(title="Take profit ATR multiplier", type = input.integer, defval = 3)
slATRMult           =       input(title="Stop loss ATR multiplier", type = input.integer, defval = 2)

rsiLength           =       input(title="RSI Length", type = input.integer, defval = 14)

// Indicators
slowEMA             =       ema(close, slowEMALength)
middEMA             =       ema(close, middleEMALength)
fastEMA             =       ema(close, fastEMALength)
atr                 =       atr(atrLength)

rsiValue            =       rsi(close, rsiLength)
isRsiOB             =       rsiValue >= 80
isRsiOS             =       rsiValue <= 20

sma200              =       sma(close, trendMALength)

inDateRange         =       true

// Plotting
plot(slowEMA, title="Slow EMA", color=color.red, linewidth=2, transp=50)
plot(middEMA, title="Middle EMA", color=color.orange, linewidth=2, transp=50)
plot(fastEMA, title="Fast EMA", color=color.green, linewidth=2, transp=50)

plot(sma200, title="SMA Trend indicator", color=color.purple, linewidth=3, transp=10)
plotshape(isRsiOB, title="Overbought", location=location.abovebar, color=color.red, transp=0, style=shape.triangledown, text="OB")
plotshape(isRsiOS, title="Oversold", location=location.belowbar, color=color.green, transp=0, style=shape.triangledown, text="OS")

float takeprofit    =       na
float stoploss      =       na

var line tpline     =       na
var line slline     =       na

if strategy.position_size != 0
    takeprofit := takeprofit[1]
    stoploss := stoploss[1]
    line.set_x2(tpline, bar_index)
    line.set_x2(slline, bar_index)
    line.set_extend(tpline, extend.none)
    line.set_extend(slline, extend.none)
    
// STRATEGY
goLong  = crossover(middEMA, slowEMA) and inDateRange
closeLong = crossunder(fastEMA, middEMA) and inDateRange


if goLong
    takeprofit := close + atr * tpATRMult
    stoploss := close - atr * slATRMult
    // tpline := line.new(bar_index, takeprofit, bar_index, takeprofit, color=color.green, width=2, extend=extend.right, style=line.style_dotted)
    // slline := line.new(bar_index, stoploss, bar_index, stoploss, color=color.red, width=2, extend=extend.right, style=line.style_dotted)
    // label.new(bar_index, takeprofit, "TP", style=label.style_labeldown)
    // label.new(bar_index, stoploss, "SL", style=label.style_labelup)
    strategy.entry("Long", strategy.long, when = goLong)
    strategy.exit("TP/SL", "Long", stop=stoploss, limit=takeprofit)
if closeLong
    takeprofit := na
    stoploss := na
    strategy.close(id = "Long", when = closeLong)

if (not inDateRange)
    strategy.close_all()