
多空ダイナミック・トラッキング戦略は,ダイナミック・平均値を使って価格トレンドを追跡する戦略である.それは,一定の周期内の最高価格と最低価格の移動平均を計算して,現在のトレンドを決定し,ATRと組み合わせてダイナミック・ストップ・ロスを実現する.この戦略は,主に明らかにトレンドのある市場に適用され,トレンドの逆転をタイムリーにキャプチャして長期にわたって保持する.
この戦略は,まず一定の周期 (デフォルト200日) 内の最高価格と最低価格の移動平均を計算し,その2つの中央点を基準線として用いる.それから,価格と基準線の偏差を計算し,価格が基準線より高いATR (デフォルト10日ATRの0.5倍) であれば上昇傾向にあると考え,価格が基準線より低いATRであれば下降傾向にあると考えます.
価格がベースラインに戻ったときにエグジットシグナルが生じます. さらに,ATRの動的変化は,ストップ・ロストを大きなトレンドとともに徐々に伸ばし,非トレンド的な波動による過度の取引を減らすことができます.
適切なATRパラメータの調整によってストップ・ローズ・センセンシビリティを低減したり,他の指標を加えることで確実な取引タイミングを選することもできる.また,大盘走勢と組み合わせてリスク胃ナナーを評価し,大盘多頭情勢でのみ多額の取引を行うかどうかを選択することもできる.
多空ダイナミック・トラッキング戦略は,全体的にはシンプルで実用的なトレンド・トラッキング戦略である.動平均によってトレンドの方向を決定し,ATRを利用してダイナミック・ストップ・ストップを実現し,リスクを効果的に制御することができる.この戦略は,トレンドが顕著な市場環境に適しており,トレンドの逆転をタイムリーに捉えることで,長期にわたって保持される余剰利益を得ることができる.しかし,震動の状況で閉じ込められるのを防ぐために注意が必要です.パラメータ最適化と補助意思決定によって戦略の安定性をさらに向上させることができます.
/*backtest
start: 2022-10-10 00:00:00
end: 2023-10-16 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=4
strategy("Trend Following Long Only Strategy", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100)
lookback_length = input(200, type=input.integer, minval=1, title="Lookback Length")
smoother_length = input(5, type=input.integer, minval=1, title="Smoother Length")
atr_length = input(10, type=input.integer, minval=1, title="ATR Length")
atr_multiplier = input(0.5, type=input.float, minval=0.5, title="ATR Multiplier")
vola = atr(atr_length) * atr_multiplier
price = sma(close, 3)
l = ema(lowest(low, lookback_length), smoother_length)
h = ema(highest(high, lookback_length), smoother_length)
center = (h + l) * 0.5
upper = center + vola
lower = center - vola
trend = ema(price > upper ? 1 : (price < lower ? -1 : 0), 3)
c = trend < 0 ? upper : lower
pcenter = plot(center, transp=100)
pclose = plot(close, transp=100)
pc = plot(c, transp=100)
buy_signal = crossover(trend, 0.0)
sell_signal = crossunder(trend, 0.0)
strategy.entry("Buy", strategy.long, when=buy_signal)
strategy.close("Buy", when=sell_signal)
bgcolor(trend >= 0 ? color.green : color.red, transp=95)
fill(pc, pclose, color=trend >= 0 ? color.green : color.red)