チャンネルブレイクに基づいたトレンド追跡戦略

作者: リン・ハーンチャオチャン,日付: 2023年11月23日 14:04:59
タグ:

img

概要

この戦略は,チャネルブレイクアウト理論に基づいて設計されたトレンド追跡戦略である.特定の期間で最も高い価格と最も低い価格を使用してチャネルを構築し,価格がチャネルを突破すると取引信号を生成する.この戦略はトレンド市場に適しており,トレンド追跡のための価格のトレンド方向を把握することができます.

戦略の論理

ストラテジーは,まず,チャネルの上帯と下帯を構築するために,長期間で最も高い価格と最も低い価格を計算する. 閉じる価格が上帯を突破すると,ロングポジションが開かれる. 閉じる価格が下帯を突破すると,ショートポジションが開かれる. 価格がチャネルに戻るとポジションが閉まる.

この戦略は,トレンド方向を決定するために長さ*2の EMA インディケーターもプロットしています.価格が上部帯を突破すると,EMA が上昇傾向にある場合,ロング 決定は強化されます.

利点分析

  • この戦略は価格の動向を把握し,高利益の可能性のある市場動向に適しています.
  • 信号を生成するためにチャネルブレイクを使用することで 偽ブレイクが減少し信号品質が向上します
  • EMAと連携して,トレンドに反する取引を避け,主要なトレンドを追跡することを保証する.

リスク分析

  • ブレイクアウト戦略は,価格統合中に頻繁な取引を生む傾向があり,高い取引コストを伴う可能性があります.
  • 戦略は,トレンドが逆転するとすぐにポジションを退場することはできません.これは大きな損失につながる可能性があります.
  • 戦略はパラメータ設定に敏感で 異なるパラメータは 全く異なる結果をもたらすことができます

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

  • MACD,RSIなどの他の指標を組み込むことで 誤ったブレイクを避ける.
  • 機械学習アルゴリズムを使用して パラメータを自動的に最適化し 安定性を向上させる
  • ストップ・ロストを設定して 最大引き上げを制御する

概要

概要すると,これはトレンドを把握するためのチャネルブレイクに基づいたシンプルなトレンド追跡戦略である.強力なトレンド追跡能力を持ち,トレンド市場で良いリターンを達成することができる.しかし,いくつかのリスクも伴い,安定性を向上させるためにさらなる最適化が必要である.パラメータチューニング,ストップ損失設定,および他の指標との組み合わせを通じて,この戦略はライブ取引に適用することができます.


/*backtest
start: 2023-11-15 00:00:00
end: 2023-11-22 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3


initial_capital = 1000,
default_qty_value = 90,
default_qty_type = strategy.percent_of_equity,
pyramiding = 0,
commission_value = 0.002,
commission_type = strategy.commission.percent,
calc_on_every_tick = true
length_val = 2
max_bars_back = 1440
risk_max_drawdown = 9


strategy("Channel Break",max_bars_back=max_bars_back,initial_capital = initial_capital,default_qty_value = default_qty_value,default_qty_type = default_qty_type,pyramiding = pyramiding,commission_value = commission_value,commission_type = commission_type,calc_on_every_tick = calc_on_every_tick)
// strategy.risk.max_drawdown(risk_max_drawdown, strategy.percent_of_equity) 

length = input(title="Length",  minval=1, maxval=1000, defval=length_val)

upBound = highest(high, length)
downBound = lowest(low, length)

//plot (upBound)
//plot (downBound)
//plot (close, color=red)
//plot (ema(close,length * 2), color=green)
//
if (not na(close[length]) and time>timestamp(2018, 02, 24, 0, 00) )
    strategy.entry("Buy", strategy.long, stop=upBound + syminfo.mintick, comment="Buy")
    strategy.entry("Short", strategy.short, stop=downBound - syminfo.mintick, comment="Short")
    
position = strategy.position_size
    
    
//plot(position , title="equity", color=red,style=cross,linewidth=4)
plot(variance(position,2)>0?1:0,style=circles,linewidth=4)

message = ""

if (position > 0) 
    message = "BTCUSD L: " + tostring(strategy.position_size)
    na(position)
    
if (position < 0) 
    message = "BTCUSD S: " + tostring(strategy.position_size)
    na(position)

alertcondition(variance(strategy.position_size,2) > 0, "test", message )

もっと