価格変動に基づくトレンドフォロー型ストップロス戦略


作成日: 2023-12-01 17:53:36 最終変更日: 2023-12-01 17:53:36
コピー: 6 クリック数: 666
1
フォロー
1619
フォロワー

価格変動に基づくトレンドフォロー型ストップロス戦略

概要

この戦略は,価格の変動性に基づくトレンド追跡ストップ・ロッド戦略である.これは,価格の変動のストップ・ラインを設定するために,平均実際の変動幅 (ATR) を利用する.ATRは,価格の変動性とリスクのレベルを反映する.価格がストップ・ラインを超えると,この戦略は,トレンドが逆転していると判断し,それに応じて開口またはストップ・ロッドの操作を行う.

戦略原則

この戦略は,まず,一定の周期における平均実際の波動幅のATRを計算する.そして,現在の価格トレンドの方向に応じて,上昇傾向の場合,ストップラインを現在の最高価格減減のn倍のATRに設定する.下降傾向の場合,ストップラインを現在の最低価格加のn倍のATRに設定する.この中のn値は,ストップラインと価格の距離を制御するためにパラメータで調整することができる.

価格が上昇傾向のストップラインを下回るか,下降傾向のストップラインを突破すると,トレンドの転換が起きたと判断する.この時,ストップをクリアし,新しいトレンドの方向に応じて新しいストップラインを設定する.

全体として,この戦略は,価格の変動を利用してストップラインを設定し,トレンドの転換を正確に判断する能力を実現しています.トレンドが変化するときに,タイムリーでストップすることは,新しいトレンドの方向を把握するのに役立ちます.

戦略的優位性

  • 価格変動の特徴を利用してトレンドを判断し,価格の転換点を正確に把握する
  • 市場逆転のリスクを減らすために,時効でポジションを停止し,切り替える
  • パラメータ調整の柔軟性により,ストップラインと価格変動の距離を制御できます.
  • 特定の品種のパラメータに応じて調整可能で,強い適応性

戦略リスク

  • 不効突破による誤判リスク. 価格が持続不能な不効突破が発生し,誤判傾向の転換を引き起こす可能性がある.
  • パラメータを極端に設定すると,損失が増加する可能性があります.例えば,n値が大きすぎるとストップラインが近すぎると,小さな振動が引き起こされる可能性があります.
  • urrenciesなどの低波動性の品種は,ストップ効果が良くないかもしれない.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)