Strategi Pelacakan Tren Volatilitas

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

img

Gambaran umum

Strategi ini menggunakan indikator WaveTrend untuk menentukan tren harga dan situasi overbought/oversold. Ini menggabungkan indikator RSI untuk menyaring sinyal dan mengadopsi metode pelacakan tren untuk melakukan operasi kontra-trend pada tingkat overbought/oversold.

Logika Strategi

Strategi ini menggunakan indikator WaveTrend untuk menentukan arah tren harga. Indikator WaveTrend ditingkatkan berdasarkan indikator Rainbow. Ini menilai arah tren harga dengan menghitung perbedaan antara rata-rata bergerak Heikin-Ashi dan nilai absolut harga. Ini menghasilkan sinyal perdagangan dengan menggabungkan indikator RSI untuk menentukan situasi overbought / oversold.

Secara khusus, rumus 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 rata-rata bergerak Heikin-Ashi yang dihitung, d adalah rata-rata perbedaan antara rata-rata bergerak Heikin-Ashi dan nilai absolut harga. ci adalah rentang adaptif yang disebut, yang mencerminkan volatilitas harga. wt adalah rata-rata bergerak ci, yang menentukan arah tren harga dan merupakan indikator kunci 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 standarnya adalah 0-100. Di atas 70 adalah overbought dan di bawah 30 adalah oversold.

Dikombinasikan dengan kedua indikator ini, ketika RSI di bawah 25 dan WaveTrend di bawah -60, itu oversold untuk pergi panjang.

Analisis Keuntungan

Keuntungan dari strategi ini meliputi:

  1. Indikator WaveTrend dapat secara akurat dan dapat diandalkan menentukan arah tren harga.
  2. Filter RSI dapat menghindari perdagangan yang tidak perlu dan meningkatkan tingkat kemenangan.
  3. Metode pelacakan tren dapat memaksimalkan keuntungan dari menangkap tren harga.
  4. Ide strategi sederhana dan jelas, parameter fleksibel untuk menyesuaikan produk dan pasar yang berbeda.
  5. Mudah diterapkan dan diuji dalam perdagangan langsung, baik untuk optimasi lebih lanjut.

Analisis Risiko

Ada juga beberapa risiko:

  1. Baik WaveTrend dan RSI memiliki beberapa lag, mungkin melewatkan titik pembalikan harga.
  2. Sinyal palsu mungkin masih terjadi di pasar sampingan meskipun filter.
  3. Kurangnya metode stop loss yang efektif untuk mengendalikan kerugian tunggal.
  4. Pengaturan parameter yang wajar harus sesuai dengan karakteristik dan frekuensi perdagangan.

Solusi:

  1. Tambahkan indikator untuk optimasi kombinasi untuk meningkatkan akurasi sinyal.
  2. Tambahkan strategi stop loss untuk mengendalikan kerugian tunggal.
  3. Temukan kombinasi parameter optimal untuk menyesuaikan strategi.

Arahan Optimasi

Strategi dapat dioptimalkan dalam arah berikut:

  1. Mengubah atau menambahkan indikator penilaian untuk meningkatkan akurasi sinyal, misalnya MACD, KD dll.

  2. Mengoptimalkan pengaturan parameter untuk menyesuaikan produk yang berbeda, misalnya menyesuaikan periode lancar.

  3. Tambahkan strategi stop loss pelacakan untuk mengendalikan kerugian tunggal, misalnya persentase stop loss, trailing stop loss dll.

  4. Pertimbangkan strategi piramida yang berbeda, misalnya Martingale alih-alih kuantitas tetap.

  5. Mengoptimalkan parameter kisaran adaptif untuk meningkatkan akurasi penilaian.

Kesimpulan

Ide keseluruhan strategi ini jelas, menggunakan indikator volatilitas untuk menentukan tren harga dan menyaring kebisingan secara efektif. Ada ruang untuk optimasi dalam berbagai aspek untuk membuat strategi lebih kuat. Melalui penyesuaian parameter, dapat disesuaikan dengan produk yang berbeda dan layak untuk pengujian langsung 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 banyak