Skala Vektor Strategy dengan Karobein Mean Reversion

Penulis:ChaoZhang, Tanggal: 2023-11-03 16:56:13
Tag:

img

Gambaran umum

Strategi ini didasarkan pada indikator Karobein Mean Reversion dan momentum harga. Ini menggunakan indikator tambahan momentum harga untuk penilaian tren dan menggabungkan indikator Karobein Mean Reversion untuk entri spesifik. Strategi ini cocok untuk perdagangan jangka menengah dan panjang.

Prinsip Strategi

Pertama, strategi menghitung tingkat perubahan harga pada periode yang berbeda untuk mendapatkan indikator momentum harga. Ketika indikator momentum harga melintasi di atas garis ambang dinamis, sinyal panjang dihasilkan. Ketika melintasi di bawah, sinyal pendek dihasilkan.

Kemudian menggabungkan indikator Karobein Mean Reversion untuk menentukan waktu masuk tertentu. Indikator Karobein Mean Reversion dihitung berdasarkan sifat reversi rata-rata harga, yang dapat mencerminkan percepatan dan jalur fluktuasi harga. Indikator ini memiliki karakteristik sinus intrinsik yang membantu menentukan arah dan waktu tren.

Ketika indikator momentum harga menghasilkan sinyal, jika indikator Karobein Mean Reverssion berada di area arah yang sesuai, sinyal masuk dihasilkan.

Keuntungan

  1. Strategi ini secara komprehensif mempertimbangkan momentum harga dan faktor-faktor reversi rata-rata, dengan kemampuan penilaian tren yang kuat.

  2. Indikator Karobein Mean Reversion dapat secara akurat menemukan titik balik harga dan meningkatkan akurasi waktu masuk.

  3. Periode penyimpanan dapat dikontrol secara bebas dengan penyesuaian parameter, cocok untuk kerangka waktu yang berbeda.

  4. Ambang dinamis dapat disesuaikan secara real time untuk respon adaptif terhadap perubahan pasar.

Risiko

  1. Sebagai tren yang mengikuti strategi, cenderung terjebak dalam tren yang terikat rentang.

  2. Indikator Karobein Mean Reversion memiliki keterlambatan tertentu, yang mungkin melewatkan titik balik harga.

  3. Parameter periode penyimpanan harus dipantau untuk menghindari ekspansi kerugian dari periode penyimpanan yang berlebihan.

  4. Batas dinamis harus ditetapkan dengan tepat dan tidak terlalu luas, jika tidak, peluang masuk dapat dilewatkan.

Metode manajemen risiko yang sesuai:

  1. Indikator penilaian tren dapat digunakan untuk memprediksi pasar yang berkisar dan posisi keluar dalam waktu.

  2. Pilih keterlambatan yang wajar untuk indikator Karobein Mean Reversal untuk mengurangi keterlambatan.

  3. Uji parameter periode penyimpanan yang berbeda dan pilih parameter yang sesuai.

  4. Sesuaikan kisaran ambang dinamis untuk menghindari entri yang hilang.

Arah Peningkatan

  1. Uji periode yang berbeda untuk perhitungan momentum harga untuk mengoptimalkan parameter.

  2. Tambahkan indikator volatilitas untuk mendeteksi pasar berkisar dan mengatur stop loss.

  3. Mengoptimalkan parameter indikator Karobein Mean Reversion untuk membuatnya lebih sensitif.

  4. Tambahkan filter tambahan seperti volume untuk meningkatkan kualitas sinyal.

  5. Gunakan algoritma pembelajaran mesin untuk mengoptimalkan parameter secara dinamis.

Kesimpulan

Strategi ini secara komprehensif memanfaatkan momentum harga dan faktor reversi rata-rata, dengan kemampuan yang kuat dalam penilaian tren dan generasi sinyal. Ini dapat beradaptasi dengan lingkungan pasar yang berbeda melalui penyesuaian parameter. Optimasi lebih lanjut dapat dilakukan mengenai waktu masuk dan stop loss untuk membuat strategi lebih kuat. Strategi ini layak penelitian lebih lanjut dan penerapan.


/*backtest
start: 2022-10-27 00:00:00
end: 2023-11-02 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
// author: capissimo
strategy("Normalized Vector Strategy, ver.3 (sc)", precision=2, overlay=false)
// This is a scaled Normalized Vector Strategy with a Karobein Oscillator
// original: Drkhodakarami (https://www.tradingview.com/script/Fxv2xFWe-Normalized-Vector-Strategy-By-Drkhodakarami-Opensource/)

// Repainting: in general there two types of repainting:
// * when the last candle is constantly being redrawn
// * when the indicator draws a different configuration after it has been deactivated/reactivated, i.e. refreshed

// The former is a natural behaviour, which presents a constant source of frustration, 
// when a signal directly depends on the current market situation and can be overcome 
// with various indirect techniques like divergence.

// The latter suggests a flaw in the indicator design.
// Unfortunately, the Normalized Vector Strategy is repainting in the latter sense, although being
// really promising. Would be nice if our community suggests a solution to this problem ))

// This strat consistently performs with high accuracy, showing up to 96% scores
// Here are some of the best parameters:
// TF     Lookback   Performance (ca.)
// 1m     13         92%
// 3m     34         92%
// 5m     85         92%
// 15m    210        90%
// 30m    360        89%
// 1H     1440,720   94%, 87%

// The Karobein Oscillator has an intrinsic sinusoidal behaviour that helps in determining direction and timing.
// It does not repaint.
// original: alexgrover (https://www.tradingview.com/script/JiNi0f62-Karobein-Oscillator/)

scaleMinimax(X, p, min, max) => 
    hi = highest(X, p), lo = lowest(X, p)
    (max - min) * (X - lo)/(hi - lo) + min

price    = input(close,  "Price Data")
tf       = input(34,     "Timeframe", minval=1, maxval=1440)
thresh   = input(14.,    "Threshold", minval=.1, step=.1) 
div      = input(1000000,"Divisor", options=[1,10,100,1000,10000,100000,1000000,10000000,100000000])
showVol  = input(false,  "Volume")
useold   = input(true,   "Use Old System")

lime  = color.new(color.lime, 10), fuchsia = color.new(color.fuchsia, 10), 
black = color.new(color.black, 100), gray = color.new(color.gray, 50)

vol  = useold ? security(syminfo.tickerid, tostring(tf), volume, barmerge.gaps_off, barmerge.lookahead_on) 
              : security(syminfo.tickerid, tostring(tf), volume)
obv  = cum(change(price) > 0 ? vol : change(price) < 0 ? -vol : 0*vol)
prix = showVol ? obv : price
    
getdiff(prc, tf) =>
    prev  = useold ? security(syminfo.tickerid, tostring(tf), prc[1], barmerge.gaps_off, barmerge.lookahead_on) :
                     security(syminfo.tickerid, tostring(tf), prc[1])
    curr  = useold ? security(syminfo.tickerid, tostring(tf), prc, barmerge.gaps_off, barmerge.lookahead_on) : 
                     security(syminfo.tickerid, tostring(tf), prc)
    (curr/prev) - 1
    
p  = getdiff(prix, tf)
up = thresh/div, dn = -thresh/div
longCondition  = crossover(p, up)
shortCondition = crossunder(p, dn)

bg = longCondition ? lime : shortCondition ? fuchsia : black
cl = p > up ? color.green : p < dn ? color.red : color.silver

bgcolor(bg, editable=false)
plot(scaleMinimax(up, 2500, -1, 1), color=lime, editable=false, transp=0)
hline(0, linestyle=hline.style_dotted, title="base line", color=gray, editable=false)
plot(scaleMinimax(dn, 2500, -1, 1), color=fuchsia, editable=false, transp=0)
plot(scaleMinimax(p, 2500, -1, 1), color=cl, style=plot.style_histogram, transp=70, editable=false)
plot(scaleMinimax(p, 2500, -1, 1), color=cl, style=plot.style_linebr, title="prediction", transp=0, editable=false)

strategy.entry("L", true, 1, when=longCondition)
strategy.entry("S", false, 1, when=shortCondition)

alertcondition(longCondition, title='Long', message='Long Signal!')
alertcondition(shortCondition, title='Short', message='Short Signal!')

//*** Karobein Oscillator
per  = input(8, "Karobein Osc Lookback")

prix2  = ema(price, per)
a = ema(prix2 < prix2[1] ? prix2/prix2[1] : 0, per)
b = ema(prix2 > prix2[1] ? prix2/prix2[1] : 0, per)
c = (prix2/prix2[1])/(prix2/prix2[1] + b)
d = 2*((prix2/prix2[1])/(prix2/prix2[1] + c*a)) - 1

plot(scaleMinimax(d, 2500, -1, 1), color=color.orange, transp=0)


Lebih banyak