この戦略は,24期ドンチアンチャネルと200期移動平均をメインの取引シグナルとして使用する.価格が下向きに変動するとショートポジション,上向きに変動するとロングポジションが開かれる.
戦略の論理は主に次の点に基づいています
ドンチアンチャネルは,過去24期の最高値と最低値を用いて構築されます.価格がこのチャネルを突破すると,より大きな上昇または減少の可能性を示します.
200期間の移動平均値は,長/短バイアスのフィルターとして機能します.価格がドンキアンチャネルを突破して移動平均の反対側にある場合,逆転が起こり得る可能性があります.
入口信号は:
ショートポジションのストップ・ロスは過去3バーの最高値に設定される.テイク・プロフィートはエントリー価格マイナス3倍のストップ・ロストとエントリー価格の違いに設定される.ロングポジションのストップ・ロストとテイク・プロフィートの論理は逆である.
この戦略の利点は,ドンキアン・チャネルと移動平均フィルターを組み合わせることで,単一の指標に依存する誤った信号を回避し,勝利率を大幅に改善することです.
この戦略には以下の利点があります.
高勝率:ドンキアン・チャネルと移動平均フィルターを組み合わせることで,単一の指標からの誤った信号による不必要な損失を回避できます.
制御可能なリスク:ストップ・ロスのレベルとして最近の最高最高/最低最低値を使用することで,損する取引の下落を効果的に管理できます. 3:1の利益/損失比は魅力的です.
シンプルで実行しやすい:論理は,理解し実行しやすいシンプルで直感的な指標を使用します.
市場と時間枠の間の安定性: 比較的少ないパラメータで,戦略は異なる製品と時間枠にわたって安定しています.
この戦略が直面する主なリスクは以下のとおりです.
極端な市場動向:非常に強い一方的なトレンドは,ストップ損失を誘発し,損失を増幅させる可能性があります.これはストップを広げたり,ポジションサイズを減らすことで緩和することができます.
早期の退出信号リスク:新しい反対信号から退出すると,繰り返しエントリーと退出が起こるため,不安定な市場で過剰取引を引き起こす可能性があります.退出ロジックを最適化することで,これを解決することができます.
パラメータ最適化リスク: ドンチアンチャネル・ルーックバック期または移動平均のパラメータ調節が不十分である場合,遅延または頻繁な信号を引き起こす可能性があります.これは厳格な最適化と組み合わせテストによって最小限に抑えることができます.
戦略は以下の方法で強化できます.
ドンチアンチャネルと移動平均回顧期間を最適化して,パラメータの最適な組み合わせを見つけます.
利潤比率を比較して 利潤率とリスクを比較して 利潤率を比較して 利潤率を比較して 利潤率を比較して 利潤率を比較して 利潤率を比較して 利潤率を比較して 利潤率を比較して 利潤率を比較して 利潤率を比較して 利潤率を比較して 利潤率を比較して 利潤率を比較して 利潤率を比較して 利潤率を比較して 利潤率を比較して 利潤率を比較して 利潤率を比較して 利潤率を比較して 利潤率を比較して 利潤率を比較して 利潤率を比較して 利潤率を比較して 利潤率を比較して 利潤率を比較して 利潤率を比較して 利潤率を比較して 利潤率を比較して 利潤率を比較して 利潤率を比較して 利潤率を比較して 利潤率を比較して 利潤率を比較して 利潤率を比較して 利潤率を比較して
MACD,RSIなどの指標を用いて入力信号に追加フィルターを組み込む.
混乱する市場で不必要な出口を避けるために出口ロジックを最適化します.出口にはトレンドメトリックも考慮することができます.
この戦略の枠組みを用いて新しい組み合わせを策定する.例えば,他のチャンネル,帯域指標などと.
スロー・ムービング・アベア戦略は,信号生成のためのドンチアン・チャネルとムービング・アベアを組み合わせることで,明確な,理解しやすい論理を持っています.このハイブリッドアプローチは安定性と勝利率を大幅に改善します. 3: 1 利益対損失比も良い報酬の可能性を提供します.極端な動きや信号誤差の観点からリスクが存在しますが,多くの最適化機会はパフォーマンスを向上させ,コア戦略を拡大することができます.
/*backtest start: 2023-11-06 00:00:00 end: 2023-12-06 00:00:00 period: 1h basePeriod: 15m 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/ // © Mysteriown //@version=4 strategy("Lagged Donchian Channel + EMA", overlay = true) //tradePeriod = time(timeframe.period,"0000-0000:1234567")?true:false // ------------------------------------------ // // ----------------- Inputs ----------------- // // ------------------------------------------ // period = input(24, title="Channel's periods") Pema = input(200, title="EMA's periods ?") ratio = input(3, title="Ratio TP", type=input.float) loss = input(20, title="Risk Loss ($)") lev = input(5, title="Leverage *...") chan = input(title="Plot channel ?", type=input.bool, defval=false) Bpos = input(title="Plot Bull positions ?", type=input.bool, defval=false) bpos = input(title="Plot Bear positions ?", type=input.bool, defval=false) labels = input(title="Plot labels of bets ?", type=input.bool, defval=true) supp = input(title="Delete last labels ?", type=input.bool, defval=true) // ------------------------------------------ // // ---------- Canal, EMA and arrow ---------- // // ------------------------------------------ // pema = ema(close,Pema) plot(pema, title="EMA", color=color.blue) canalhaut = highest(period)[1] canalbas = lowest(period)[1] bear = close[1] > canalhaut[1] and close < open and high > pema bull = close[1] < canalbas[1] and open < close and low < pema canalhautplot = plot(chan? canalhaut:na, color=color.yellow) canalbasplot = plot(chan? canalbas:na, color=color.yellow) plotshape(bear, title='Bear', style=shape.triangledown, location=location.abovebar, color=color.red, offset=0) plotshape(bull, title='Bull', style=shape.triangleup, location=location.belowbar, color=color.green, offset=0) // ------------------------------------------ // // ------------- Position Short ------------- // // ------------------------------------------ // SlShort = highest(3) BidShort = close[1] TpShort = BidShort-((SlShort-BidShort)*ratio) deltaShort = (SlShort-BidShort)/BidShort betShort = round(loss/(lev*deltaShort)*100)/100 cryptShort = round(betShort*lev/BidShort*1000)/1000 // if bear[1] and labels //and low < low[1] // Lbear = label.new(bar_index, na, text="SHORT\n\nSL: " + tostring(SlShort) + "\n\nBid: " + tostring(BidShort) + "\n\nTP: " + tostring(TpShort) + "\n\nMise: " + tostring(betShort) + "\n\nCryptos: " + tostring(cryptShort), color=color.red, textcolor=color.white, style=label.style_labeldown, yloc=yloc.abovebar) // label.delete(supp ? Lbear[1] : na) var bentry=0.0 var bsl=0.0 var btp=0.0 if bear[1] and low < low[1] bentry:=BidShort bsl:=SlShort btp:=TpShort pbentry = plot(bpos? bentry:na, color=color.orange) plot(bpos? (bentry+btp)/2:na, color=color.gray) pbsl = plot(bpos? bsl:na, color=color.red) pbtp = plot(bpos? btp:na, color=color.green) fill(pbentry,pbsl, color.red, transp=70) fill(pbentry,pbtp, color.green, transp=70) // ------------------------------------------ // // ------------- Position Long -------------- // // ------------------------------------------ // SlLong = lowest(3) BidLong = close[1] TpLong = BidLong + ((BidLong - SlLong) * ratio) deltaBull = (BidLong - SlLong)/BidLong betLong = round(loss/(lev*deltaBull)*100)/100 cryptLong = round(betLong*lev/BidLong*1000)/1000 // if bull[1] and labels //and high > high[1] // Lbull = label.new(bar_index, na, text="LONG\n\nSL: " + tostring(SlLong) + "\n\nBid: " + tostring(BidLong) + "\n\nTP: " + tostring(TpLong) + "\n\nMise: " + tostring(betLong) + "\n\nCryptos: " + tostring(cryptLong), color=color.green, textcolor=color.white, style=label.style_labelup, yloc=yloc.belowbar) // label.delete(supp ? Lbull[1] : na) var Bentry=0.0 var Bsl=0.0 var Btp=0.0 if bull[1] and high > high[1] Bentry:=BidLong Bsl:=SlLong Btp:=TpLong pBentry = plot(Bpos?Bentry:na, color=color.orange) plot(Bpos?(Bentry+Btp)/2:na, color=color.gray) pBsl = plot(Bpos?Bsl:na, color=color.red) pBtp = plot(Bpos?Btp:na, color=color.green) fill(pBentry,pBsl, color.red, transp=70) fill(pBentry,pBtp, color.green, transp=70) // ------------------------------------------ // // --------------- Strategie ---------------- // // ------------------------------------------ // Bear = bear[1] and low < low[1] Bull = bull[1] and high > high[1] if (Bear and strategy.opentrades==0) strategy.order("short", false, 1, limit=BidShort) strategy.exit("exit", "short", limit = TpShort, stop = SlShort) strategy.cancel("short", when = high > SlShort or low < (BidShort+TpShort)/2) strategy.close("short", when=bull) if (Bull and strategy.opentrades==0) strategy.order("long", true, 1, limit=BidLong) strategy.exit("exit", "long", limit = TpLong, stop = SlLong) strategy.cancel("long", when = low < SlLong or high > (BidLong+TpLong)/2) strategy.close("long", when=bear)