
この戦略は,価格の動向指標を計算し,長短の双方向追跡ストップを設定して利益をロックして,トレンド追跡ストップを実現する.戦略は,指定された利益を達成した後でストップを追跡し始めるアクティベーションレベルと組み合わせて,早期のストップを効果的に防ぐことができます.
価格の12周期動力を計算し,次に動力の1周期動力を計算する.速動量 (価格動力の1周期動量) が0時より大きいときは多し,0時より小さい時は空する.このようにして,価格動量の変化の方向を判断し,価格トレンドを掌握することができる.
トラッキングストップ距離とトラッキングストップアクティベーションレベルを設定する. トラッキングストップ距離は,価格が新しい高点または低点に走る時に指定された距離にストップを調整することを意味します. トラッキングストップアクティベーションは,一定利益率に達した後でストップを追跡することを意味します.
戦略は,最高値または最低値を追跡して利益をロックし,価格が設定されたストップ・ロスの距離を超えると平仓シグナルを発する.
双重動量判断を利用して,価格の傾向の方向を正確に判断し,取引回数を減らして,被套を避ける.
ストップ・ロスを追跡し,リスクを軽減し,利益をロックする柔軟な設定.
ストップ・ロスのアクティベーションレベルを設定し,一定の利益を達成した後にのみストップ・ロスを起動し,早期のストップ・ロスを避ける.
複数の頭と空頭の両方の止損レベルを同時に設定し,リスクを完全に制御する.
計算プロセスはシンプルで効率的で,理解し,実行しやすい.
双動量判定は反転信号が発生し,トレンドフィルターと組み合わせる必要があります.
ストップダメージ距離が大きすぎると,大きな損失が発生する.
アクティベーションレベルが高すぎると,ストップ・ローンを逃す可能性があります.
パーメタルのテストと最適化により,最適の止損点を探す必要があります.
トレンド判断とパラメータ最適化により誤信号を減らすことができます.異なる品種の契約とパラメータ設定をテストし,最適な配置を探します.
市場構造を識別する指標と組み合わせて,空白傾向を特定し,反転取引を避ける.
取引量変化,縮小突破などの時間選択条件を追加し,信号の正確性を向上させる.
パラメータを最適化し,異なる停止距離とアクティベーションレベルのパフォーマンスをテストする.
市場変動に応じて自動的に調整されるダイナミック・トラッキング・ストップ・ディスタンスを考慮する.
部分停止または移動停止を設定し,リスクをさらに制御できます.
この戦略の全体的な構造は明確で,双重動量指標によって価格の傾向を判断し,利潤をロックするために柔軟な追跡ストップを設定し,取引リスクを効果的に制御できます.この戦略は,理解し,実行しやすいと同時に,最適化可能なスペースがあり,より多くの技術指標とパラメータテストを追加することで,戦略のパフォーマンスをさらに向上させることができます.この戦略は,ストップ管理を実現するための考え方と参照を提供します.
/*backtest
start: 2023-01-01 00:00:00
end: 2023-02-03 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("Trailing Stop Snippet", overlay=true)
length = input(12)
price = close
momentum(seria, length) =>
mom = seria - seria[length]
mom
mom0 = momentum(price, length)
mom1 = momentum( mom0, 1)
tsact = input.float(0.0, "Trailing Stop Activation |", group="strategy", tooltip="Activates the Trailing Stop once this PnL is reached.") / 100
tsact := tsact ? tsact : na
ts = input.float(0.0, "Position Trailing Stop |", group="strategy", tooltip="Trails your position with a stop loss at this distance from the highest PnL") / 100
ts := ts ? ts : na
in_long = strategy.position_size > 0
in_short = strategy.position_size < 0
var ts_ = array.new_float()
ts_size = array.size(ts_)
ts_get = ts_size > 0 ? array.get(ts_, ts_size - 1) : 0
if in_long
if tsact and high > strategy.position_avg_price + strategy.position_avg_price * tsact
if ts_size > 0 and ts_get < high
array.push(ts_, high)
if ts_size < 1
array.push(ts_, high)
if not tsact
if ts_size > 0 and ts_get < high
array.push(ts_, high)
if ts_size < 1
array.push(ts_, high)
if in_short
if tsact and low < strategy.position_avg_price - strategy.position_avg_price * tsact
if ts_size > 0 and ts_get > low
array.push(ts_, low)
if ts_size < 1
array.push(ts_, low)
if not tsact
if ts_size > 0 and ts_get > low
array.push(ts_, low)
if ts_size < 1
array.push(ts_, low)
trail = in_long and ts_size > 0 ? low < ts_get - ts_get * ts : in_short and ts_size > 0 ? high > ts_get + ts_get * ts : na
if (mom0 > 0 and mom1 > 0)
strategy.entry("MomLE", strategy.long, stop=high+syminfo.mintick, comment="MomLE")
else
strategy.cancel("MomLE")
if (mom0 < 0 and mom1 < 0)
strategy.entry("MomSE", strategy.short, stop=low-syminfo.mintick, comment="MomSE")
else
strategy.cancel("MomSE")
tsClose = in_long ? ts_get - ts_get * ts : in_short ? ts_get + ts_get * ts : na
if trail
strategy.close_all()
if not strategy.opentrades
array.clear(ts_)
//plot(strategy.equity, title="equity", color=color.red, linewidth=2, style=plot.style_areabr)
plotchar(ts_get, "GET", "")
plot(strategy.position_avg_price > 0 ? strategy.position_avg_price : na, "Average", color.rgb(251, 139, 64), 2, plot.style_cross)
plot(tsClose > 0 ? tsClose : na, "Trailing", color.rgb(251, 64, 64), 2, plot.style_cross)
plot(strategy.position_avg_price - strategy.position_avg_price * tsact > 0 ? strategy.position_avg_price - strategy.position_avg_price * tsact : na, "TS Activation", color.fuchsia, 2, plot.style_cross)