聖杯戦略

作者: リン・ハーンチャオチャン, 日付: 2023-12-01 15:27:39
タグ:

img

聖杯戦略

ホーリーグライル戦略は,二重移動平均システムとADX指標を組み合わせた定量的な取引戦略である.トレンドの方向性と強さを特定し,トレンド逆転時に取引することを目的としている.

戦略原則

この戦略は,20日指数移動平均値 (EMA) とADX指標の両方を使用し,エントリー機会を特定します.特に,以下の2つのケースで取引信号を発行します.

  1. ADX値が30を下回り (傾向が弱くなる) 価格が20日間のEMAを下から突破すると,ロングをします.

  2. ADX値が30を超えると (より強いトレンドを示し) 20日間のEMAを上から突破すると,ショートします.

この戦略は,トレンドの強さと方向性を判断するためにADXに依存し,その後逆転機会を探すために移動平均のサポートと抵抗を組み合わせます.トレンドフォローと平均逆転の概念を統合します.

利点分析

Holy Grail戦略の最大の利点は,トレンドの方向性と強さを考慮し,誤ったブレイクを効果的に回避し,ストップロスの確率を減らすことができるということです.特に,この戦略には以下の利点があります:

  1. 二重移動平均のシステムを使用することで,動向を効果的に特定できます.
  2. ADX の助けにより,トレンドの強さを評価することで,無効なブレイクアウトを回避できます.
  3. 逆転とトレンド取引のコンセプトを組み合わせることで,トレンドを把握し,ターニングポイントで逆転することができます.
  4. 操作規則は 明確でシンプルで 実行が簡単です

リスク分析

聖杯戦略には リスクもあります 主に次の分野です

  1. ADXは補助判断指標として誤った信号を発します.
  2. 移動平均値のクロスオーバーは,小幅の上昇によって生じる損失を完全に回避することはできません.
  3. パラメータの設定が正しくない場合 (ADX目標値,移動平均期など) は,信号が頻繁すぎたり,保守的であることもあります.

上記リスクを軽減するために,パラメータを調整して最適な効果を達成することができる.また,単一の損失を制御するためにストップロスを設定することもできる.さらに,さまざまな品種とサイクルで戦略をテストすることも必要です.

オプティマイゼーションの方向性

聖杯戦略の最適化方向は まだたくさんあります

  1. 移動平均の種類を試す. 例えば,重度の移動平均など.
  2. ADX 目標値はパラメータとして最適化できます.
  3. 異なるサイクルパラメータ,例えば10日間,30日間のEMAを試験することができる.
  4. 他の補助指標も追加できます.例えば,RSI,ボリンジャー帯などで取引信号を確認できます.

パラメータを調整したり,新しい指標を追加したりすることで,戦略の収益性や勝利率が向上する可能性があります.しかし,あらゆる最適化は,その強度を保証するために十分なバックテストを必要とします.

概要

総括すると,ホーリーグライル戦略は,ダブル移動平均値とADX指標の利点を組み合わせ,トレンド逆転を把握するために明確な取引規則を使用しています.それはうまく機能する可能性があります.しかし,トレーダーは依然として異なる市場環境に適応するためにパラメータ組み合わせとストップロスのルールを最適化する必要があります.さらに,どの程度改善しても,ストップロスを完全に回避することは不可能です.これはすべての取引戦略が直面するジレンマです.


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


もっと