ATRに基づく ES のトライルストップ戦略

作者: リン・ハーンチャオチャン,日付: 2024-01-12 14:52:23
タグ:

img

概要

この戦略は,E-mini S&P500先物 (ES) に適用されるトレーリングストップ戦略である. 10 日間のATRを基準として使用し,ストップ・ロスの範囲を3 倍に設定し,ロング・ショート・ストップラインを定義する.この戦略は,ATRラインの方向の変化によってトレンドを判断し,トレンドのターニングポイントでエントリー・シグナルを生成する.一度入力すると,ストップ・ロスのラインをリアルタイムで調整して価格動きを追跡し,利益を保護する.

戦略の論理

この戦略は価格源として hl2 を使用する.まずは10日間の ATR を計算し,SMA 方法または組み込みの ATR 関数を使用して ATR を計算するかを選択することができます. ATR を取得した後,範囲を形成するために 3 倍 ATR を上下に追加します. 2 つの範囲線はストップ損失線です.

トレンドを判断する方法は,価格が上限を超えると,それは長い;価格が下限を突破すると,それは短い.価格が範囲に戻ると,それはトレンド逆転を確認する.この時点で,短から長に切り替えた場合,それは長いエントリー信号を生成します;長から短に切り替えた場合,それは短いエントリー信号を生成します.

ロングストップ・ロスは上限マイナス1ティックに設定され ショートストップ・ロスは下限プラス1ティックに設定され 利益を保護します

利点

  1. ATRを使用すると,市場変動の変化に自動的に適応し,ストップロスの発生の可能性を減らすことができます.
  2. トレンドトラッキング方法は シンプルで効果的です トップと底を追うリスクを避けるためです
  3. 利潤の回帰を避けます 利潤の回帰を避けます

リスク分析

  1. ATR パラメータの設定が正しくない場合,ストップ損失範囲が大きすぎるか小さすぎる可能性があります.
  2. 基本資産の変動が急激に変化すると,異常なストップロスの発生が起こる可能性があります.
  3. トレーリング ストップ は 傾向 を 追う ため に 保守 的 な もの で は あり ませ ん.

オプティマイゼーションの方向性

  1. ATRパラメータを波動性指標と組み合わせて最適化することを検討する.
  2. テストする アルゴリズムは テストする アルゴリズムは テストする アルゴリズムは
  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)


もっと