
この戦略は,突破と動的ストップダウンの指標に基づいて設計された中長線トレンド追跡戦略である. この戦略は,価格がダイナミックストップダウンを突破してトレンドの方向性を判断し,価格がストップダウンを突破したときにフィールドに入り,その後ストップダウンを使用してトレンドを追跡し,利益をロックします. この戦略は,中長線トレンドを捉え,同時にダイナミックストップダウンを使用してリスクを制御することを目的としています.
この戦略は,動的ストップ指標であるVolatility Stopを使用してトレンドの方向を判断し,ストップを追跡する.Volatility Stopは,価格の変動範囲に応じて動的ストップラインを計算する.具体的には,次の計算方法があります.
ストップラインは,価格の変動に合わせて上下を振動し,ダイナミックな通路を形成します.
ストップ・ローンを突破すると,トレンドが逆転し,ストラテジーはポジションを開きます.
ストップラインは,ポジションの開始後,ストップを追跡するために使用されます.
ストップラインに再び触れたら,ストップオフが実行されます.
戦略は順調に進められ,トレンドの逆転を把握し,リスクの管理に ストップ・ロスを利用できます.
この戦略の利点は以下の通りです.
この戦略にはいくつかのリスクがあります.
対策として
この戦略は,以下の点でさらに最適化できます.
この順勢突破 - 動的ストップ戦略は,全体的に非常に実用的なトレンド追跡戦略である.それは,トレンド反転の機会を掴み,順位を左右し,同時に動的ストップを利用して効率的にリスクを制御することができる.パラメータを最適化すれば,トレンドの状況でよりよい利益を得ることができる.しかし,この戦略は,ストップが過度に敏感である,取引頻度が過度に高いなどのいくつかの問題にも注意する必要がある.さらに最適化すれば,この戦略は,高効率の安定した定量化取引システムになることができる.
/*backtest
start: 2023-11-11 00:00:00
end: 2023-11-12 00:00:00
period: 3m
basePeriod: 1m
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/
//@version=4
strategy(shorttitle='Volatility Stop Strategy',title='Volatility Stop Strategy (by Coinrule)', overlay=true, initial_capital = 100, process_orders_on_close=true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, commission_type=strategy.commission.percent, commission_value=0.1)
// Works better on 3h, 1h, 2h, 4h
// Best time frame 2H
//Backtest dates
fromMonth = input(defval = 1, title = "From Month", type = input.integer, minval = 1, maxval = 12)
fromDay = input(defval = 1, title = "From Day", type = input.integer, minval = 1, maxval = 31)
fromYear = input(defval = 2021, title = "From Year", type = input.integer, minval = 1970)
thruMonth = input(defval = 1, title = "Thru Month", type = input.integer, minval = 1, maxval = 12)
thruDay = input(defval = 1, title = "Thru Day", type = input.integer, minval = 1, maxval = 31)
thruYear = input(defval = 2112, title = "Thru Year", type = input.integer, minval = 1970)
showDate = input(defval = true, title = "Show Date Range", type = input.bool)
start = timestamp(fromYear, fromMonth, fromDay, 00, 00) // backtest start window
finish = timestamp(thruYear, thruMonth, thruDay, 23, 59) // backtest finish window
window() => time >= start and time <= finish ? true : false // create function "within window of time"
length = input(20, "Length", minval = 2)
src = input(close, "Source")
factor = input(3.0, "vStop Multiplier", minval = 0.25, step = 0.25)
volStop(src, atrlen, atrfactor) =>
var max = src
var min = src
var uptrend = true
var stop = 0.0
atrM = nz(atr(atrlen) * atrfactor, tr)
max := max(max, src)
min := min(min, src)
stop := nz(uptrend ? max(stop, max - atrM) : min(stop, min + atrM), src)
uptrend := src - stop >= 0.0
if uptrend != nz(uptrend[1], true)
max := src
min := src
stop := uptrend ? max - atrM : min + atrM
[stop, uptrend]
[vStop, uptrend] = volStop(src, length, factor)
//Entry
strategy.entry(id="long", long = true, when = crossover(close, vStop) and window())
//Exit
strategy.close("long", when = crossunder(close, vStop))
plot(vStop,"Vstop", color.black, linewidth=2)