ドンキアン・チャネル・ブレイクアウト戦略は,ブレイクアウト・トレード戦略をフォローする価格アクションとトレンドである.ドンキアン・チャネルの上下帯を使用して潜在的なブレイクアウトポイントを特定し,価格がチャネルをブレイクしたとき,ロングまたはショートポジションをとる.
この戦略の基本的な論理は
特定の期間の (例えば60バー) 最高高と最低低を計算するために,Ta.highestとTa.lowest関数を使用して,ドンチアン運河の上下帯を構成します.
価格が上位帯を突破すると,上向きトレンドが始まっていることを示唆するので,上位帯のブレイク後に次のバーでロングに行く.価格が下位帯を下位に突破すると,下向きトレンドが始まっていることを示唆するので,下位帯のブレイク後に次のバーでショートに行く.
価格が上位帯を下回ったり 下位帯を下回ったりすると,トレンドの逆転を示し,既存のロングまたはショートポジションを平らにする.
リスクをコントロールするために,ロング/ショートポジションを開始した後,エントリー価格マイナス/プラス1つの最低値でストップロスを設定します.
このタイプのチャネルブレイクストラテジーは 価格の動きとトレンドを考慮し 実行しやすく 安定しています
この戦略にはいくつかの利点があります.
論理は明確で シンプルで 簡単に理解できます
ドンチアンチャネルを使用して 傾向の方向性を決定することで 効果的にお騒ぎをフィルタリングし 信頼性の高いブレイクシグナルを識別できます
入場後に合理的なストップ損失設定は,単一の取引損失を制御することができます.
市場の状況に関係なく 戦略は 適切なブレイクアウトが起きると トレンドと共に取引し 潜在的な大きな動きを捉えることができます
パラメータが少ないし オーバーフィッティングが容易で 調節スペースが大きく 柔軟性が高い
この戦略にはいくつかのリスクもあります:
トレンドフォロー戦略として 逆転の動きを捉えることはできません
ストップ・ロスは 短期的な価格変動によって 停止される可能性があります
誤ったチャネル長設定は 誤った突破の可能性を高めます
いくつかの対策:
潜在的逆転を特定するために他の指標を組み込む 盲目的に傾向を追うのを避ける
初期ハードストップ損失に固執するのではなく 利潤をロックするために合理的な遅延ストップを使用します
最適な組み合わせを見つけるために 異なるパラメータ値をテストします
さらに最適化できる余地があります.
ドンチアン・チャネル・ブレークアウト戦略を 2回試してください 1回入口 1回ストップ・ロスト/リターン
バックアウトが一定数を超えた後に取引をするだけで 誤ったブレイクをフィルタリングできます
価格が急激に変動するときに悪い取引を避けるために,ボリュームまたは波動性フィルターを追加します.
より良い結果を得るため,トレンドフォローや平均逆転など,異なる保持戦略を試してください.
リスク管理モジュールを追加して最大日当たりの損失,最大引き上げ等を制限する.
ドンチアンチャネルブレイクアウト戦略は,非常に実用的な短期間のトレンドフォロー戦略である.価格アクションを通じて潜在的なトレンド変化を特定し,チャネルブレイクアウトを利用して取引を行う.論理は単純で実行が容易で,さまざまな市場で適切な結果を達成することができる.パラメータチューニング,ストップ損失メカニズム,逆転識別などのさらなる最適化により,重要なパフォーマンス上昇を期待することができる.それはアルゴ取引のための素晴らしい出発点戦略として機能する.
/*backtest start: 2023-11-03 00:00:00 end: 2023-12-03 00:00:00 period: 4h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 // Step 1. Define strategy settings strategy(title="Price action and breakout Channel Forexrn", overlay=true, pyramiding=0, initial_capital=100000, commission_type=strategy.commission.cash_per_order, commission_value=4, slippage=2) dochLen = input.int(60, title="Price action and breackout Channel Forexrn") // Position sizing inputs usePosSize = input.bool(true, title="Use Position Sizing?") atrLen = input.int(10, title="ATR Length") atrRiskOffset = input.float(4, title="ATR Risk Offset Multiple", step=0.25) maxRisk = input.float(2, title="Max Position Risk %", step=.25, minval=0.25, maxval=15) maxExposure = input.float(10, title="Max Position Exposure %", step=1, minval=1, maxval=100) marginPerc = input.int(10, title="Margin %", minval=1, maxval=100) // Step 2. Calculate strategy values upperband = ta.highest(high, dochLen)[1] lowerband = ta.lowest(low, dochLen)[1] // Calculate position size riskEquity = (maxRisk * 0.01) * strategy.equity riskTrade = (ta.atr(atrLen) * atrRiskOffset) * syminfo.pointvalue maxPos = ((maxExposure * 0.01) * strategy.equity) / ((marginPerc * 0.01) * (close * syminfo.pointvalue)) posSize = usePosSize ? math.min(math.floor(riskEquity / riskTrade), maxPos) : 1 // Step 3. Output strategy data plot(upperband, color=color.green, linewidth=2, title="DoCh Upperband") plot(lowerband, color=color.red, linewidth=2, title="DoCh Lowerband") // Step 4. Determine trading conditions tradeWindow = true tradeAllowed = tradeWindow and bar_index > dochLen // Step 5. Submit entry orders if tradeAllowed if strategy.position_size < 1 strategy.entry("EL", strategy.long, qty=posSize, stop=upperband + syminfo.mintick) if strategy.position_size > -1 strategy.entry("ES", strategy.short, qty=posSize, stop=lowerband - syminfo.mintick) // Step 6. Submit exit orders if not tradeWindow strategy.close_all()