この戦略は,標準ドンキアンチャネル指標に基づいて開発されています. 市場メーカーの偽造によって追いやられることを避けるために,取引信号を発行する前に,既定で確認されるために2つの連続した高値 (または低値) を待つ.
この戦略では,新しい高値や低値を見るとすぐに取引信号を発行できるように,二重確認メカニズムを無効にするオプションも用意されている.
ショートポジションを好まない人は,ショートポジションを除外することもできます.
戦略はドンキアン・チャネル指標の上下帯に基づいている.上帯は過去nバーにおける最高高,下帯は過去nバーにおける最低低である.デフォルトのlookback期 nは20である.
中央帯は上部帯と下部帯の平均であり,トレンド方向を測定するために使用できます.
価格が上位帯を超えると,既存のロングポジションがない場合,戦略はロングになります.価格が下位帯を超えると,既存のショートポジションがない場合,戦略はショートになります.
偽のブレイクアウトをフィルタリングするには,デフォルトで"ダブル確認を待機する"オプションが有効になっています.これは,取引信号が発行される前に,2つの連続した高値 (または低値) が確認されなければならないことを意味します.
この戦略の利点は以下の通りです.
ドンチアン運河の指示は シンプルで分かりやすいです
双重確認メカニズムは 誤ったエクスプロープを 効果的にフィルタリングし 罠にはまらないようにします
チャンネル回顧期間は,異なる市場環境に適応するように調整できます.
ショートセールオプションは 異なる投資家のニーズに対応します
このコードは 清潔で理解しやすいので 開発を進めます
この戦略にはいくつかのリスクもあります:
双重確認によって 取引機会が 逃れる可能性があります
不適切なチャネル期間設定は,過度に頻繁または稀な取引につながる可能性があります.
長期保持期間がリスクを効果的に制御できない場合もあります
短売りによるさらなるリスクには注意する必要がある.
バックテストのオーバーフィッティングには注意が必要です
対応する解法:
二重確認を無効にするか 確認間隔を短縮する
パラメータを最適化し,適切なチャネル期間を選択します.
ストップ損失/利益を,取引損失ごとに合理的に制限するように設定します.
ショートセールを無効にして ショートセールだけにする
異なる市場環境における戦略をしっかりと評価する.
改善の機会には,以下が含まれます.
動的に波動性に基づいてポジションサイズを調整する.
破裂強度の指標に基づいて 偽の突破をフィルターします
トレイルストップメカニズムを組み込み 傾向を追跡する
他の指標を組み合わせて 傾向の方向性を決定し 重要な転換点を見逃さないようにします
マシン学習でパラメータを自動最適化
これらの改善は,戦略の安定性と収益性をさらに向上させることができます.
これはドンチアンチャネルの二重確認メカニズムに基づくシンプルで効果的なトレンドフォロー戦略である.パラメータチューニングと機能拡張により,戦略は幅広い市場環境に適応し,大きな実用性がある.
/*backtest start: 2022-12-15 00:00:00 end: 2023-12-21 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 strategy(title="Donchian Channels", shorttitle="DC", overlay=true, initial_capital=10000, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, calc_on_every_tick=true) length = input(20, minval=1) lower = lowest(length) upper = highest(length) basis = avg(upper, lower) bool inShortPos = false bool inLongPos = false bool wait4confirmation = input(true, title="Wait for double confirmation?") bool doShort = input(true, title="Include short positions") plot(basis, "Basis", color=#FF6D00) u = plot(upper, "Upper", color=#2962FF) l = plot(lower, "Lower", color=#2962FF) fill(u, l, color=color.rgb(33, 150, 243, 95), title="Background") //if(inShortPos == false and inLongPos == false) if(not inLongPos and upper > upper[1]) if(wait4confirmation) if(not inLongPos and upper > upper[1] and upper[1] > upper[2]) strategy.close("Short", true) strategy.entry("Buy", true) else strategy.close("Short", true) strategy.entry("Buy", true) else if(not inShortPos and lower < lower[1]) if(wait4confirmation) if(not inShortPos and lower < lower[1] and lower[1] < lower[2]) strategy.close("Buy", true) if(doShort) strategy.entry("Short", true) else strategy.close("Buy", true) if(doShort) strategy.entry("Short", true)