この戦略は,E-mini S&P500先物 (ES) に適用されるトレーリングストップ戦略である. 10 日間のATRを基準として使用し,ストップ・ロスの範囲を3 倍に設定し,ロング・ショート・ストップラインを定義する.この戦略は,ATRラインの方向の変化によってトレンドを判断し,トレンドのターニングポイントでエントリー・シグナルを生成する.一度入力すると,ストップ・ロスのラインをリアルタイムで調整して価格動きを追跡し,利益を保護する.
この戦略は価格源として hl2 を使用する.まずは10日間の ATR を計算し,SMA 方法または組み込みの ATR 関数を使用して ATR を計算するかを選択することができます. ATR を取得した後,範囲を形成するために 3 倍 ATR を上下に追加します. 2 つの範囲線はストップ損失線です.
トレンドを判断する方法は,価格が上限を超えると,それは長い;価格が下限を突破すると,それは短い.価格が範囲に戻ると,それはトレンド逆転を確認する.この時点で,短から長に切り替えた場合,それは長いエントリー信号を生成します;長から短に切り替えた場合,それは短いエントリー信号を生成します.
ロングストップ・ロスは上限マイナス1ティックに設定され ショートストップ・ロスは下限プラス1ティックに設定され 利益を保護します
一般的には,これは強固なトレンドフォロー戦略である.これはストップ損失範囲を決定する問題を解決し,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)