Trend kuantum Mengikut Strategi

Penulis:ChaoZhang, Tarikh: 2024-01-04 15:25:42
Tag:

img

Ringkasan

Strategi Mengikuti Trend Quant adalah strategi penjejakan trend berdasarkan garis EMA dan stop loss ATR. Ia menggunakan garis EMA untuk menilai arah trend keseluruhan pasaran, dan secara dinamik mengesan stop loss dengan ATR untuk mengunci keuntungan trend, memaksimumkan pulangan.

Prinsip-prinsip

Strategi ini terdiri daripada bahagian utama berikut:

  1. Garis EMA untuk menentukan trend utama

    Gunakan garis 13 hari, 50 hari dan 100 hari untuk membentuk bias bullish/bearish dan menilai arah trend utama.

  2. Hentikan kehilangan dinamik ATR

    Menggunakan penunjuk ATR untuk mengira julat pergerakan harga tempoh semasa dan menetapkan harga stop loss untuk mengunci keuntungan.

  3. Penghapusan isyarat

    Harga penutupan yang lancar dalam tempoh tertentu dengan SMA untuk mengelakkan isyarat palsu.

  4. Isyarat menaik / menurun

    Pergi panjang apabila harga melintasi garis EMA, pergi pendek apabila melintasi di bawah.

Analisis Kelebihan

Strategi ini mempunyai kelebihan berikut:

  1. Kawalan pengeluaran yang sangat baik, pengeluaran maksimum dalam 160%.
  2. Stop loss dinamik lebih pintar daripada yang tetap, boleh mengunci lebih banyak keuntungan trend.
  3. Menggunakan EMA untuk menentukan trend utama mengelakkan perdagangan pembalikan.
  4. Bar halus menapis isyarat palsu dan meningkatkan kadar kemenangan.

Analisis Risiko

Terdapat juga beberapa risiko:

  1. Parameter statik mungkin tidak sesuai dengan produk yang berbeza, pengoptimuman diperlukan.
  2. Stop loss mungkin ada jurang di pasaran yang berbeza.
  3. Memerlukan kestabilan pelayan untuk mengelakkan isyarat yang hilang.

Risiko ini boleh dikurangkan melalui pengoptimuman parameter, ujian kesesuaian dll.

Arahan pengoptimuman

Strategi ini boleh dioptimumkan dalam aspek berikut:

  1. Pengoptimuman parameter automatik dengan algoritma pembelajaran mesin.
  2. Tambah stop loss adaptif berdasarkan keadaan pasaran.
  3. Meningkatkan penapis kompaun untuk meningkatkan kestabilan.
  4. Pertimbangkan ujian silang produk untuk meningkatkan kesesuaian.

Kesimpulan

Ringkasnya, ini adalah strategi kuant yang direka berdasarkan konsep trend berikut. Ia menentukan arah trend dengan EMA dan menggunakan stop loss ATR dinamik. Ia dapat mengawal penurunan secara berkesan sambil menangkap keuntungan trend. Pengoptimuman dan pengulangan berterusan dapat menghasilkan hasil yang lebih baik.


/*backtest
start: 2023-12-27 00:00:00
end: 2024-01-03 00:00:00
period: 10m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("Combined Strategy", overlay=true)

// Input variables for EMA Crossover
ema13_length = input(13, title="EMA 13 Length")
ema50_length = input(50, title="EMA 50 Length")
ema100_length = input(100, title="EMA 100 Length")
ema200_length = input(200, title="EMA 200 Length")

// Calculate EMAs for EMA Crossover
ema13 = ema(close, ema13_length)
ema50 = ema(close, ema50_length)
ema100 = ema(close, ema100_length)
ema200 = ema(close, ema200_length)

// Plot EMAs for EMA Crossover
plot(ema13, color=color.blue, title="EMA 13")
plot(ema50, color=color.orange, title="EMA 50")
plot(ema100, color=color.green, title="EMA 100")
plot(ema200, color=color.red, title="EMA 200")

// Input variables for LinReg Candles
signal_length = input(title="Signal Smoothing", type=input.integer, minval=1, maxval=200, defval=11)
sma_signal = input(title="Simple MA (Signal Line)", type=input.bool, defval=true)

lin_reg = input(title="Lin Reg", type=input.bool, defval=true)
linreg_length = input(title="Linear Regression Length", type=input.integer, minval=1, maxval=200, defval=11)

// Calculate LinReg Candles
bopen = lin_reg ? linreg(open, linreg_length, 0) : open
bhigh = lin_reg ? linreg(high, linreg_length, 0) : high
blow = lin_reg ? linreg(low, linreg_length, 0) : low
bclose = lin_reg ? linreg(close, linreg_length, 0) : close

r = bopen < bclose

signal = sma_signal ? sma(bclose, signal_length) : ema(bclose, signal_length)

plotcandle(r ? bopen : na, r ? bhigh : na, r ? blow: na, r ? bclose : na, title="LinReg Candles", color=color.green, wickcolor=color.green, bordercolor=color.green, editable=true)
plotcandle(r ? na : bopen, r ? na : bhigh, r ? na : blow, r ? na : bclose, title="LinReg Candles", color=color.red, wickcolor=color.red, bordercolor=color.red, editable=true)

plot(signal, color=color.white)

// Input variables for UT Bot Alerts
a = input(1, title="Key Value. 'This changes the sensitivity'")
c = input(10, title="ATR Period")
h = input(false, title="Signals from Heikin Ashi Candles")

// Calculate UT Bot Alerts
xATR = atr(c)
nLoss = a * xATR

src = h ? security(heikinashi(syminfo.tickerid), timeframe.period, close, lookahead=false) : close

xATRTrailingStop = 0.0
xATRTrailingStop := iff(src > nz(xATRTrailingStop[1], 0) and src[1] > nz(xATRTrailingStop[1], 0), max(nz(xATRTrailingStop[1]), src - nLoss),
   iff(src < nz(xATRTrailingStop[1], 0) and src[1] < nz(xATRTrailingStop[1], 0), min(nz(xATRTrailingStop[1]), src + nLoss), 
   iff(src > nz(xATRTrailingStop[1], 0), src - nLoss, src + nLoss)))

pos = 0   
pos := iff(src[1] < nz(xATRTrailingStop[1], 0) and src > nz(xATRTrailingStop[1], 0), 1,
   iff(src[1] > nz(xATRTrailingStop[1], 0) and src < nz(xATRTrailingStop[1], 0), -1, nz(pos[1], 0))) 

xcolor = pos == -1 ? color.red: pos == 1 ? color.green : color.blue 

ema = ema(src,1)
above = crossover(ema, xATRTrailingStop)
below = crossover(xATRTrailingStop, ema)

buy = src > xATRTrailingStop and above 
sell = src < xATRTrailingStop and below

barbuy = src > xATRTrailingStop 
barsell = src < xATRTrailingStop 

strategy.entry("Buy", strategy.long, when=buy)
strategy.close("Buy", when=sell)
strategy.entry("Sell", strategy.short, when=sell)
strategy.close("Sell", when=buy)

plotshape(buy, title="Buy", text='Buy', style=shape.labelup, location=location.belowbar, color=color.green, textcolor=color.white, transp=0, size=size.tiny)
plotshape(sell, title="Sell", text='Sell', style=shape.labeldown, location=location.abovebar, color=color.red, textcolor=color.white, transp=0, size=size.tiny)

barcolor(barbuy ? color.green : na)
barcolor(barsell ? color.red : na)

alertcondition(buy, "UT Long", "UT Long")
alertcondition(sell, "UT Short", "UT Short")


Lebih lanjut