ダイナミックストップロストレーリング取引戦略


作成日: 2023-10-09 16:59:57 最終変更日: 2023-10-09 16:59:57
コピー: 0 クリック数: 1199
1
フォロー
1702
フォロワー

概要

この戦略は,平均リアル波幅 (ATR) の指標に基づいて動的ストップラインを設定し,株価の変動を追跡し,ストップ・プロテクションを実現しながら最大限の利益をロックする.

戦略原則

この戦略は主に以下のステップを踏まえて実行されます.

  1. ATR指標を計算し,ATR周期はnATRPeriodパラメータで設定され,デフォルトは5;

  2. ATR値に基づいて計算された止損線は,nATRMultipパラメータによって設定され,ATRの3.5倍をデフォルトで設定します.

  3. 株価が上昇すると,先前のストップラインより高い場合は,ストップラインを上値に上げ,株価をストップ幅減算する.株価が低下すると,先前のストップラインより低い場合は,ストップラインを下値に上げ,株価をストップ幅加算する.

  4. 株価がストップラインを突破したかどうかを判断し,その突破は買入または売却のシグナルを発信する.

  5. ストップラインを突破するシグナルに応じて,多額または空白のポジションに入って,再びストップラインに触れたときに平仓する.

株価が上昇すると,ストップラインは上向きに調整され,利益をロックする.株価が下がると,ストップラインは下向きに調整され,ストップする.ATR指標は,株価の変動の程度をより正確に反映し,ATRの動向に応じてストップラインを調整することで,ストップが過度に激進的または保守的になるのを防ぐことができます.

優位分析

  • ストップラインを動的に調整し,損失を拡大しないように
  • 止損ラインの調整は平滑で,早めに止損を避ける
  • ATR指標は最新の波動を反映し,より合理的なストップを計算します.
  • ストップラインの追跡は,利潤を固定するのに役立ちます.

リスク分析

  • ATR指標のパラメータ設定には注意が必要です.ATR周期が短すぎると,ストップラインの変動が大きくなり,長すぎると,価格の変動をタイムリーに反映することができません.
  • ストップ・ラスト幅のパラメータは,特定の株の変動状況に応じて設定され,大きすぎても小さすぎても,戦略の効果に影響する.
  • ストップトラッキングは,株価が再び上昇する前にストップするので,利益の余地が減る可能性があります.
  • ポジションを頻繁に変更すると,取引コストが高くなります.

パラメータ最適化により,ATRサイクルパラメータとストップ幅を調整し,ストップとトラッキングをバランスさせる最適なパラメータの組み合わせを見つけることができます.また,他の技術指標と組み合わせて,市場投入のタイミングをフィルタリングして,不要なストップを減らすことができます.

最適化の方向

  • ATRサイクルパラメータを最適化して,ストップラインの変動を価格の変動に近いものにします.
  • 停止幅のパラメータを最適化して,停止を合理的にします.
  • フィルタリングのタイミングを判断する他の指標を追加
  • 株価が上昇傾向にある場合に限って多額のポジションを入れない.
  • 株価が上昇し続けていると予想される株価停止後,再入場メカニズムへの参加を考慮する

要約する

この戦略は,ATRの止損ラインを動的に調整する方法を用いて,保有過程でストップと利益のロックを実現している.固定の止損位置と比較して,株価の変動状況によりよく適応し,過度に激進的または保守的な止損を避ける.ATR指標は,止損ラインの調整をよりターゲットにしています.しかし,パラメータ設定と再入場戦略は,不必要な止損を減らすためにさらに最適化され,利益のスペースを拡大する必要があります.この戦略は,全体として,止損思考を動的に追跡するよりよい戦略であり,さらなる研究と応用に値する.

ストラテジーソースコード
/*backtest
start: 2023-09-08 00:00:00
end: 2023-10-08 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
//@okadoke
////////////////////////////////////////////////////////////
// Based on Average True Range Trailing Stops Strategy by HPotter
// Average True Range Trailing Stops Strategy, by Sylvain Vervoort 
// The related article is copyrighted material from Stocks & Commodities Jun 2009 
////////////////////////////////////////////////////////////
strategy(title="ATR Trailing Stops Strategy", shorttitle="ATRTSS", overlay = true, 
  initial_capital=100000, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, commission_type="percent", commission_value=0.0)
  
nATRPeriod      = input(5, "ATR Period")
nATRMultip      = input(3.5, "ATR Multiplier")
useShorts       = input(false, "Test w/Shorts?")
daysBackMax     = input(defval = 360, title = "Max Days Back to Test", minval = 0)
daysBackMin     = input(defval = 0, title = "Min Days Back to Test", minval = 0)
msBackMax       = 1000 * 60 * 60 * 24 * daysBackMax
msBackMin       = 1000 * 60 * 60 * 24 * daysBackMin

xATR = atr(nATRPeriod)
nLoss = nATRMultip * xATR
xATRTrailingStop = na
xATRTrailingStop := 
 iff(close > nz(xATRTrailingStop[1], 0) and close[1] > nz(xATRTrailingStop[1], 0), max(nz(xATRTrailingStop[1]), close - nLoss),
  iff(close < nz(xATRTrailingStop[1], 0) and close[1] < nz(xATRTrailingStop[1], 0), min(nz(xATRTrailingStop[1]), close + nLoss), 
   iff(close > nz(xATRTrailingStop[1], 0), close - nLoss, close + nLoss))) 
                       
pos = na 
pos := 
 iff(close[1] < nz(xATRTrailingStop[1], 0) and close > nz(xATRTrailingStop[1], 0), 1, 
  iff(close[1] > nz(xATRTrailingStop[1], 0) and close < nz(xATRTrailingStop[1], 0), -1, nz(pos[1], 0)))
        
color = pos == -1 ? red: pos == 1 ? green : blue 
plot(xATRTrailingStop, color=color, title="ATR Trailing Stop")

isWithinTimeBounds = (msBackMax == 0 or (time > (timenow - msBackMax))) and (msBackMin == 0 or (time < (timenow - msBackMin)))

buy     = crossover(close, xATRTrailingStop)
sell    = crossunder(close, xATRTrailingStop)

strategy.entry("LONG", long=true, when=buy and isWithinTimeBounds)
strategy.close("LONG", when=sell and isWithinTimeBounds)
strategy.entry("SHORT", long=false, when=useShorts and sell and isWithinTimeBounds)
strategy.close("SHORT", when=useShorts and buy and isWithinTimeBounds)