資源の読み込みに... 荷物...

ドンチアン・ブレイク・トレード・戦略

作者: リン・ハーンチャオチャン開催日:2024年4月29日 14:56:35
タグ:

img

概要

ドンチアン・ブレイクアウト・トレーディング・ストラテジー (Donchian Breakout Trading Strategy) は,ドンチアン・チャネル指標に基づくトレーディングシステムである.この戦略の主な考え方は,ドンチアン・チャネル上下帯を突破して市場動向を把握し,固定リスク報酬比 (RR) を使って利益を得たり,ストップ損失を起こすことである.価格がドンチアン・チャネル上帯を突破してドンチアン・チャネル期間の新高を創ったとき,それは長くなってしまう.下帯を下を下ろし,新しい低点を作り出すとき,それは短くなってしまう.同時に,ストップ損失はドンチアン・チャネルの中帯に設定され,利益を得ることは設定されたリスク報酬比に基づいて計算される.

戦略原則

  1. ドンチアンチャンネルを計算する: 設定されたドンチアンチャンネル期間 (デフォルト20) をベースに,その期間の最高価格と最低価格をそれぞれドンチアンチャンネル上部および下部帯として計算し,上部および下部帯の真ん点をドンチアンチャンネル中部帯として計算する.
  2. 新しい高低が発生するかどうかを決定する.現在のドンキアンチャネル上下帯を前数期の上下帯とループして比較することで,ドンキアンチャネル期間に比べて新しい高低が発生するかどうかを決定する.新しい高低が発生した場合,ドンキアン上下帯は青で表示される.新しい低低が発生した場合,ドンキアン下帯は青で表示される.
  3. ブレイクアウトエントリー: 閉じる価格が青いドンキアンの上帯を突破すると,ロングポジションに入ります.青いドンキアンの下帯を突破すると,ショートポジションに入ります.つまり,新しい高値/低値が作成された後に発生するブレイクアウトのみが有効です.
  4. 取利益とストップ損失:ポジションを開くとき,エントリー価格と現在のドンキアンチャネルの中間帯価格を記録し,両者の価格差を計算します.ストップ損失はドンキアンチャネル中間帯に設定され,取利益は設定されたリスク報酬比 (デフォルト5倍) と価格差に基づいて計算されます.
  5. 閉じるポジション: 価格が利益を得たり,ストップ・ロスを取る価格に達すると,ポジションは閉じる.

戦略 の 利点

  1. トレンド市場には適しています: ドンチアン・ブレイクアウト戦略は,市場傾向の方向性を順に上/下帯を突破してポジションに入手し,トレンド市場で良好なパフォーマンスを発揮します.
  2. 新しい高低フィルタリング:この戦略は,ドンチアン運河期間中に新しい高低が作られるかどうかを決定することによって,いくつかのノイズ信号と偽ブレイクをフィルタリングし,入力信号の質を改善します.
  3. 固定リスクリターン比:各取引の利益とストップロスのポジションは固定リスクリターン比に基づいており,リスクは制御可能でマネーマネジメントに有利です.
  4. シンプルなパラメータ:戦略パラメータは比較的簡単に設定できます.主にドンキアンチャネル期間とリスク・リターン比率で,最適化と制御が容易になります.

戦略リスク

  1. マグニチュード損失:戦略のストップ損失ポジションはドンチアン運河の中央帯です.不明確な傾向または変動する市場では,単一の取引が大きな損失を被る状況があります.
  2. 取引頻度: ドンチアン運河の期間が狭すぎると,取引コストを増加させ,ポジションの頻繁な開閉につながる可能性があります.
  3. トレンド逆転: トレンド逆転の間,戦略は連続した多重ストップ損失を経験する可能性があります.
  4. パラメータ感受性: 戦略のパフォーマンスはパラメータ設定に敏感で,異なる市場特性と取引サイクルに基づいて最適化する必要があります.

戦略の最適化方向

  1. ダイナミックストップ・ロース: 価格変動,変動等に基づいてストップ・ロースポジションをリアルタイムに調整し,単一の取引リスクを減らすため,ATRをストップ・ロース基準として使用します.
  2. トレンドフィルタリング:シグナル品質を改善するために,移動平均値などのトレンド判断指標を追加し,トレンド方向が明確である場合にのみポジションを開く.
  3. 他の指標と組み合わせる: RSI や MACD などのモメンタム指標と組み合わせて,開設ポジションのタイミングを包括的に評価する.
  4. ポジション管理: 市場の動向強度,変動等に基づいてポジションサイズを動的に調整し,全体的なリスクを制御する.
  5. パラメータ適応: マシンラーニングやその他の方法を使用してパラメータ設定を適応的に最適化します.

概要

ドンチアン・ブレイクアウト・トレーディング・ストラテジー (Donchian Breakout Trading Strategy) は,伝統的なドンチアン・チャネル指標に基づくトレンドフォロー・トレーディング・システムである.ドンチアン・チャネルの上下帯のブレイクアウトや新たな高値/低値の判断を通じてポジションを開き,固定リスク・リワード比率に基づいて利益とストップ・ロスを取る.この戦略はシンプルな論理を持ち,トレンド市場に適している.しかし,変動する市場ではパフォーマンスが悪く,パラメータ設定に敏感である.戦略の安定性を向上させるために,ダイナミックストップ・ロスの導入,トレンドフィルタリング,ポジション管理などによりさらに最適化することができる.


/*backtest
start: 2023-04-23 00:00:00
end: 2024-04-28 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/
// © Dillon_Grech
//---------------------------------------------//

//---------------------------------------------//
// Simple donchian channel break out strategy
// which only enters trades when price closes
// above donchian upper and creates new high 
// (long) or price closes below donchian lower
// and creates new low, relative to the donchian
// length. This is indicated by the donchian
// upper and lower color (blue). Stop loss is
// located at donchian basis and take profit
// is set at Risk Reward (RR) profit target.
//---------------------------------------------//
//@version=5
strategy("Donchian New High/Low Strategy [Dillon Grech]", overlay=true)

//---------------------------------------------//

//---------------------------------------------//
//INDICATOR 1 - Donchian New High Low Price Close
don_length = input.int(20, minval = 1)
don_lower  = ta.lowest(don_length)
don_upper  = ta.highest(don_length)
don_basis  = math.avg(don_upper, don_lower)

//loop
don_lower_upper  = true
don_higher_lower = true
for i = 0 to don_length - 1
    //Check for higher high over don_length
    if don_upper > don_upper[i]
        don_lower_upper := false
    //Check for lower low over don_length
    if don_lower < don_lower[i]
        don_higher_lower := false

//Plot
c_ora = color.orange
c_blu = color.blue
c_gra = color.gray
color_basis = c_ora
color_upper = don_lower_upper  ? c_blu : c_gra
color_lower = don_higher_lower ? c_blu : c_gra
plot(don_basis,     "Don Basis", color_basis, 2)
u = plot(don_upper, "Don Upper", color_upper, 2)
l = plot(don_lower, "Don Lower", color_lower, 2)

//Conditions
Ind_1_L = ta.crossover(close, don_upper[1]) and 
   don_lower_upper[1]
Ind_1_S = ta.crossunder(close,don_lower[1]) and 
   don_higher_lower[1]
//---------------------------------------------//

//---------------------------------------------//
//ENTRY CONDITIONS
entry_long  = strategy.position_size<=0 and
   Ind_1_L
entry_short = strategy.position_size>=0 and
   Ind_1_S

if(entry_long)
    strategy.entry("Long Entry", strategy.long)
if(entry_short)
    strategy.entry("Short Entry", strategy.short)
//---------------------------------------------/

//---------------------------------------------//
//TAKE PROFIT AND STOP LOSS CONDITIONS
profit_RR = input.float(5.0,"RR Profit Target")

//Store Price on new entry signal
entry_price = strategy.opentrades.entry_price(
   strategy.opentrades-1)

//Store Donchain Channel Basis
entry_don_basis = float(0.0)
if entry_long or entry_short
    entry_don_basis := don_basis
else
    entry_don_basis := entry_don_basis[1]

//Get stop loss distance
stop_distance = math.abs(entry_price -
   entry_don_basis)
stop_L   = entry_price - stop_distance
profit_L = entry_price + stop_distance*profit_RR
stop_S   = entry_price + stop_distance
profit_S = entry_price - stop_distance*profit_RR

//Plot TP and SL
plot(entry_long or entry_short ? na :
   strategy.position_size > 0 ? profit_L : na,
   color=color.lime, style=plot.style_linebr,
   linewidth=2)
plot(entry_long or entry_short ? na :
   strategy.position_size > 0 ? stop_L : na,
   color=color.red,  style=plot.style_linebr,
   linewidth=2)
plot(entry_long or entry_short ? na : 
   strategy.position_size < 0 ? profit_S : na,
   color=color.lime, style=plot.style_linebr,
   linewidth=2)
plot(entry_long or entry_short ? na :
   strategy.position_size < 0 ? stop_S : na,
   color=color.red,  style=plot.style_linebr,
   linewidth=2)

//Exit long trades
strategy.exit(id = 'Exit Long', 
   from_entry ='Long Entry', 
   stop = stop_L, limit = profit_L)
strategy.exit(id = 'Exit Short', 
   from_entry ='Short Entry', 
   stop = stop_S, limit = profit_S)
//---------------------------------------------//

もっと