この戦略は,ブレイクアウトと波動性ストップに基づいたトレンドフォロー戦略である.この戦略は,ダイナミックストップ損失ラインの価格ブレイクアウトによってトレンド方向を特定する.価格はストップ損失ラインに浸透すると取引に入り,ストップ損失ラインを使用してトレンドを追跡し,利益をロックする.この戦略は,ダイナミックストップでリスクを制御しながら中長期トレンドを把握することを目的としている.
この戦略は,トレンド方向とストップ損失を追跡するために波動性ストップ指標を使用する.波動性ストップは,価格変動範囲に基づいて動的ストップ損失ラインを計算する.具体的なステップは:
ストップ・ロスは価格とともに上下波動し ダイナミックなチャネルを形成します
ストップ・ロスの線に突入すると,トレンド逆転が示されます. 戦略はポジションを開きます:
ストップ・ロスは次の線で実行されます.
価格がストップ・ロスのラインに再び到達すると,ポジションは閉じる.
ストップでリスクを制御しながら 戦略がタイミングで動向を追跡できるのです
この戦略には以下の利点があります.
考慮すべきリスクもいくつかあります.
解決策:
この戦略は,次の側面においてさらに最適化することができる.
波動性ストップのモメンタムブレイクアウト戦略は,非常に実践的なトレンドフォローシステムです.動的ストップでリスクを効果的に制御しながらトレンド逆転の機会を把握し,トレンドをフォローすることができます.適切なパラメータチューニングにより,トレンド市場中に良いリターンを得ることができます.しかし,過度に敏感なストップ,高い取引頻度など,いくつかの問題に対処する必要があります.さらなる最適化は,効率的で堅牢な量子取引戦略に変えることができます.
/*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)