ATRに基づくESトレーリングストップ戦略


作成日: 2024-01-12 14:52:23 最終変更日: 2024-01-12 14:52:23
コピー: 3 クリック数: 673
1
フォロー
1617
フォロワー

ATRに基づくESトレーリングストップ戦略

概要

この戦略は,E-mini S&P500期貨 ((ES)) に適用されるストップフォロー戦略である.これは,10日ATRを参考として使用し,3倍ATRをストップ範囲として多頭と空頭のストップラインを設定する.この戦略は,ATR線の方向の変化によってトレンドを判断し,トレンド転換点で入場シグナルを生成する.入場後,ストップフォローラインをリアルタイムで調整し,ストップフォローラインを価格に追従させ,利潤の保護を実現する.

戦略原則

この策略はhl2を価格源として使用する.まず,10日ATRを計算し,SMA方式でATRを計算するか,または内蔵ATR関数を使用するかの選択をユーザーに与えます.ATRを計算した後,上下にそれぞれ3倍ATRを範囲として追加します.この2つの範囲線は止損線です.

トレンド判断の方法は,価格が上限を超えると多頭;価格が下限を下回ると空頭である.価格が範囲に再調節されたとき,トレンド転換が確認される.このとき,空から転がれば多頭,generate 入場信号;空から転がれば空から入場信号である.

入場後,多頭ストップラインは上境界を1点下移し,空頭ストップラインは下境界を1点上移し,利な尾行保護を行う.

戦略的優位性

  1. ATRを使用すると,市場の変動率の変化に自動的に適応し,ストップ・ロスが引き起こす確率を下げる.
  2. トレンドを追跡する方法は簡単で効果的で,トップとボトムにたどり着くリスクは避けられます.
  3. 追随ストップは,利益の保護を保証し,利益の後に再び損失を避ける

リスク分析

  1. ATR パラメータを正しく設定しないことにより,止損範囲が大きすぎたり小さすぎたりすることがあります.
  2. 標識の波動的動で,異常な止損が発生する可能性があります.
  3. TAILINGのストップは保守的で,トレンドを継続的に追跡できていない可能性がある

最適化の方向

  1. ATRパラメータを波動率指数と組み合わせて最適化することも検討できます.
  2. バランスパーセンテージストープなどの異なるTAILINGストープアルゴリズムをテストできます.
  3. トレンド指数で入場シグナルをフィルタリングし,非主動的な入場を避ける

要約する

この戦略は,全体として,より普遍的なトレンド追跡戦略である。この戦略は,ストップ範囲の決定の難問を解決し,ATRのダイナミック調整によってリスクを軽減する。同時に,ストップをフォローして利益保護を行う。しかし,ATRパラメータ,ストップアルゴリズムなどには,まだ最適化の余地がある。この戦略は,さらなるテストとパラメータの調整によって,この戦略は,高強度なストップ追跡戦略になることができる。

ストラテジーソースコード
/*backtest
start: 2023-01-05 00:00:00
end: 2024-01-11 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("ATR Based Trailing Stop Strategy on ES! [v4]", overlay=true)

// Given ATR study
Periods = input(title="ATR Period", type=input.integer, defval=10)
src = input(hl2, title="Source")
Multiplier = input(title="ATR Multiplier", type=input.float, step=0.1, defval=3.0)
changeATR = input(title="Change ATR Calculation Method ?", type=input.bool, defval=true)
atr2 = sma(tr, Periods)
atr = changeATR ? atr(Periods) : atr2
up = src - (Multiplier * atr)
up1 = nz(up[1], up)
up := close[1] > up1 ? max(up, up1) : up
dn = src + (Multiplier * atr)
dn1 = nz(dn[1], dn)
dn := close[1] < dn1 ? min(dn, dn1) : dn
trend = 1
trend := nz(trend[1], trend)
trend := trend == -1 and close > dn1 ? 1 : trend == 1 and close < up1 ? -1 : trend

// Entry logic based on trend change
longCondition = trend == 1 and trend[1] == -1
shortCondition = trend == -1 and trend[1] == 1

if (longCondition)
    strategy.entry("Long", strategy.long)

if (shortCondition)
    strategy.entry("Short", strategy.short)

// Trailing stop loss logic
// For long positions, trail 1 point below the up plot
longStopPrice = up - 1

// For short positions, trail 1 point above the dn plot
shortStopPrice = dn + 1

strategy.exit("Trailing Stop Long", "Long", trail_offset=longStopPrice)
strategy.exit("Trailing Stop Short", "Short", trail_offset=shortStopPrice)