Sumber daya yang dimuat... Pemuatan...

VAWSI dan Strategi Pembalikan Persistensi Tren dengan Sistem Analisis Multi-Indikator Kalkulasi Panjang Dinamis

Penulis:ChaoZhang, Tanggal: 2024-06-21 15:36:43
Tag:VAWSIATRRSIWMASMARMA

sumber - sumber sebelumnya, kemudian mengambil nilai absolut dari perubahannya dan menormalkannya dengan sumber.

  1. Perhitungan Panjang Dinamis: Menggunakan metode perhitungan panjang dinamis BlackCat1402 untuk menyesuaikan parameter panjang indikator berdasarkan kondisi pasar.

  2. Analisis Komposit: Menggabungkan pembacaan dari VAWSI, Persistensi Tren, dan ATR untuk menghasilkan indikator komposit. Nilai akhir yang lebih rendah menunjukkan pembalikan yang akan datang, sementara nilai yang lebih tinggi menunjukkan pasar yang tidak stabil atau bergolak.

  3. Dinamis Stop-Loss/Take-Profit: Menghitung tingkat stop-loss dan take-profit dinamis berdasarkan indikator komposit dan arah tren saat ini.

  4. Sinyal Perdagangan: Mengkonfirmasi penyeberangan dan menghasilkan sinyal perdagangan ketika harga sepenuhnya melintasi garis ambang yang dihitung.

Keuntungan Strategi

  1. Analisis Multidimensional: Dengan menggabungkan beberapa indikator, strategi dapat menganalisis pasar dari sudut yang berbeda, meningkatkan akurasi keputusan.

  2. Adaptabilitas: Perhitungan panjang dinamis memungkinkan strategi untuk beradaptasi dengan kondisi pasar yang berbeda, meningkatkan fleksibilitasnya.

  3. Manajemen Risiko: Pengaturan stop-loss dan take-profit yang dinamis membantu mengendalikan risiko dengan lebih baik dan beradaptasi dengan perubahan pasar.

  4. Indikator Asli: Indikator VAWSI dan Trend Persistence memberikan wawasan pasar yang unik yang mungkin menangkap sinyal yang diabaikan oleh indikator tradisional.

  5. Anti-Repainting: Penggunaan barstate.isconfirmed memastikan sinyal tidak mengecat ulang, meningkatkan akurasi backtesting.

  6. Kemampuan penyesuaian: Berbagai parameter yang dapat disesuaikan memungkinkan strategi untuk disesuaikan dengan instrumen perdagangan dan kerangka waktu yang berbeda.

Risiko Strategi

  1. Over-optimization: Banyaknya parameter dapat menyebabkan over-optimization, berpotensi berkinerja buruk dalam perdagangan langsung.

  2. Kemampuan adaptasi pasar: Meskipun berkinerja baik di pasar tertentu, mungkin tidak cocok untuk semua kondisi pasar, terutama di pasar dengan volatilitas rendah.

  3. Kompleksitas: Kompleksitas strategi dapat membuatnya sulit dipahami dan dipelihara, meningkatkan risiko kesalahan operasional.

  4. Komputasi Intensif: Beberapa indikator kustom dan perhitungan dinamis dapat menghasilkan beban komputasi yang tinggi, mempengaruhi kecepatan eksekusi.

  5. Keandalan pada Data Sejarah: Strategi menggunakan sejumlah besar data sejarah untuk perhitungan, yang dapat menyebabkan keterlambatan dalam beberapa situasi.

Arahan Optimasi

  1. Optimasi Parameter: Gunakan algoritma pembelajaran mesin untuk mengoptimalkan berbagai parameter berat dan panjang untuk meningkatkan kinerja strategi di bawah kondisi pasar yang berbeda.

  2. Pengakuan keadaan pasar: Tambahkan modul pengakuan keadaan pasar untuk menyesuaikan parameter strategi secara otomatis di lingkungan pasar yang berbeda.

  3. Penyaringan sinyal: Memperkenalkan mekanisme penyaringan tambahan, seperti ambang kekuatan tren, untuk mengurangi sinyal palsu.

  4. Analisis Volume: Meningkatkan analisis volume, mungkin memperkenalkan pengenalan pola volume untuk meningkatkan keandalan sinyal.

  5. Analisis Multi-Timeframe: Mengintegrasikan sinyal dari beberapa jangka waktu untuk meningkatkan ketahanan keputusan perdagangan.

  6. Optimasi Manajemen Risiko: Mengimplementasikan strategi manajemen risiko yang lebih canggih, seperti ukuran posisi dinamis dan stop-loss multi-level.

  7. Efisiensi komputasi: Optimalkan kode untuk meningkatkan efisiensi perhitungan, terutama saat memproses sejumlah besar data historis.

Kesimpulan

VAWSI dan Strategi Pembalikan Persistensi Tren adalah sistem perdagangan yang kompleks dan komprehensif yang menggabungkan beberapa indikator inovatif dan penyesuaian parameter dinamis. Kekuatannya terletak pada analisis pasar multi-dimensi dan kemampuan beradaptasi, yang memungkinkannya untuk mencari peluang pembalikan potensial dalam berbagai kondisi pasar. Namun, kompleksitas strategi juga membawa tantangan dalam hal over-optimasi dan kemampuan beradaptasi.

Melalui optimasi lebih lanjut, terutama dalam penyesuaian parameter, pengenalan keadaan pasar, dan manajemen risiko, strategi ini memiliki potensi untuk menjadi alat perdagangan yang kuat. Namun, pengguna harus mencatat bahwa tidak ada strategi yang sempurna, dan pemantauan dan penyesuaian terus-menerus diperlukan. Dalam penerapan praktis, disarankan untuk melakukan pengujian menyeluruh pada akun demo dan menggabungkan strategi ini dengan alat analisis dan pengetahuan pasar lainnya untuk membuat keputusan perdagangan.


/*backtest
start: 2024-05-21 00:00:00
end: 2024-06-20 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("VAWSI and Trend Persistance Reversal", overlay=true, max_bars_back = 4999, process_orders_on_close = true)


//INPUTS
sltp = input.float(title = "Minimum SL/TP", defval = 5.0)
rsi_weight = input.float(title = "Wawsi weight", defval = 100.0)
half_weight= input.float(title = "Trend Persistence Weight", defval = 79.0)
atr_weight = input.float(title = "ATR Weight", defval = 20.0)
com_mult = input.float(title = "Combination Mult", defval = 1, step = .001)
smoothing = input.int(title = "Trend Persistence smooth length", defval = 3)
CycPart = input.float(1.1, step = .001, title = "Length Cycle Decimal")
src = close
hclose = request.security(ticker.heikinashi(syminfo.tickerid), timeframe.period, src)

//BlackCat1402's Dynamic Length Calculation
EhlersHoDyDC(Price, CycPart) =>
    // Vars: 
    Smooth = 0.00
    Detrender = 0.00
    I1 = 0.00
    Q1 = 0.00
    jI = 0.00
    jQ = 0.00
    I2 = 0.00
    Q2 = 0.00
    Re = 0.00
    Im = 0.00
    Period = 0.00
    SmoothPeriod = 0.00
    pi = 2 * math.asin(1)
    DomCycle = 0.0

    //Hilbert Transform
    Smooth := bar_index > 5 ? (4 * Price + 3 * nz(Price[1]) + 2 * nz(Price[2]) + nz(Price[3])) / 10 : Smooth
    Detrender := bar_index > 5 ? (.0962 * Smooth + .5769 * nz(Smooth[2]) - .5769 * nz(Smooth[4]) - .0962 * nz(Smooth[6])) * (.075 * nz(Period[1]) + .54) : Detrender
    //Compute InPhase and Quadrature components
    Q1 := bar_index > 5 ? (.0962 * Detrender + .5769 * nz(Detrender[2]) - .5769 * nz(Detrender[4]) - .0962 * nz(Detrender[6])) * (.075 * nz(Period[1]) + .54) : Q1
    I1 := bar_index > 5 ? nz(Detrender[3]) : I1

    //Advance the phase of I1 and Q1 by 90 degrees
    jI := (.0962 * I1 + .5769 * nz(I1[2]) - .5769 * nz(I1[4]) - .0962 * nz(I1[6])) * (.075 * nz(Period[1]) + .54)
    jQ := (.0962 * Q1 + .5769 * nz(Q1[2]) - .5769 * nz(Q1[4]) - .0962 * nz(Q1[6])) * (.075 * nz(Period[1]) + .54)

    //Phasor addition for 3 bar averaging
    I2 := I1 - jQ
    Q2 := Q1 + jI

    //Smooth the I and Q components before applying the discriminator
    I2 := .2 * I2 + .8 * nz(I2[1])
    Q2 := .2 * Q2 + .8 * nz(Q2[1])

    //Homodyne Discriminator
    Re := I2 * nz(I2[1]) + Q2 * nz(Q2[1])
    Im := I2 * nz(Q2[1]) - Q2 * nz(I2[1])
    Re := .2 * Re + .8 * nz(Re[1])
    Im := .2 * Im + .8 * nz(Im[1])

    Period := Im != 0 and Re != 0 ? 2 * pi / math.atan(Im / Re) : Period
    Period := Period > 1.5 * nz(Period[1]) ? 1.5 * nz(Period[1]) : Period
    Period := Period < .67 * nz(Period[1]) ? .67 * nz(Period[1]) : Period
    //Limit Period to be within the bounds of 6 bar and 50 bar cycles
    Period := Period < 6 ? 6 : Period
    Period := Period > 50 ? 50 : Period
    Period := .2 * Period + .8 * nz(Period[1])
    SmoothPeriod := .33 * Period + .67 * nz(SmoothPeriod[1])
    //it can add filter to Period here
    DomCycle := math.ceil(CycPart * SmoothPeriod) > 34 ? 34 : math.ceil(CycPart * SmoothPeriod) < 1 ? 1 : math.ceil(CycPart * SmoothPeriod)
    DomCycle

wma(src, length) =>
    wma = 0.0
    sum = 0.0
    norm = length * (length + 1) / 2
    for i = 0 to length - 1
        sum := sum + src[i] * (length - i)
    wma := sum / norm


length = math.round(math.ceil(EhlersHoDyDC(hclose,CycPart)))

// Traditional Function initialization
highest_custom(src, length) =>
    x = src
    for i = 0 to math.min(length, 4999)
        if src[i] > x
            x := src[i]
    x
lowest_custom(src, length) => 
    x = src
    for i = 0 to math.min(length, 4999)
        if src[i] < x
            x := src[i]
    x

rma(src, len) =>
    sum = 0.0
    for i = 0 to len - 1
        math.min(1, len)
        sum += src[i]
    rma = sum / len
    rma := nz(rma[1]) * (len - 1) / len + src / len
    
sma(src, length) =>
    math.sum(src, length) / length

hln(src, length) =>
    TR = math.max(math.abs(src - src[1]), high - low)
    TR := src / math.abs(ta.change(rma(TR, length)))
    TR := (1 / TR) * 100

vawma(src, length) =>
    atr = ta.atr(1)
    aavg = sma(atr, length)
    vavg = sma(volume, length)
    weighted_sum = 0.0
    sum_weights = 0.0
    weighted = 0.0
    for i = 0 to length
        weight = ((volume[i] / vavg + (atr[i]) / aavg) / 2)
        weighted_sum += src[i] * weight
        sum_weights += weight
    a = (weighted_sum / sum_weights)

vawsi(src, len) =>
    rmaUp = vawma(math.max(ta.change(src), 0), len)
    rmaDown = vawma(-math.min(ta.change(src), 0), len)
    rsi = 100 - (100 / (1 + rmaUp / rmaDown))

trendPersistence(src, length, smoothing) =>
    trendu = math.abs(src - highest_custom(src, length))
    trendd = math.abs(src - lowest_custom(src, length))
    trendu := wma(trendu, smoothing)
    trendd := wma(trendd, smoothing)
    trendu := ta.change(ta.cum(trendu))
    trendd := ta.change(ta.cum(trendd))
    trend = wma(math.max(trendu, trendd), smoothing)
    rmaUp = rma(math.max(ta.change(trend), 0), length)
    rmaDown = rma(-math.min(ta.change(trend), 0), length)
    rsi = 100 - (100 / (1 + rmaUp / rmaDown))

//Strategy Calculations
sl = ((100 - sltp) / 100) * close
tp = ((100 + sltp) / 100) * close

var bool crossup = na
var bool crossdown = na
var float dir = na
var float BearGuy = 0

BullGuy = ta.barssince(crossup or crossdown)
if na(BullGuy)
    BearGuy += 1
else
    BearGuy := math.min(BullGuy, 4999)


rsiw = rsi_weight / 100
cew = half_weight / 100
atrw = atr_weight / 100

atr = hln(hclose, length) * atrw
ce = 1 / trendPersistence(hclose, length, smoothing)
com = 1 / math.max(math.abs(vawsi(hclose, length) - 50) * 2, 20)

comfin = (((com * rsiw) + (ce * cew) - atr)) * com_mult

lower = highest_custom(math.min((math.max(highest_custom(src, BearGuy) * (1 - comfin), sl)), src[1]), BearGuy)
upper = lowest_custom(math.max((math.min(lowest_custom(src, BearGuy) * (1 + comfin), tp)), src[1]), BearGuy)

var float thresh = na

if na(thresh)
    thresh := lower
if na(dir)
    dir := 1
if crossdown
    dir := -1
if crossup
    dir := 1
if dir == 1
    thresh := lower
if dir == -1
    thresh := upper

crossup := ta.crossover(hclose, thresh) and barstate.isconfirmed
crossdown := ta.crossunder(hclose, thresh) and barstate.isconfirmed

//STRATEGY
if crossup
    strategy.entry("long", strategy.long)
if crossdown
    strategy.entry("Short", strategy.short)

//PLOTTING
col = hclose > thresh ? color.lime : color.red
plot(thresh, linewidth = 2, color = color.new(col[1], 0))



Berkaitan

Lebih banyak