Strategi Perdagangan Penembusan Julat Volatiliti

Penulis:ChaoZhang, Tarikh: 2023-09-21 20:38:29
Tag:

Ringkasan

Strategi ini menghasilkan isyarat perdagangan berdasarkan julat turun naik sejarah harga. Ia mengira perbezaan antara harga tertinggi dan terendah dalam tempoh tertentu, dan membentuk julat turun naik menggunakan purata bergerak. Isyarat perdagangan dipicu apabila harga memecahkan jalur atas atau bawah julat. Ia tergolong dalam strategi pecah trend.

Logika Strategi

Penunjuk teras adalah turun naik harga sejarah.

  1. Mengira perbezaan antara harga tertinggi dan terendah sepanjang N bar yang lalu, dipanggil HL

  2. Mengira purata harga tertinggi dan terendah di atas N bar, avg ((H, L)

  3. Volatiliti = HL / avg ((H, L)

Di mana N adalah parameter Length Volatility.

Selepas mendapatkan turun naik, rentang dikira sebagai:

Band atas = Penutupan semasa + Penutupan semasa * Volatiliti

Band bawah = Penutupan semasa - Penutupan semasa * Volatiliti

Garis-garis itu kemudiannya dihaluskan oleh WMA dengan tempoh yang ditetapkan sebagai Jarak Purata.

Apabila harga melanggar band atas, pergi panjang. Apabila harga melanggar band bawah, pergi pendek.

Isyarat keluar ditakrifkan oleh Tipe Keluar:

  1. Jika Jenis Keluar adalah Volatiliti MA, keluar apabila harga melintasi semula di bawah WMA.

  2. Jika Jenis Keluar adalah Range Crossover, keluar apabila harga melintasi kembali di bawah band.

Kelebihan

  • Volatiliti menangkap trend bergerak dengan baik
  • WMA menjadikan pita lebih stabil dan boleh dipercayai
  • Isyarat pecah menangkap trend bertukar tepat pada masanya
  • Keluar berdasarkan WMA/band mengurangkan kerugian dengan cepat
  • Banyak ruang untuk penyesuaian parameter untuk pasaran yang berbeza

Risiko

  • Penembusan mungkin whipsaw dengan harga pembalikan
  • Risiko kerugian besar pada pembalikan trend
  • WMA kadang-kadang ketinggalan dalam mengesan perubahan trend
  • Pengoptimuman parameter tidak mudah, memerlukan banyak percubaan dan kesilapan
  • Pengeluaran yang lebih besar, memerlukan pengurusan risiko yang baik

Risiko boleh dikurangkan dengan:

  • Mengoptimumkan parameter untuk jalur yang lebih boleh dipercayai
  • Menambah penunjuk lain untuk mengelakkan whipsaws
  • Saiz yang lebih kecil dan pengurusan risiko yang lebih baik
  • Mempertimbangkan kemasukan semula

Arahan pengoptimuman

Strategi ini boleh ditingkatkan dengan:

  1. Penyesuaian parameter

Uji nilai Length yang berbeza untuk mencari kombinasi yang optimum.

  1. Menambah penunjuk lain

Sebagai contoh, apabila harga pecah di atas jalur atas, periksa sama ada MACD juga melintasi emas.

  1. Lebih baik stop loss

Mengoptimumkan untuk berhenti di belakang bukannya berhenti putus jarak yang mudah.

  1. Masuk semula

Tetapkan peraturan kemasukan semula untuk menangkap trend lagi selepas berhenti.

  1. Ukuran kedudukan

Sesuaikan saiz secara dinamik berdasarkan turun naik pasaran.

Ringkasan

Strategi ini berfungsi dengan baik untuk pasaran trend secara amnya dengan menggunakan band berdasarkan turun naik untuk mengukur kekuatan trend dan WMA untuk membentuk julat perdagangan yang boleh dipercayai untuk isyarat pecah. Tetapi terdapat beberapa isu seperti pengesanan trend yang tertinggal, berhenti yang dapat diperbaiki, dll. Ujian balik dan pengoptimuman yang luas diperlukan menggunakan data sebenar untuk menyesuaikan parameter dan peraturan, mengurangkan isyarat palsu dan menjadikannya kukuh dalam keadaan pasaran yang berbeza. Juga pengurusan risiko yang ketat adalah kunci untuk keuntungan jangka panjang.


/*backtest
start: 2023-09-13 00:00:00
end: 2023-09-20 00:00:00
period: 5m
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/
// © wbburgin

//@version=5
strategy("Volatility Range Breakout Strategy [wbburgin]", shorttitle = "VRB Strategy [wbburgin]", overlay=true,
 pyramiding=20,max_bars_back=2000,initial_capital=10000)

wma(float priceType,int length,float weight) =>
    norm = 0.0
    sum = 0.0
    for i = 0 to length - 1
        norm := norm + weight
        sum := sum + priceType[i] * weight
    sum / norm

// This definition of volatility uses the high-low range divided by the average of that range.
volatility(source,length) =>
    h = ta.highest(source,length)
    l = ta.lowest(source,length)
    vx = 2 * (h - l) / (h + l)
    vx

vm1 = input.int(100,"Average Length")
volLen = input.int(100,"Volatility Length")
vsrc = input.source(close,"Volatility Source")
cross_type = input.source(close,"Exit Source")
exit_type = input.string("Volatility MA",options=["Volatility MA","Range Crossover"],title="Exit Type")

volatility = volatility(vsrc,volLen)

highband1 = close + (close * volatility)
lowband1 = close - (close * volatility)
hb1 = wma(highband1,vm1,volatility)
lb1 = wma(lowband1,vm1,volatility)
hlavg = math.avg(hb1,lb1)

upcross = ta.crossover(high,hb1)    //Crossing over the high band of historical volatility signifies a bullish breakout
dncross = ta.crossunder(low,lb1)    //Crossing under the low band of historical volatility signifies a bearish breakout

vlong = upcross
vshort = dncross
vlong_exit = switch
    exit_type == "Volatility MA" => ta.crossunder(cross_type,hlavg)
    exit_type == "Range Crossover" => ta.crossunder(cross_type,hb1)
vshort_exit = switch
    exit_type == "Volatility MA" => ta.crossover(cross_type,hlavg)
    exit_type == "Range Crossover" => ta.crossover(cross_type,lb1)

if vlong
    strategy.entry("Long",strategy.long)
if vlong_exit
    strategy.close("Long")
if vshort
    strategy.entry("Short",strategy.short)
if vshort_exit
    strategy.close("Short")

plot(hlavg,color=color.white,title="Weighted Volatility Moving Average")
t = plot(hb1,color=color.new(color.red,50),title="Volatility Reversal Band - Top")
b = plot(lb1,color=color.new(color.green,50),title="Volatility Reversal Band - Bottom")

alertcondition(vlong,"Volatility Long Entry Signal")
alertcondition(vlong_exit,"Volatility Long Exit Signal")
alertcondition(vshort,"Volatility Short Entry Signal")
alertcondition(vshort_exit,"Volatility Short Exit Signal")

fill(t,b,color=color.new(color.aqua,90))

Lebih lanjut