Strategi Vektor Skala Normal dengan Pembalikan Karobein

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

img

Ringkasan

Strategi ini adalah berdasarkan kepada penunjuk Karobein Mean Reverssion dan momentum harga. Ia menggunakan penunjuk pembantu momentum harga untuk penilaian trend dan menggabungkan penunjuk Karobein Mean Reversion untuk kemasukan khusus. Strategi ini sesuai untuk perdagangan jangka menengah dan panjang.

Prinsip Strategi

Pertama, strategi ini mengira kadar perubahan harga pada tempoh yang berbeza untuk mendapatkan penunjuk momentum harga. Apabila penunjuk momentum harga melintasi di atas garis ambang dinamik, isyarat panjang dihasilkan. Apabila melintasi di bawah, isyarat pendek dihasilkan.

Kemudian ia menggabungkan penunjuk Karobein Mean Reversion untuk menentukan masa kemasukan tertentu. Penunjuk Karobein Mean Reversion dikira berdasarkan sifat pembalikan purata harga, yang dapat mencerminkan pecutan dan laluan turun naik harga.

Apabila penunjuk momentum harga menghasilkan isyarat, jika penunjuk Karobein Mean Reverson berada di kawasan arah yang sepadan, isyarat kemasukan dihasilkan.

Kelebihan

  1. Strategi ini secara komprehensif mempertimbangkan momentum harga dan faktor pembalikan purata, dengan keupayaan penilaian trend yang kuat.

  2. Penunjuk Karobein Mean Reversion dapat dengan tepat mencari titik perubahan harga dan meningkatkan ketepatan masa kemasukan.

  3. Tempoh penyelenggaraan boleh dikawal secara bebas dengan penyesuaian parameter, sesuai untuk jangka masa yang berbeza.

  4. Sempadan dinamik boleh diselaraskan dalam masa nyata untuk tindak balas penyesuaian terhadap perubahan pasaran.

Risiko

  1. Sebagai trend yang mengikuti strategi, ia cenderung terperangkap dalam trend yang terikat dengan julat.

  2. Penunjuk Karobein Mean Reverson mempunyai kelewatan tertentu, yang mungkin terlepas titik perubahan harga.

  3. Parameter tempoh penahanan harus dipantau untuk mengelakkan peningkatan kerugian daripada tempoh penahanan yang berlebihan.

  4. Sempadan dinamik harus ditetapkan dengan tepat dan tidak terlalu luas, jika tidak, peluang kemasukan mungkin terlepas.

Kaedah pengurusan risiko yang sepadan:

  1. Penunjuk penilaian trend boleh digunakan untuk meramalkan pasaran yang berbeza dan kedudukan keluar dalam masa.

  2. Memilih kelewatan yang munasabah untuk penunjuk Karobein Mean Reversion untuk mengurangkan kelewatan.

  3. Uji parameter tempoh penyimpanan yang berbeza dan pilih yang sesuai.

  4. Sesuaikan julat ambang dinamik untuk mengelakkan entri yang hilang.

Arahan Peningkatan

  1. Uji tempoh yang berbeza untuk pengiraan momentum harga untuk mengoptimumkan parameter.

  2. Tambah penunjuk turun naik untuk mengesan pasaran berkisar dan tetapkan stop loss.

  3. Mengoptimumkan parameter penunjuk Pembalikan Rata-rata Karobein untuk menjadikannya lebih sensitif.

  4. Tambah penapis tambahan seperti kelantangan untuk meningkatkan kualiti isyarat.

  5. Gunakan algoritma pembelajaran mesin untuk mengoptimumkan parameter secara dinamik.

Kesimpulan

Strategi ini menggunakan momentum harga dan faktor pembalikan purata secara komprehensif, dengan keupayaan yang kuat dalam penilaian trend dan penjanaan isyarat. Ia boleh menyesuaikan diri dengan persekitaran pasaran yang berbeza melalui penyesuaian parameter. Pengoptimuman lanjut boleh dilakukan mengenai masa masuk dan menghentikan kerugian untuk menjadikan strategi lebih mantap. Strategi ini layak penyelidikan dan penerapan lanjut.


/*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 lanjut