Strategi Pengesanan Trend Volatiliti

Penulis:ChaoZhang, Tarikh: 2024-02-18 10:07:29
Tag:

img

Ringkasan

Strategi ini menggunakan penunjuk WaveTrend untuk menentukan trend harga dan situasi overbought/oversold. Ia menggabungkan penunjuk RSI untuk menapis isyarat dan menggunakan kaedah penjejakan trend untuk membuat operasi kontra-trend pada tahap overbought/oversold.

Logika Strategi

Strategi ini menggunakan penunjuk WaveTrend untuk menentukan arah trend harga. Penunjuk WaveTrend dipertingkatkan berdasarkan penunjuk Pelangi. Ia menilai arah trend harga dengan mengira perbezaan antara purata bergerak Heikin-Ashi dan nilai mutlak harga. Ia menghasilkan isyarat perdagangan dengan menggabungkan penunjuk RSI untuk menentukan situasi overbought / oversold.

Secara khusus, formula WaveTrend dalam strategi adalah:

esa = ema(hlc3, 10)
d = ema(abs(hlc3 - esa), 10) 
ci = (hlc3 - esa) / (0.015 * d)
wt = ema(ci, 21)

Di mana esa adalah purata bergerak Heikin-Ashi yang dikira, d adalah purata perbezaan antara purata bergerak Heikin-Ashi dan nilai mutlak harga. ci adalah julat adaptif yang disebut, yang mencerminkan turun naik harga. wt adalah purata bergerak ci, yang menentukan arah trend harga dan merupakan penunjuk utama untuk panjang dan pendek.

Indikator RSI digunakan untuk menentukan situasi overbought/oversold.

rsiup = rma(max(change(close), 0), 14)
rsidown = rma(-min(change(close), 0), 14)
rsi = rsidown == 0 ? 100 : rsiup == 0 ? 0 : 100 - (100 / (1 + rsiup / rsidown)) 

Nilai standardnya adalah 0-100. Di atas 70 adalah overbought dan di bawah 30 adalah oversold.

Digabungkan dengan kedua-dua penunjuk ini, apabila RSI di bawah 25 dan WaveTrend di bawah -60, ia terlalu dijual untuk pergi panjang.

Analisis Kelebihan

Kelebihan strategi ini termasuk:

  1. Indikator WaveTrend dapat menentukan arah trend harga dengan tepat dan boleh dipercayai.
  2. Penapis RSI dapat mengelakkan perdagangan yang tidak perlu dan meningkatkan kadar kemenangan.
  3. Kaedah pengesanan trend boleh memaksimumkan keuntungan daripada menangkap trend harga.
  4. Idea strategi adalah mudah dan jelas, parameter fleksibel untuk menyesuaikan diri dengan produk dan pasaran yang berbeza.
  5. Mudah dilaksanakan dan diuji dalam perdagangan langsung, baik untuk pengoptimuman lanjut.

Analisis Risiko

Terdapat juga beberapa risiko:

  1. Kedua-dua WaveTrend dan RSI mempunyai beberapa lag, mungkin terlepas titik pembalikan harga.
  2. Isyarat palsu mungkin masih berlaku di pasaran sampingan walaupun penapis.
  3. Kekurangan kaedah stop loss yang berkesan untuk mengawal kerugian tunggal.
  4. Penyesuaian parameter yang munasabah perlu sesuai dengan ciri dan kekerapan perdagangan.

Penyelesaian:

  1. Tambah penunjuk untuk pengoptimuman gabungan untuk meningkatkan ketepatan isyarat.
  2. Tambah strategi stop loss untuk mengawal kerugian tunggal.
  3. Cari kombinasi parameter yang optimum untuk menyesuaikan strategi.

Arahan pengoptimuman

Strategi ini boleh dioptimumkan ke arah berikut:

  1. Mengubah atau menambah penunjuk penilaian untuk meningkatkan ketepatan isyarat, contohnya MACD, KD dll.

  2. Mengoptimumkan tetapan parameter untuk menyesuaikan produk yang berbeza, contohnya menyesuaikan tempoh lancar.

  3. Tambah strategi stop loss pengesanan untuk mengawal kerugian tunggal, contohnya peratusan stop loss, trailing stop loss dll.

  4. Pertimbangkan strategi piramid yang berbeza, contohnya Martingale bukannya kuantiti tetap.

  5. Mengoptimumkan parameter julat penyesuaian untuk meningkatkan ketepatan penilaian.

Kesimpulan

Idea keseluruhan strategi ini jelas, menggunakan penunjuk turun naik untuk menentukan trend harga dan menapis bunyi bising dengan berkesan. Terdapat ruang untuk pengoptimuman dalam pelbagai aspek untuk menjadikan strategi lebih kukuh. Melalui penyesuaian parameter, ia boleh disesuaikan dengan produk yang berbeza dan bernilai ujian langsung yang lebih lanjut.


/*backtest
start: 2024-01-01 00:00:00
end: 2024-01-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Noro
//2018

//@version=2
strategy(title = "Noro's WaveTrender Strategy v1.0", shorttitle = "WaveTrender str 1.0", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 10)

//Settings
needlong = input(true, defval = true, title = "Long")
needshort = input(true, defval = true, title = "Short")
usemar = input(false, defval = false, title = "Use Martingale")
capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Capital, %")
showarr = input(true, defval = true, title = "Show Arrows")
fromyear = input(2018, defval = 2018, minval = 1900, maxval = 2100, title = "From Year")
toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year")
frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month")
tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month")
fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From day")
today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day")

//RSI
rsiup = rma(max(change(close), 0), 14)
rsidown = rma(-min(change(close), 0), 14)
rsi = rsidown == 0 ? 100 : rsiup == 0 ? 0 : 100 - (100 / (1 + rsiup / rsidown))

//WaveTrend
esa = ema(hlc3, 10)
d = ema(abs(hlc3 - esa), 10)
ci = (hlc3 - esa) / (0.015 * d)
wt = ema(ci, 21)

//Body
body = abs(close - open)
abody = sma(body, 10)

//Signals
bar = close > open ? 1 : close < open ? -1 : 0
overs = rsi < 25 and wt < -60
overb = rsi > 75 and wt > 60
up1 = (strategy.position_size == 0 or close < strategy.position_avg_price) and overs and bar == -1
dn1 = (strategy.position_size == 0 or close > strategy.position_avg_price) and overb and bar == 1
exit = (strategy.position_size > 0 and overs == false) or (strategy.position_size < 0 and overb == false)

//Arrows
col = exit ? black : up1 or dn1 ? blue : na
needup = up1
needdn = dn1
needexitup = exit and strategy.position_size < 0
needexitdn = exit and strategy.position_size > 0
plotarrow(showarr and needup ? 1 : na, colorup = blue, colordown = blue, transp = 0)
plotarrow(showarr and needdn ? -1 : na, colorup = blue, colordown = blue, transp = 0)
plotarrow(showarr and needexitup ? 1 : na, colorup = black, colordown = black, transp = 0)
plotarrow(showarr and needexitdn ? -1 : na, colorup = black, colordown = black, transp = 0)

//Trading
profit = exit ? ((strategy.position_size > 0 and close > strategy.position_avg_price) or (strategy.position_size < 0 and close < strategy.position_avg_price)) ? 1 : -1 : profit[1]
mult = usemar ? exit ? profit == -1 ? mult[1] * 2 : 1 : mult[1] : 1
lot = strategy.position_size == 0 ? strategy.equity / close * capital / 100 * mult : lot[1]

if up1
    if strategy.position_size < 0
        strategy.close_all()
        
    strategy.entry("Long", strategy.long, needlong == false ? 0 : lot)

if dn1
    if strategy.position_size > 0
        strategy.close_all()
        
    strategy.entry("Short", strategy.short, needshort == false ? 0 : lot)
    
if exit
    strategy.close_all()

Lebih lanjut