ドンチアン・チャネルズ ブレイク量的な取引戦略

作者: リン・ハーンチャオチャン開催日:2023年8月12日11時05分
タグ:

img

概要

この戦略の主なアイデアは,ドンチアンチャネルの価格ブレイクに基づいて取引決定を下すことである.これは定量戦略の次のタイプのトレンドに属している.価格チャネルを自動的に識別することができる.価格がチャネルの上部レールを突破すると,ロングポジションが開かれる.価格がチャネルの下部レールまたはストップ損失点近くに戻ると,ポジションは閉鎖される.この戦略は,中長期の価格トレンドを把握することを目的とし,インデックス先物などの金融デリバティブのアルゴリズム取引に適している.

原則

この戦略は,ドンキアン・チャネル指標に基づいています.ドンキアン・チャネルは,特定の期間中の最高価格と最低価格によって引き出されるチャネルです.その計算方法は:

上部レール = 過去n期間の最高価格 ローラーレール = 過去n期間の最低価格

価格が上線を突破すると,長いトレンドが始まると考えられる.価格が下線を突破すると,ショートトレンドが始まると考えられる.この戦略は上線が突破された場合にのみ考慮される.

具体的な取引論理は:

  1. 最後の n 期間の最高価格を用いて,ドンチアン・チャネルの上部レールをプロットする.
  2. 閉店価格が上部レールを突破すると,長い
  3. ローリングストップによる利益採取は,閉じる価格がローラーレールの近くまたは事前に設定されたストップ・ロストポイントに戻ると

利点

この戦略の利点は以下の通りです.

  1. 戦略のアイデアは明確で,理解し実行しやすい
  2. ドンチアン・チャネルは,トレンドの方向性を判断するための成熟した信頼性の高い指標です
  3. 手動の干渉なしに自動的にチャンネルを識別
  4. カスタマイズ可能なパラメータにより高度に適応可能になります
  5. 損失を制限するストップ・ロスのメカニズムを含んでいます

リスク

リスクもあります:

  1. ドンチアン・チャネルは 偽の脱出が起こり 不必要な損失を 引き起こします
  2. 不適切なストップ・ロスのポジションは損失を増やす可能性があります
  3. 価格がチャネルレールに近いときに逆転リスクに注意してください
  4. パラメータ設定が不十分なら 戦略のパフォーマンスに悪影響を与える

解決策:

  1. 偽のブレイクを避けるために他の指標を組み込むことでフィルターを追加します
  2. スムーズな出口のためにストップ損失位置を最適化
  3. 価格がチャネルレールに近い場合,ポジションサイズを増やしたり,利益範囲を拡大したりすることを検討します.
  4. 最適値を見つけるために異なるパラメータをテスト

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

この戦略は,次の分野においてさらに最適化できます.

  1. 誤ったブレイクを避けるためにMACD,KDなどの他の指標を追加します
  2. ストップ・ロスのメカニズムを最適化する.例えば,ストップ・ロスの移動
  3. 率控えを最適化する.例えば,変動が上昇するときにのみ取引する.
  4. 最適な組み合わせを見つけるためのパラメータ最適化

概要

この戦略の全体的な考え方は明確で,理解し,実行するのが簡単です. 傾向の方向性を自動的に特定するために成熟したドンキアンチャネルを使用します. 構成はまた,さまざまなニーズに応えるのに非常に柔軟です. 適切なストップ損失とパラメータ最適化により,良い結果が得られます. 結論として,この戦略は低い学習曲線であるが,合理的な効率性を持っています. それはスタート量的な取引戦略として適しています.


/*backtest
start: 2022-12-07 00:00:00
end: 2023-12-07 00:00:00
period: 1d
basePeriod: 1h
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/
// © Giovanni_Trombetta

// Strategy to capture price channel breakouts

//@version=4
strategy("ChannelsBreakout", max_bars_back=50, overlay=true)

instrument = input(1, title = "Select 1: Stock/Forex, 2: Future")
money = input(10000, title = "Money for each trade")
backtest_start = input(2000, "Insert first year to backtest")
period = input(50, title = "Period in bars of Donchian Channel")
monetary_stoploss = input(1000, title = "Monetary Stop Loss")

quantity = if instrument != 1 
    1
else
    int(money / close)
    
upBarrier = highest(high,period)
downBarrier = lowest(low,period)
up = highest(high,period / 4)
down = lowest(low,period / 4)

plot(upBarrier, color=color.green, linewidth=2)
plot(downBarrier, color=color.red, linewidth=2)
plot(up, color=color.lime, linewidth=1)
plot(down, color=color.orange, linewidth=2)

longCondition = crossover(close, upBarrier[1]) and year >= backtest_start

if (longCondition)
    strategy.entry("Long", strategy.long, quantity, when = strategy.position_size == 0)

closeCondition = crossunder(close, down[1]) or down < down[1]

if (closeCondition)
    strategy.close("Long", comment = "Trailing")
    
stop_level = strategy.position_avg_price - monetary_stoploss / strategy.position_size
strategy.exit("StopLoss", from_entry = "Long", stop = stop_level)
plot(stop_level, color=color.yellow, linewidth=2)

// l = label.new(bar_index, na,
//   text="PineScript Code", color= color.lime, textcolor = color.white,
//   style=label.style_labelup, yloc=yloc.belowbar, size=size.normal)
// label.delete(l[1])

もっと