ダブル・ドンチアン・チャネル・ブレークアウト戦略

作者: リン・ハーンチャオチャン,日付: 2024-02-04 09:42:14
タグ:

img

概要

ダブル・ドンキアン・チャネル・ブレイクアウト戦略は,ドンキアン・チャネルをベースとした定量的な取引戦略である.この戦略は,低リスク高リターンブレイクアウト取引を達成するために,速いと遅いドンキアン・チャネルの組み合わせを使用する.価格がスローチャネルを突破してストップ損失で退出したとき,ロング/ショートまたは価格が高速チャネルを突破すると利益を得ます.

戦略の論理

この戦略は主に2つのドンチアンチャンネルを利用し,より長い期間を持つより遅いチャンネルと,より短い期間を持つより速いチャンネルを含む.

スロードンキアンチャネルは,市場騒音を効果的にフィルタリングできるより長い期間を持ち,ブレイクアウト信号をより信頼性のあるものとする. ストラテジーは,価格がスローチャネルの上部帯を超えると長続きし,価格が下部帯を下回ると短縮する.

迅速なドンキアンチャネルは,短期的な価格変動に迅速に対応できる短い期間を有します.価格がこのチャネルを通って戻ると,トレンドの逆転をシグナル化し,ストップ損失または利益を得るための出口を提示します.

さらに,波動性条件はエントリー信号のフィルターとして設定されています.この戦略は,価格動きが事前に決定された百分比の限界を超えるとのみエントリーを起動します.これはレンジ限定統合中に頻繁なウィップソウを回避します.

利点分析

  • 防護の2つの線を設定し リスクを効果的に制御します
  • 急速なチャネルと遅いチャネルを組み合わせることで,効率的にトレンドを把握できます
  • 波動性フィルターは非効率な取引を減らす
  • 同時に傾向を追跡し,過剰なフィットメントを防ぐ
  • シンプルで明快な論理,理解し,習得しやすい

リスク分析

  • 激烈な価格変動がストップロスを突破し,大きな損失を引き起こす可能性があります
  • 不適切なパラメータ設定 (例えばチャンネル期間) は戦略の効率を損なう可能性があります.
  • 取引コストも ある程度 利益 を 損なう
  • 大事な出来事の間のギャップリスクは注意が必要です

これらのリスクは,パラメータの最適化,合理的なストップロスの配置,イベント認識などによって軽減できます.

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

  • ドンチアン・チャネル周期の異なる組み合わせをテストする
  • 最適なエントリータイミングのために波動性パラメータを最適化
  • 逆トレンド取引を避けるためにトレンドチェックインジケーターを追加する
  • 基本的要素に基づくストックピック
  • 損失を制限するためにストップ損失メカニズムを調整する

結論

ダブル・ドンキアン・チャネル・ブレイクアウト戦略は,全体として比較的安定した信頼性の高いトレンドフォロー戦略である.トレンドキャプチャとリスクコントロールの両方の強みを組み合わせ,さまざまな株式取引戦略における基本的なモジュールとして適している.パラメータチューニングと論理精製によりパフォーマンスのさらなる改善が期待できる.


/*backtest
start: 2024-01-04 00:00:00
end: 2024-02-03 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © omererkan

//@version=5
strategy(title="Double Donchian Channel Breakout", overlay=true, initial_capital = 1000, commission_value = 0.05, default_qty_value = 100, default_qty_type = strategy.percent_of_equity)


slowLen = input.int(50, title="Slow Donchian")
fastLen = input.int(30, title="Fast Donchian")
volatility = input.int(3, title="Volatility (%)")
longProfitPerc = input.float(2, title="Long TP1 (%)", minval=0.0, step=0.1) * 0.01
shortProfitPerc = input.float(2, title="Short TP1 (%)", minval=0.0, step=0.1) * 0.01
TP1Yuzde =input.int(50, title = "TP1 Position Amount (%)")

ubSlow = ta.highest(close, slowLen)[1]
lbSlow = ta.lowest(close, slowLen)[1]

ubFast = ta.highest(close, fastLen)[1]
lbFast = ta.lowest(close, fastLen)[1]

plot(ubSlow, color=color.green, linewidth=2, title="Slow DoCh - Upperband")
plot(lbSlow, color=color.green, linewidth=2, title="Slow DoCh - Lowerband")
plot(ubFast, color=color.blue, linewidth=2, title="Fast DoCh - Upperband")
plot(lbFast, color=color.blue, linewidth=2, title="Fast DoCh - Lowerband")

fark = (ubSlow - lbSlow) / lbSlow * 100

longExitPrice  = strategy.position_avg_price * (1 + longProfitPerc)
shortExitPrice = strategy.position_avg_price * (1 - shortProfitPerc)

longCondition = ta.crossover(close, ubSlow) and fark > volatility
if (longCondition)
    strategy.entry("Long", strategy.long)

shortCondition = ta.crossunder(close, lbSlow) and fark > volatility
if (shortCondition)
    strategy.entry("Short", strategy.short)

if strategy.position_size > 0 and ta.crossunder(close, lbFast) 
    strategy.close("Long", "Close All")

if strategy.position_size < 0 and ta.crossover(close, ubFast)
    strategy.close("Short", "Close All")

// Take Profit
if strategy.position_size > 0
    strategy.exit("TP1", "Long", qty_percent = TP1Yuzde, limit = longExitPrice)

if strategy.position_size < 0
    strategy.exit("TP1", "Short", qty_percent = TP1Yuzde, limit = shortExitPrice)

もっと