Ini adalah strategi trend-mengikuti berdasarkan penembusan dan berhenti turun naik. Strategi mengenal pasti arah trend dengan harga penembusan garis stop loss dinamik. Ia memasuki perdagangan apabila harga menembusi garis stop loss dan menggunakan garis stop loss untuk mengesan trend dan mengunci keuntungan. Strategi ini bertujuan untuk menangkap trend jangka menengah dan panjang sambil mengawal risiko dengan berhenti dinamik.
Strategi ini menggunakan penunjuk Volatility Stop untuk menentukan arah trend dan menjejaki stop loss.
Garis stop loss berfluktuasi ke atas dan ke bawah dengan harga, membentuk saluran dinamik.
Apabila harga menembusi garis stop loss, ia menandakan pembalikan trend.
Selepas membuka kedudukan, strategi menyemak stop loss dengan garis:
Apabila harga mencapai garis stop loss lagi, kedudukan akan ditutup.
Dengan cara ini, strategi boleh mengikuti trend dengan cara yang tepat pada masanya sambil mengawal risiko dengan berhenti.
Strategi ini mempunyai kelebihan berikut:
Terdapat juga beberapa risiko yang perlu dipertimbangkan:
Penyelesaian:
Strategi ini boleh dioptimumkan lagi dalam aspek berikut:
Secara keseluruhan, strategi momentum breakout ini dengan hentian turun naik adalah sistem trend yang sangat praktikal. Ia dapat menangkap peluang pembalikan trend dan mengikuti trend sambil mengawal risiko dengan berkesan dengan hentian dinamik. Dengan penyesuaian parameter yang betul, ia dapat mencapai pulangan yang baik semasa pasaran trend. Tetapi beberapa isu perlu ditangani seperti hentian yang terlalu sensitif, kekerapan perdagangan yang tinggi dll. Pengoptimuman lanjut dapat menjadikannya strategi perdagangan kuant yang cekap dan kukuh.
/*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)