Strategi Dagangan Vektor Ternormal Skala dengan Pengoptimuman Fungsi Pengaktifan


Tarikh penciptaan: 2024-01-22 09:02:30 Akhirnya diubah suai: 2024-01-22 09:02:30
Salin: 0 Bilangan klik: 578
1
fokus pada
1617
Pengikut

Strategi Dagangan Vektor Ternormal Skala dengan Pengoptimuman Fungsi Pengaktifan

Gambaran keseluruhan

Strategi ini merupakan penambahbaikan kepada strategi vektor penggabungan skala drkhodakarami, terutamanya dengan menambah fungsi pengaktifan untuk meningkatkan prestasi strategi. Strategi menggunakan perbezaan sumbu masa untuk mengira kadar perubahan pasaran, dan melakukan lebih banyak isyarat kosong melalui penilaian nilai rendah.

Prinsip Strategi

  1. Hitung peratusan perubahan harga tutup pada garis masa yang ditetapkan
  2. Menghantar x ke fungsi pengaktifan untuk mendapatkan urutan p yang telah diproses
  3. Tetapkan nilai had positif-negatif untuk th, apabila p lebih banyak di atas th dan kosong di bawah th
  4. Matikan gambar semula untuk mengelakkan isyarat palsu

Analisis kelebihan

  1. Memperkenalkan fungsi pengaktifan, boleh memfilterkan bunyi bising, meningkatkan kualiti keputusan isyarat
  2. Logik baru untuk membuka dan melonggarkan simpanan yang boleh diperdagangkan secara automatik
  3. Menambah ruang kustomisasi parameter untuk lebih banyak pasaran
  4. Reka bentuk visual yang sangat baik, mencerminkan isyarat perdagangan secara intuitif

Analisis risiko

  1. Tetapan nilai terhad yang tidak betul boleh menyebabkan peluang perdagangan yang hilang
  2. Fungsi pengaktifan yang dipilih dengan tidak betul mungkin menapis maklumat pasaran
  3. Ujian untuk masalah distorsi isyarat yang disebabkan oleh pemetaan semula

Penyelesaian:

  1. Menyesuaikan parameter nilai rendah untuk mencari nilai optimum
  2. Cuba fungsi pengaktifan yang berbeza untuk mencari yang paling sesuai.
  3. Tambah logik pengesanan pemetaan semula untuk mengesahkan kebenarannya

Arah pengoptimuman

  1. Menambah tetapan had penyesuaian
  2. Optimumkan parameter fungsi pengaktifan
  3. Menambah logik stop-loss automatik
  4. Gabungan lebih banyak faktor penapisan isyarat

ringkaskan

Strategi ini berdasarkan drkhodakarami, memperkenalkan fungsi pengaktifan untuk meningkatkan prestasi, memperluaskan ruang pengoptimuman parameter, dan dapat menyesuaikan diri dengan perubahan pasaran. Pada masa yang sama, reka bentuk visual yang sangat baik, mencerminkan peluang perdagangan secara intuitif. Kemudian, fungsi pengaktifan dapat terus dioptimumkan dengan tetapan nilai ambang, dan menambah logik stop loss dan penapisan isyarat yang lebih banyak, untuk mendapatkan kesan strategi yang lebih baik.

Kod sumber strategi
/*backtest
start: 2023-01-15 00:00:00
end: 2024-01-21 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
// author: capissimo
strategy("Scaled Normalized Vector Strategy, ver.4", precision=2, overlay=false)
// This is a modification of my Scaled Normalized Vector Strategy  
// original: Drkhodakarami (https://www.tradingview.com/script/Fxv2xFWe-Normalized-Vector-Strategy-By-Drkhodakarami-Opensource/)

price    = input(close,  "Price Data")
tf       = input(18,     "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])
mmx      = input(233,    "Minimax Lookback", options=[1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584])
showVol  = input(false,  "Volume")
useold   = input(true,   "Use Old System")
method   = input("Swish", "Activation", options=["Step", "LReLU", "Swish", "None"])

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

getdiff(prc, tf) =>
    prev  = scaleMinimax((useold ? security(syminfo.tickerid, tostring(tf), prc[1], barmerge.gaps_off, barmerge.lookahead_on) 
                                 : security(syminfo.tickerid, tostring(tf), prc[1])), tf, 0, 1)
    curr  = scaleMinimax((useold ? security(syminfo.tickerid, tostring(tf), hlc3, barmerge.gaps_off, barmerge.lookahead_on)  
                                 : security(syminfo.tickerid, tostring(tf), hlc3)), tf, 0, 1)
    (curr/prev) - 1

relu(x) => max(x, 0)
lrelu(x, alpha) => relu(x) - alpha * relu(-x)
step(x) => x >= 0 ? 1 : -1
log2(x) => log(x) / log(2)
sigmoid(x) => 1 / (1 + exp(-x))
swish(x) => x * sigmoid(x)

f(m) => method==m

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
x    = getdiff(prix, tf)
p    = f("Swish") ? swish(x) : f("Step") ? step(x) : f("LReLU") ? lrelu(x, .8) : x
th   = thresh/div
long = crossover(p, th)
short= crossunder(p, -th)

lime  = color.new(color.lime, 10), fuchsia = color.new(color.fuchsia, 10), 
black = color.new(color.black, 100), gray = color.new(color.gray, 50)
bg    = long ? lime : short ? fuchsia : black
cl    = p > th ? color.green : p < -th ? color.red : color.silver

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

strategy.entry("L", true, 1, when=long)
strategy.entry("S", false, 1, when=short)

alertcondition(long, title='Long', message='Long Signal!')
alertcondition(short, 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, mmx, -1, 1), color=color.orange, transp=0)