Tren Darvas Box Strategi Dagangan Kuantitatif

Penulis:ChaoZhang, Tarikh: 2023-12-27 14:45:41
Tag:

img

Ringkasan

Strategi Trending Darvas Box adalah strategi perdagangan jangka pendek yang menggunakan saluran kotak Darvas untuk menangkap trend pasaran. Mekanisme teras bergantung pada penunjuk Darvas Box untuk menentukan momentum pasaran dan mencari peluang perdagangan. Ia pergi lama apabila harga pecah di atas kotak, dan pergi pendek apabila harga pecah di bawah kotak. Di samping itu, strategi ini juga menggunakan penunjuk tambahan lain untuk meningkatkan kestabilan.

Logika Strategi

  • Gunakan parameter panjang untuk menetapkan saiz kotak Darvas, yang adalah 5 bar secara lalai dalam strategi ini.
  • Menentukan arah trend berdasarkan pecah tinggi / rendah, dan mengambil kedudukan panjang / pendek yang sepadan.
  • Apabila harga pecah di atas kotak atas, garis TopBox hijau digambarkan.
  • Apabila harga pecah di bawah bahagian bawah kotak, garis BottomBox merah digambarkan. Ini adalah isyarat pendek.
  • Gunakan sistem purata bergerak sebagai penunjuk tambahan. Pergi panjang apabila harga di atas MAs, dan pergi pendek apabila di bawah MAs.
  • Gunakan RVI untuk mengenal pasti zon overbought / oversold. RVI di atas garis isyarat menunjukkan overbought; RVI di bawah menunjukkan oversold.

Entri diambil apabila semua penunjuk di atas memberi persetujuan. Stop loss ditetapkan di jalur bertentangan dengan kotak Darvas. Keluar dikendalikan dengan arah RVI.

Analisis Kelebihan

  • Saluran kotak Darvas berkesan menangkap trend pasaran.
  • Isyarat keluar kotak yang kerap.
  • Kotak yang munasabah menghentikan tetapan kerugian.
  • Penunjuk tambahan meningkatkan ketepatan.

Analisis Risiko

  • Julat stop loss kotak yang luas. Risiko yang lebih besar setiap perdagangan.
  • Dagangan panjang mungkin dihentikan semasa penurunan kecil.
  • Arah kotak tidak selalu betul.
  • Penyesuaian halus diperlukan untuk penunjuk tambahan untuk menyelaraskan dengan kotak.

Boleh mengetatkan stop loss untuk mengurangkan risiko. Parameter tambahan juga memerlukan pengoptimuman untuk menyaring isyarat dengan berkesan.

Arahan pengoptimuman

  • Uji panjang kotak untuk mencari saiz optimum.
  • Mengoptimumkan parameter tambahan untuk paling sesuai dengan kotak.
  • Cuba penunjuk tambahan lain untuk pengesahan isyarat lanjut, contohnya KDJ, MACD.
  • Uji tetapan stop loss dan mengambil keuntungan untuk kestabilan yang lebih tinggi.

Kesimpulan

Ringkasnya, strategi Trending Darvas Box adalah strategi perdagangan yang agresif yang mensasarkan trend jangka pendek. Ia menangkap perubahan trend dengan cepat dengan saluran kotak Darvas, sementara penunjuk tambahan membantu meningkatkan ketepatan. Profil risiko / ganjaran adalah positif untuk strategi ini, bernilai mengamalkan dan pengoptimuman berterusan.


/*backtest
start: 2023-11-26 00:00:00
end: 2023-12-26 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © xxy_theone
// https://www.youtube.com/watch?v=YYxlnFOX9sQ
// This strategy script has been made to backtest the strategy explained in the video above


//@version=5
strategy(shorttitle = "Darvas Box Test", title="TradeIQ Darvas Box Test", overlay=true, pyramiding=0, default_qty_type=strategy.percent_of_equity, default_qty_value=100, initial_capital=100, currency=currency.USD)

// === INPUT BACKTEST RANGE ===
var GRP1 = "Backtest Range"
fromDate = input(timestamp("7 Mar 2022 00:00 +0000"), "From", group=GRP1)
toDate = input(timestamp("19 Mar 2022 23:59 +0000"), "To", group=GRP1)
window() =>  true


var GRP3 = "Darvas Box"
boxp=input(5, "Box Length", group=GRP3)

LL = ta.lowest(low,boxp)
k1=ta.highest(high,boxp)
k2=ta.highest(high,boxp-1)
k3=ta.highest(high,boxp-2)

NH =  ta.valuewhen(high>k1[1],high,0)
box1 =k3<k2
TopBox = ta.valuewhen(ta.barssince(high>k1[1])==boxp-2 and box1, NH, 0)
BottomBox = ta.valuewhen(ta.barssince(high>k1[1])==boxp-2 and box1, LL, 0)


plot(TopBox, linewidth=3, color=color.green, title="TBbox") 
plot(BottomBox, linewidth=3, color=color.red, title="BBbox")


var GRP4 = "MavilimW"

fmal=input(3,"First Moving Average length", group=GRP4)
smal=input(5,"Second Moving Average length", group=GRP4)
tmal=fmal+smal
Fmal=smal+tmal
Ftmal=tmal+Fmal
Smal=Fmal+Ftmal

M1= ta.wma(close, fmal)
M2= ta.wma(M1, smal)
M3= ta.wma(M2, tmal)
M4= ta.wma(M3, Fmal)
M5= ta.wma(M4, Ftmal)
MAVW= ta.wma(M5, Smal)
col1= MAVW>MAVW[1]
col3= MAVW<MAVW[1]
colorM = col1 ? color.blue : col3 ? color.red : color.yellow

plot(MAVW, color=colorM, linewidth=2, title="MAVW")


var GRP5 = "Relative Vigor Index"
len = input.int(10, title="Length", minval=1, group=GRP5)
rvi = math.sum(ta.swma(close-open), len)/math.sum(ta.swma(high-low),len)
sig = ta.swma(rvi)
offset = input.int(0, "Offset", minval = -500, maxval = 500, group=GRP5)
//plot(rvi, color=#008000, title="RVGI", offset = offset)
//plot(sig, color=#FF0000, title="Signal", offset = offset)


var longStopSet = false

long = ta.crossover(close,TopBox) and close > MAVW ? true : false
longClose = strategy.opentrades.profit(strategy.opentrades-1)>0 and ta.crossunder(rvi,sig) ? true : false
strategy.entry("Long Position", strategy.long, when = long and window() and strategy.position_size==0 and strategy.closedtrades<100)
if(longStopSet==false and strategy.position_size > 0)
    strategy.exit("exit", "Long Position", stop=BottomBox)
    longStopSet := true
if(strategy.position_size==0)
    longStopSet := false
strategy.close("Long Position", when = longClose)

var shortStopSet = false

short = ta.crossunder(close,BottomBox) and close < MAVW ? true : false
shortClose = strategy.opentrades.profit(strategy.opentrades-1)>0 and ta.crossover(rvi,sig) ? true : false
strategy.entry("Short Position", strategy.short, when = short and window() and strategy.position_size==0 and strategy.closedtrades<100)
if(shortStopSet==false and strategy.position_size < 0)
    strategy.exit("exit", "Short Position", stop=TopBox)
    shortStopSet := true
if(strategy.position_size==0)
    shortStopSet := false
strategy.close("Short Position", when = shortClose)


Lebih lanjut