価格動向追跡ストップ損失戦略

作者: リン・ハーンチャオチャン, 日付: 2023年11月27日 11:45:04
タグ:

img

概要

この戦略は,トレンド方向を決定するために価格の勢いを計算し,利益をロックするために双方向追跡ストップを設定し,トレンドに従ってストップ損失を実現する.この戦略は,特定の利益目標に達した後のみ追跡を開始するためのアクティベーションレベルを組み合わせ,早期ストップ損失を効果的に防止する.

戦略の論理

価格の12期モメンタムを計算し,さらに1期モメンタムを計算する.速いモメンタム (1期モメンタム) が0を超えると,ロングに行く.0未満の場合ショートに行く.これは価格の動向を決定するために価格モメンタムの方向の変化を判断する.

トレイリングストップ距離とアクティベーションレベルを設定する. トレイリングストップ距離は,価格が新しい高値または低値に達したとき,最新の高値または低値から指定された距離にストップを調整することを意味します.アクティベーションレベルは,特定の利益比に達した後のみトレリングストップを開始することを意味します.

ストラテジーは最高価格や最低価格を追跡し 価格が設定されたストップ距離を超えると 閉じるオーダーを送信することで 利益を固定します

利点分析

  1. 二重モメンタム決定は トレンド方向を正確に判断し 取引を削減し 罠にはまらないようにします

  2. 柔軟な遅延停止距離は リスクと利益を削減します

  3. アクティベーションレベルは,特定の利益目標に達した後でのみトラッキングを可能にすることで,早期のストップ損失を防ぐ.

  4. 双方向ストップは ロングとショートの両方のリスクを全面的に制御します

  5. シンプルで効率的な計算で 分かりやすく実行できます

リスク分析

  1. 二重モメントは逆信号を生成し,トレンドフィルターが必要です.

  2. 停車距離が大きすぎると 大きな損失を被る可能性があります

  3. 高レベルのアクティベーションは 停止機会を逃す可能性があります

  4. 最適の停止を見つけるために,より多くのパラメータテストと最適化が必要です.

トレンド判断とパラメータ最適化によって誤った信号を減らすことができます.最良の構成を見つけるために異なる製品とパラメータセットでテストします.

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

  1. トレンドの市場構造認識を組み合わせ,逆取引を避ける.

  2. 音量の変化や 信号の精度向上のために 突破を絞り込むような タイミング条件を追加します

  3. 異なる停止距離とアクティベーションレベルをテストすることによってパラメータを最適化します.

  4. 市場変動に応じて動的ストップを考慮する.

  5. 部分停止や移動停止を設定して リスクを制御します

結論

この戦略は明確な構造を持ち,二重の勢いでトレンドを判断し,柔軟なトレーリングストップで利益をロックし,効果的に取引リスクを制御する.理解し,実装し,最適化可能なスペースを備えています.より多くの技術指標とパラメータテストを追加することで戦略のパフォーマンスをさらに改善することができます. 戦略はストップ損失管理を実現するためのアイデアと参照を提供します.


/*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)

もっと