波動性停止追跡戦略

作者: リン・ハーンチャオチャン, 日付: 2023-12-01 17:53:36
タグ:

img

概要

ストップ・ロスは,価格変動に基づくトレンド追跡ストップ・ロスト戦略である. 価格変動のためにストップ・ロストラインを設定するために平均真差 (ATR) を使用する. ATRは価格の変動とリスクレベルを反映する. 価格がストップ・ロストラインを超えると,戦略はトレンド逆転を判断し,相応のアクションを講じ,ポジションを開くかストップ・ロスをします.

戦略原則

この戦略は,まず,特定の期間における平均真の範囲 (ATR) を計算する.その後,現在の価格トレンド方向に基づいて,上昇傾向の場合,ストップ損失線は,現在の最高価格マイナスn倍ATRに設定される.ダウントレンドの場合,ストップ損失線は,現在の最低価格プラスn倍ATRに設定される. n値は,ストップ損失線と価格の距離を制御するためのパラメータを通じて調整することができます.

価格が上昇傾向または下落傾向のストップ損失ラインを突破すると,トレンドが変化したと判断されます.この時点で,戦略はストップ損失のポジションをクリアし,新しいトレンドの方向に基づいて新しいストップ損失ラインを設定します.

要するに,戦略は,トレンドの変化の正確な判断を達成するために,ストップロスの線を設定するために価格変動を使用します.トレンドの変化時にタイムリーストップロスは,新しいトレンドの方向性を把握するのに役立ちます.

戦略 の 利点

  • 傾向を判断し,価格の転換点を正確に把握するために価格変動の特徴を使用する
  • 市場逆転のリスクを軽減するために,損失を一時停止し,ポジションを切り替える
  • ストップ損失線と価格変動の間の制御距離の柔軟なパラメータ調整
  • パラメータは,より適性のために特定の製品に最適化することができます

戦略 の リスク

  • 不正ブレイクによる判断の誤差のリスク.価格が持続不可能な不正ブレイクを伴い,トレンド変化の誤判を引き起こす可能性があります.
  • 過剰に攻撃的なパラメータ設定は損失を増加させる可能性があります.例えば,n値が大きすぎると,ストップ損失線があまりにも近く,小さな変動が引き起こす可能性があります.
  • ストップ・ロスの効果は,通貨などの低変動性製品では弱くなります. ATR の値が小さい場合,ストップ・ロスの線が価格に近いことを意味します.

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

  • 取引量や波動性の加速などの補助指標が導入され,不有効なブレイクアウトの誤った判断を避けることができる.
  • ストップ損失距離をより適切にするため,異なる製品の特性に基づいて n 値を調整する.
  • また,ATR期間も最適化して,価格格差の変動を判断するのに最も適した期間パラメータを選択することができます.

概要

ストップ・ロスは,価格変動に基づいてストップ・ロスのラインを設定するための良いアルゴリズム実装である.価格動向を判断する精度は高く,トレンドの重要なターニングポイントを把握することができる.また,より優れた適応性のためにパラメータ調整にいくつかの余地がある.ストップ・ロスの戦略として,市場の逆転のリスクを効果的に回避することができ,ライブ取引では適用される価値がある.


/*backtest
start: 2022-11-30 00:00:00
end: 2023-11-30 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © laptevmaxim92

//@version=4
strategy("Volatility stop strategy", overlay=true)

length = input(20)
mult = input(2, step = 0.1)
utp = input(false, "Use take profit?")
pr = input(100, "Take profit pips")
usl = input(false, "Use stop loss?")
sl = input(100, "Stop loss pips")
fromday = input(01, defval=01, minval=01, maxval=31, title="From Day")
frommonth = input(01, defval=01, minval= 01, maxval=12, title="From Month")
fromyear = input(2000, minval=1900, maxval=2100, title="From Year")
today = input(31, defval=01, minval=01, maxval=31, title="To Day")
tomonth = input(12, defval=12, minval=01, maxval=12, title="To Month")
toyear = input(2039, minval=1900, maxval=2100, title="To Year")

use_date = (time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 00, 00))

atr_ = atr(length)
max_ = 0.0
min_ = 0.0
max1 = 0.0
max1 := max(nz(max_[1]), close)
min1 = 0.0
min1 := min(nz(min_[1]), close)
vstop = 0.0
is_uptrend = false
is_uptrend_prev = false
is_uptrend_prev := nz(is_uptrend[1], true)
stop = is_uptrend_prev ? max1 - mult * atr_ : min1 + mult * atr_
vstop_prev = nz(vstop[1])
vstop1 = is_uptrend_prev ? max(vstop_prev, stop) : min(vstop_prev, stop)
is_uptrend := close - vstop1 >= 0
is_trend_changed = is_uptrend != is_uptrend_prev
max_ := is_trend_changed ? close : max1
min_ := is_trend_changed ? close : min1
vstop := is_trend_changed ? is_uptrend ? max_ - mult * atr_ : min_ + mult * atr_ : vstop1
plot(vstop, color = is_uptrend ? color.green : color.red, linewidth=2)

longCondition = is_uptrend
if (longCondition and use_date)
    strategy.entry("BUY", strategy.long)

shortCondition = not is_uptrend
if (shortCondition and use_date)
    strategy.entry("SELL", strategy.short)
    
if (utp and not usl)
    strategy.exit("TP", "BUY", profit = pr)
    strategy.exit("TP", "SELL", profit = pr)
    
if (usl and not utp)
    strategy.exit("SL", "BUY", loss = sl)
    strategy.exit("SL", "SELL", loss = sl)
    
if (usl and utp)
    strategy.exit("TP/SL", "BUY", loss = sl, profit = pr)
    strategy.exit("TP/SL", "SELL", loss = sl, profit = pr)

もっと