Strategi Holy Grail

Penulis:ChaoZhang, Tarikh: 2023-12-01 15:27:39
Tag:

img

Strategi Holy Grail

Strategi Holy Grail adalah strategi perdagangan kuantitatif yang menggabungkan sistem purata bergerak berganda dengan penunjuk ADX. Ia bertujuan untuk mengenal pasti arah dan kekuatan trend dan perdagangan pada pembalikan trend.

Prinsip Strategi

Strategi ini menggunakan kedua-dua purata bergerak eksponen 20 hari (EMA) dan penunjuk ADX untuk mengenal pasti peluang kemasukan.

  1. Apabila nilai ADX di bawah 30 (menunjukkan trend yang lebih lemah), dan harga memecahkan EMA 20 hari dari bawah, pergi panjang;

  2. Apabila nilai ADX melebihi 30 (menunjukkan trend yang lebih kuat), dan harga memecahkan EMA 20 hari dari atas, pergi pendek.

Ia dapat dilihat bahawa strategi ini bergantung pada ADX untuk menilai kekuatan dan arah trend, dan kemudian menggabungkan sokongan dan rintangan purata bergerak untuk mencari peluang pembalikan.

Analisis Kelebihan

Kelebihan terbesar strategi Holy Grail ialah ia mengambil kira kedua-dua arah dan kekuatan trend, yang dapat mengelakkan pecah palsu dengan berkesan dan mengurangkan kebarangkalian stop loss. Secara khusus, strategi ini mempunyai kelebihan berikut:

  1. Menggunakan sistem purata bergerak berganda dapat mengenal pasti trend dengan berkesan;
  2. Dengan bantuan ADX untuk menilai kekuatan trend, penembusan yang tidak sah dapat dielakkan;
  3. Menggabungkan konsep pembalikan dan perdagangan trend boleh menangkap trend dan membalik pada titik perubahan;
  4. Peraturan operasi adalah jelas dan mudah, mudah dilaksanakan.

Analisis Risiko

Strategi Holy Grail juga mempunyai beberapa risiko, terutamanya dalam bidang berikut:

  1. ADX sebagai penunjuk penilaian tambahan juga akan mengeluarkan isyarat yang salah;
  2. Crossover purata bergerak berganda tidak dapat sepenuhnya mengelakkan kerugian yang disebabkan oleh perhimpunan kecil;
  3. Tetapan parameter yang tidak betul (seperti nilai sasaran ADX, tempoh purata bergerak, dan lain-lain) boleh menyebabkan isyarat menjadi terlalu kerap atau konservatif.

Untuk mengurangkan risiko di atas, parameter boleh diselaraskan untuk mencapai kesan yang terbaik. Stop loss juga boleh ditetapkan untuk mengawal kerugian tunggal. Di samping itu, juga perlu menguji strategi pada pelbagai jenis dan kitaran.

Arahan pengoptimuman

Masih ada banyak arah pengoptimuman untuk strategi Holy Grail:

  1. Cuba pelbagai jenis purata bergerak, seperti purata bergerak yang ditimbang, dll.
  2. Nilai sasaran ADX boleh dioptimumkan sebagai parameter;
  3. Parameter kitaran yang berbeza boleh diuji, seperti EMA 10 hari, 30 hari;
  4. Penunjuk tambahan lain boleh ditambah, seperti RSI, Bollinger Bands, dan lain-lain untuk mengesahkan isyarat perdagangan.

Menyesuaikan parameter atau menambah penunjuk baru boleh meningkatkan keuntungan atau kadar kemenangan strategi.

Ringkasan

Ringkasnya, strategi Holy Grail menggabungkan kelebihan purata bergerak berganda dan penunjuk ADX, dan menggunakan peraturan perdagangan yang jelas untuk menangkap pembalikan trend. Ia mempunyai potensi untuk melakukan dengan baik. Walau bagaimanapun, peniaga masih perlu mengoptimumkan kombinasi parameter dan peraturan stop loss untuk menyesuaikan diri dengan persekitaran pasaran yang berbeza.


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

//@version=3
strategy("LAT Holy Grail v3", overlay=true)

/////////////TEST TIME ////////////////////////
testStartYear = input(2018, "Backtest Start Year")
testStartMonth = input(4, "Backtest Start Month")
testStartDay = input(15, "Backtest Start Day")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,0,0)

testStopYear = input(2018, "Backtest Stop Year")
testStopMonth = input(5, "Backtest Stop Month")
testStopDay = input(30, "Backtest Stop Day")
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay,0,0)

// A switch to control background coloring of the test period
testPeriodBackground = input(title="Color Background?", type=bool, defval=true)
testPeriodBackgroundColor = testPeriodBackground and (time >= testPeriodStart) and (time <= testPeriodStop) ? #00FF00 : na
bgcolor(testPeriodBackgroundColor, transp=97)

testPeriod() =>
    time >= testPeriodStart and time <= testPeriodStop ? true : false
//////////////////////////////////////////////////////////////////////

myema= ema(close, 20)
plot(myema, color=green, title="eMA", linewidth=3)



//longCondition = (crossover(close, myema)) //and adx3 < target
//if (longCondition)
    //strategy.entry("My Long Entry Id", strategy.long)

//shortCondition = (crossunder(close, myema)) //and adx3 > target
//if (shortCondition)
    //strategy.entry("My Short Entry Id", strategy.short)
    
    //////////////////////////////////////////////////////////
    ///////////////////////////////////////   DMI  ///////////////////////////////////////////////
len3 = input(14, minval=1, title="DI Length")                           /////////////////////
lensig3 = input(14, title="ADX Smoothing", minval=1, maxval=50)         ////////////////////
up3 = change(high)                                                      ///////////////////
down3 = -change(low)                                                    //////////////////
plusDM3 = na(up3) ? na : (up3 > down3 and up3 > 0 ? up3 : 0)            /////////////////
minusDM3 = na(down3) ? na : (down3 > up3 and down3 > 0 ? down3 : 0)     ////////////////
trur3 = rma(tr, len3)                                                   ///////////////
plus3 = fixnan(100 * rma(plusDM3, len3) / trur3)                        //////////////
minus3 = fixnan(100 * rma(minusDM3, len3) / trur3)                      /////////////
sum3 = plus3 + minus3                                                   ////////////
adx3 = 100 * rma(abs(plus3 - minus3) / (sum3 == 0 ? 1 : sum3), lensig3) ///////////
//plot(plus3, color=green, style=circles, linewidth=2, title="+DI")     //////////
//plot(minus3, color=red, style=circles, linewidth=2, title="-DI")      /////////
plot(adx3, color=aqua, style=line, linewidth=3, title="ADX")            ////////
target = input(30, title=" ADX Target Line")                            ///////
plot(target, color=yellow, title="ADX Target Line")                     //////
/////////////////////////////////////////////////////////////////////////////////////////////////
                                                                                        
plot(hl2)


///////////////////////////////////////////////  eMA SIGNAL LINE   ///////////////////////////////////////

//////////////////////////////////////////////////////////////////////////////////////////////////////////

//////////////////////////////////////// HOLY GRAIL STRATEGY ///////////////////////////////////////////////////////////////////

if (adx3 <= target) and crossover(close, myema)
    strategy.entry("HolyGrail", strategy.long, comment="Long")
 
if (adx3 >= target) and crossunder(close, myema)
    strategy.entry("HolyGrail", strategy.short, comment="Short")
    


Lebih lanjut