トレンドフォロー平均真の範囲ストップロス戦略

ATR TS
作成日: 2024-05-24 18:12:01 最終変更日: 2024-05-24 18:12:01
コピー: 8 クリック数: 521
1
フォロー
1617
フォロワー

トレンドフォロー平均真の範囲ストップロス戦略

概要

この戦略は,ストップ・ローズを動的に調整することでトレンドを追跡する目的を達成するために,ストップ・ローズを動的に調整する.価格が有利な方向に移動すると,ストップ・ローズもそれに合わせて調整され,得られる利益をロックします.価格が不利な方向に移動すると,ストップ・ローズは変わらない.価格がストップ・ローズに触れたら,ストップ・ローズは平らになります.この戦略の鍵は,ストップ・ポジションの動的調整にあります.

戦略原則

  1. ATRは,市場の変動を反映し,価格変動の平均幅度を測定するために使用される.
  2. ATRとKeyValueのパラメータに基づいて止損距離 nLossを計算する.KeyValueはユーザがカスタマイズした倍数で,nLossはKeyValueとATRの倍数で,止損距離はATRの何倍である.
  3. 動的トラッキングストップ位置xATRTrailingStopを計算する. 多頭ポジションの場合は”,前K線の最高価格と[[閉盘価格-nLoss]]の大きい値”;空頭ポジションの場合は”,前K線の最低価格と[[閉盘価格+nLoss]]の小さい値”として設定する.
  4. ポジション開設シグナルを生成します. 閉盘価格の上ではxATRTrailingStopを突破すると,多めにします. 閉盘価格の下ではxATRTrailingStopを突破すると,空っぽにします.

優位分析

  1. ストップ・ロスは,価格の変動に動的に調整され,利益をロックするだけでなく,トレンドの継続に合わせて利益を拡大することができます.
  2. ストップ・ポジションはATR計算に基づいており,市場変動を客観的に反映し,主観的に設定された固定ストップと比較してより柔軟かつ有効である.
  3. KeyValueのパラメータでATRを拡大することで,自分のリスクの好みに合わせて適切なストップ距離を設定できます.KeyValueの大きさは,より広いストップスペースと,より少ないストップ周波数をもたらすでしょう.

リスク分析

  1. トレンド型戦略は不安定な市場ではうまく機能せず,一方的なトレンドが目立たない場合,しばしば止まり,資金の急速な流出を引き起こします.
  2. 入場時刻は,閉店価格と動的なストップラインの交差信号に依存し,振動的な状況で連続した小ストップが発生する可能性があります.
  3. ストップ・ストラトジーは,巨額の空虚や利多によるギャップ・ジャンプを回避できず,ストップ・ポジションの調整速度が価格の変化の速度に追いつけないため,実際の損失は予想される可控の損失よりもはるかに大きい.

最適化の方向

  1. 策略に基づいて,均線システム,動力指標などのトレンド判断指標を追加し,トレンドが明確であるときにのみ入場し,波動的な市場で頻繁に取引を避けることができます.
  2. トレンドの終わりに潜在的利益の反転の可能性を減らすために,ケリー公式に基づいてポジションを保持し,固定利益の数回撤回するストップを設定するなど,ストップストラトジーを導入することを考えることができます.
  3. 空飛ぶ隙間に対して,固定金額または固定パーセントのような最大ストップ制限を設定することができ,その制限に達すると,動的ストップ価格がどこにあっても,即座にストップされます.

要約する

ATRトラッキングストップ戦略は,価格変動幅度に応じてストップポジションを動的に調整できるので,トレンドの状況で良い効果が得られます.しかし,この戦略は,震動市場,ストップが頻繁すぎ,空飛ぶギャップを避けるのが難しいなどのリスクにも対応できません.上記の欠陥に対して,トレンド判断,ストップ戦略,最大ストップ制限などの面で戦略を最適化および改善することができます.これらの調整により,戦略の適応性と収益性を高める見込みがあります.

ストラテジーソースコード
/*backtest
start: 2024-04-01 00:00:00
end: 2024-04-30 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Long TAP", overlay=true)

// Constants
keyValueDefault = 3.0
keyValueStep = 0.5
atrPeriodDefault = 10

// Inputs
keyValue = input.float(keyValueDefault, title="Key Value")
atrPeriod = input.int(atrPeriodDefault, title="ATR Period")

// Calculations
xATR = ta.atr(atrPeriod)
nLoss = keyValue * xATR

// Trailing Stop Calculation
var float xATRTrailingStop = 0.0
xATRTrailingStop := ta.highest(math.max(nz(xATRTrailingStop[1], 0), close - nLoss), 1)
xATRTrailingStop := ta.lowest(math.min(nz(xATRTrailingStop, 0), close + nLoss), 1)

// Position Calculation
var int pos = 0
pos := nz(pos[1], 0)
if (close[1] < nz(xATRTrailingStop, 0) and close > nz(xATRTrailingStop, 0))
    pos := 1
else if (close[1] > nz(xATRTrailingStop, 0) and close < nz(xATRTrailingStop, 0))
    pos := -1

// Plotting Trailing Stop
var color xcolor = na
if (pos == -1)
    xcolor := color.red
else if (pos == 1)
    xcolor := color.green
plot(xATRTrailingStop, color=xcolor, title="Trailing Stop")

// Buy/Sell Signals
buySignal = ta.crossover(close, xATRTrailingStop)
sellSignal = ta.crossunder(close, xATRTrailingStop)

// Strategy
if (buySignal)
    strategy.entry("Long", strategy.long)
    label.new(bar_index, xATRTrailingStop, text="Buy Signal", color=color.green, style=label.style_label_up, yloc=yloc.belowbar)
if (sellSignal)
    strategy.entry("Short", strategy.short)
    label.new(bar_index, xATRTrailingStop, text="Sell Signal", color=color.red, style=label.style_label_down, yloc=yloc.abovebar)

// Alerts
alertcondition(buySignal, title='UT BOT Buy', message='UT BOT Buy')
alertcondition(sellSignal, title='UT BOT Sell', message='UT BOT Sell')