Strategi pasaran lembu penjejakan kuantitatif


Tarikh penciptaan: 2024-01-04 15:25:42 Akhirnya diubah suai: 2024-01-04 15:25:42
Salin: 0 Bilangan klik: 572
1
fokus pada
1621
Pengikut

Strategi pasaran lembu penjejakan kuantitatif

Gambaran keseluruhan

Strategi bullish kuantitatif adalah strategi trend-tracking berdasarkan EMA rata-rata dan ATR berhenti. Ia menggunakan EMA rata-rata untuk menentukan arah trend besar, menggunakan ATR dinamik untuk mengunci trend keuntungan dan memaksimumkan keuntungan.

Prinsip Strategi

Strategi ini terdiri daripada beberapa bahagian:

  1. EMA menilai trend utama secara purata

Garis 13, 50, dan 100 hari digunakan untuk membentuk pandangan pelbagai ruang untuk menentukan arah trend utama.

  1. Kerosakan ATR dinamik

Menggunakan penunjuk ATR untuk mengira julat perubahan harga dalam tempoh ini, untuk menetapkan titik hentian, untuk mencapai hentian hentian.

  1. Isyarat lancar

SMA melonggarkan harga penutupan K untuk satu kitaran tertentu, mengelakkan isyarat salah.

  1. Isyarat udara

Apabila harga naik melalui EMA, buatlah lebih banyak, dan apabila turun melalui EMA, buatlah lebih sedikit. Sediakan ATR untuk mengesan pergerakan dan menghentikan kerugian.

Analisis kelebihan

Strategi ini mempunyai kelebihan berikut:

  1. Kawalan penarikan balik yang sangat baik, penarikan balik maksimum boleh dikawal dalam 160%.
  2. Tracking stop loss lebih pintar daripada stop loss tetap, dan dapat mengunci lebih banyak trend untuk keuntungan.
  3. Menggunakan EMA untuk menentukan arah trend utama dan mengelakkan operasi pembalikan.
  4. Garis K licin, boleh menapis isyarat palsu, meningkatkan kadar kemenangan.

Analisis risiko

Strategi ini juga mempunyai risiko:

  1. Tetapan parameter tetap mungkin tidak sesuai untuk pelbagai jenis dan memerlukan pengoptimuman.
  2. Dalam keadaan gegaran, mungkin berlaku lompatan udara.
  3. Perlu sokongan kestabilan pelayan untuk mengelakkan kehilangan isyarat.

Risiko ini boleh dikurangkan melalui pengoptimuman parameter, ujian kesesuaian dan lain-lain.

Arah pengoptimuman

Strategi ini boleh dioptimumkan dengan cara berikut:

  1. Parameter pengoptimuman automatik menggunakan algoritma pembelajaran mesin.
  2. Menambah mekanisme penangguhan kerugian yang menyesuaikan diri dengan keadaan pasaran.
  3. Menambah syarat penyaringan gabungan untuk meningkatkan kestabilan strategi.
  4. Pertimbangkan untuk melakukan ujian antara varietas untuk meningkatkan kebolehpasaran strategi.

ringkaskan

Strategi ini secara keseluruhan adalah strategi kuantitatif yang berdasarkan reka bentuk pemikiran trend track. Ia menggunakan EMA untuk menentukan arah trend, sambil menggunakan ATR untuk menghentikan kerugian pintar. Ia boleh mengawal pengunduran dengan berkesan sambil mendapatkan keuntungan trend. Dengan pengulangan pengoptimuman berterusan, diharapkan untuk mendapatkan kesan strategi yang lebih baik.

Kod sumber strategi
/*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")