この戦略は,チャネルブレイクアウト理論に基づいて設計されたトレンド追跡戦略である.特定の期間で最も高い価格と最も低い価格を使用してチャネルを構築し,価格がチャネルを突破すると取引信号を生成する.この戦略はトレンド市場に適しており,トレンド追跡のための価格のトレンド方向を把握することができます.
ストラテジーは,まず,チャネルの上帯と下帯を構築するために,長期間で最も高い価格と最も低い価格を計算する. 閉じる価格が上帯を突破すると,ロングポジションが開かれる. 閉じる価格が下帯を突破すると,ショートポジションが開かれる. 価格がチャネルに戻るとポジションが閉まる.
この戦略は,トレンド方向を決定するために長さ*2の EMA インディケーターもプロットしています.価格が上部帯を突破すると,EMA が上昇傾向にある場合,ロング 決定は強化されます.
概要すると,これはトレンドを把握するためのチャネルブレイクに基づいたシンプルなトレンド追跡戦略である.強力なトレンド追跡能力を持ち,トレンド市場で良いリターンを達成することができる.しかし,いくつかのリスクも伴い,安定性を向上させるためにさらなる最適化が必要である.パラメータチューニング,ストップ損失設定,および他の指標との組み合わせを通じて,この戦略はライブ取引に適用することができます.
/*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 )