Strategi Pemecahan Momentum dengan Henti Volatiliti

Penulis:ChaoZhang, Tarikh: 2023-11-13 17:20:51
Tag:

img

Ringkasan

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.

Logika Strategi

Strategi ini menggunakan penunjuk Volatility Stop untuk menentukan arah trend dan menjejaki stop loss.

  1. Mengira ATR (Rentang Benar Purata) harga
  2. Dapatkan barisan stop loss dengan mengalikan ATR dengan pekali stop loss
  3. Apabila harga naik, rekod harga tertinggi, baris stop loss adalah harga tertinggi tolak ATR * pekali
  4. Apabila harga turun, rekod harga terendah, baris stop loss adalah harga terendah ditambah ATR * pekali

Garis stop loss berfluktuasi ke atas dan ke bawah dengan harga, membentuk saluran dinamik.

Apabila harga menembusi garis stop loss, ia menandakan pembalikan trend.

  • Apabila harga pecah di atas garis stop loss, pergi panjang
  • Apabila harga pecah di bawah garis stop loss, pergi pendek

Selepas membuka kedudukan, strategi menyemak stop loss dengan garis:

  • Untuk panjang, stop loss adalah harga tertinggi tolak ATR * pekali
  • Ringkasnya, stop loss adalah harga terendah ditambah pekali ATR *

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.

Analisis Kelebihan

Strategi ini mempunyai kelebihan berikut:

  1. Boleh menangkap pembalikan trend dengan tepat pada masanya dan mengikuti trend
  2. Menggunakan stop loss dinamik untuk menyesuaikan kedudukan stop berdasarkan turun naik pasaran
  3. Pembaruan Stop Loss dengan trend untuk mengunci keuntungan maksimum
  4. Menunggang trend untuk mencapai keuntungan yang ketara
  5. Mengendalikan risiko dengan berkesan dan mengelakkan kerugian besar

Analisis Risiko

Terdapat juga beberapa risiko yang perlu dipertimbangkan:

  1. Stop loss boleh diaktifkan dengan kerap semasa pasaran julat
  2. Perlu untuk menetapkan stop loss pekali yang betul, terlalu kecil mungkin terlalu sensitif
  3. Bayaran dagangan boleh memakan keuntungan dengan perdagangan kerap
  4. Mungkin kehilangan beberapa keuntungan pada peringkat awal trend
  5. Risiko apabila stop loss terlalu jauh dari harga

Penyelesaian:

  1. Mengoptimumkan pekali stop loss melalui backtest untuk mencari parameter terbaik
  2. Gunakan jangka masa yang lebih lama untuk mengurangkan kekerapan perdagangan
  3. Tambah penapis untuk mengelakkan perdagangan berlebihan
  4. Membolehkan beberapa fleksibiliti dalam jarak berhenti tetapi tidak terlalu besar

Arahan pengoptimuman

Strategi ini boleh dioptimumkan lagi dalam aspek berikut:

  1. Mengoptimumkan pekali stop loss untuk mencari kombinasi parameter terbaik
  2. Tambah penapis untuk mengelakkan whipsaws dalam pasaran pelbagai
  3. Menggabungkan pelbagai jangka masa untuk pengesahan isyarat
  4. Mengoptimumkan saiz kedudukan, secara beransur-ansur meningkatkan saiz
  5. Pertimbangkan penyesuaian dinamik kerangka masa
  6. Gabungkan dengan asas saham untuk menangkap trend utama

Ringkasan

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)


Lebih lanjut