Sistem analisis komprehensif multi-indikator yang menggabungkan VAWSI dan strategi pembalikan persistensi tren dengan perhitungan panjang dinamis

VAWSI ATR RSI WMA SMA RMA
Tanggal Pembuatan: 2024-06-21 15:36:43 Akhirnya memodifikasi: 2024-06-21 15:36:43
menyalin: 4 Jumlah klik: 567
1
fokus pada
1617
Pengikut

Sistem analisis komprehensif multi-indikator yang menggabungkan VAWSI dan strategi pembalikan persistensi tren dengan perhitungan panjang dinamis

Ringkasan

Strategi ini adalah sistem analisis komprehensif yang menggabungkan beberapa indikator, terutama berdasarkan VAWSI (volume dan ATR indeks intensitas berat), indikator kontinuitas tren dan ATR revisi untuk menilai tren pasar dan kemungkinan titik balik. Strategi ini juga memperkenalkan perhitungan panjang dinamika untuk menyesuaikan dengan kondisi pasar yang berbeda.

Inti dari strategi ini adalah mengukur intensitas, durasi, dan volatilitas tren pasar melalui beberapa indikator khusus untuk menemukan waktu perdagangan yang optimal. Ini terutama berlaku untuk pasar dengan tren yang jelas, tetapi juga mencakup mekanisme adaptasi untuk menangani berbagai kondisi pasar.

Prinsip Strategi

  1. Indikator VAWSI: Ini adalah indikator asli, mirip dengan RSI, tetapi menggunakan VAWMA (volume dan ATR weighted moving average) sebagai pengganti RMA.

  2. Indikator Keberlanjutan Tren: Indikator asli lainnya yang digunakan untuk mengukur durasi tren. Indikator ini menghitung deviasi maksimum dari data sumber dengan titik tertinggi / terendah dalam panjang yang ditentukan, kemudian mengakumulasikan deviasi ini dan membuat indeks kekuatan.

  3. Modifikasi ATR: Mengambil nilai maksimum dari sumber sebelumnya, lalu mengambil nilai mutlak dari perubahannya dan menggunakan data sumber untuk menyatukan.

  4. Penghitungan panjang dinamis: Menggunakan metode penghitungan panjang dinamis BlackCat1402, parameter panjang indikator disesuaikan dengan kondisi pasar.

  5. Analisis komposit: Menggabungkan bacaan VAWSI, trend continuity, dan ATR untuk menghasilkan indikator komposit. Nilai akhir yang lebih rendah berarti pembalikan yang akan terjadi, dan nilai yang lebih tinggi berarti pasar tidak stabil atau bergoyang.

  6. Stop loss / profit dinamis: Stop loss dan profit dinamis yang dihitung berdasarkan indikator komposit dan arah tren saat ini.

  7. Sinyal perdagangan: Ketika harga benar-benar melintasi garis terendah yang dihitung, sistem akan mengkonfirmasi persimpangan dan menghasilkan sinyal perdagangan.

Keunggulan Strategis

  1. Analisis multi-dimensi: Dengan menggabungkan beberapa indikator, strategi dapat menganalisis pasar dari berbagai sudut pandang, meningkatkan akurasi penilaian.

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

  3. Pengelolaan risiko: Pengaturan stop loss dan keuntungan yang dinamis membantu mengendalikan risiko dengan lebih baik dan beradaptasi dengan perubahan pasar.

  4. Indikator Originalitas: Indikator VAWSI dan Keberlanjutan Tren memberikan wawasan pasar yang unik dan dapat menangkap sinyal yang diabaikan oleh indikator tradisional.

  5. Barstate.isconfirmed digunakan untuk memastikan bahwa sinyal tidak akan digambar ulang, meningkatkan akurasi pengukuran.

  6. Kustomisasi: Berbagai parameter dapat disesuaikan, sehingga strategi dapat disesuaikan dengan berbagai jenis perdagangan dan kerangka waktu.

Risiko Strategis

  1. Optimasi berlebihan: Banyaknya parameter dapat menyebabkan optimasi berlebihan, yang tidak berkinerja baik dalam perdagangan langsung.

  2. Adaptasi pasar: Meskipun berkinerja baik di beberapa pasar, mungkin tidak berlaku untuk semua kondisi pasar, terutama di pasar dengan volatilitas rendah.

  3. Kompleksitas: Kompleksitas strategi dapat membuat mereka sulit untuk dipahami dan dipelihara, meningkatkan risiko kesalahan operasi.

  4. Komputasi intensif: beberapa indikator kustom dan komputasi dinamis dapat menyebabkan beban komputasi yang lebih tinggi, yang mempengaruhi kecepatan eksekusi.

  5. Tergantung pada data historis: Strategi menggunakan sejumlah besar data historis untuk menghitung, yang dalam beberapa kasus dapat menyebabkan keterlambatan.

Arah optimasi

  1. Optimasi Parameter: Menggunakan algoritma pembelajaran mesin untuk mengoptimalkan berbagai parameter berat dan panjang untuk meningkatkan kinerja strategi dalam berbagai kondisi pasar.

  2. Identifikasi kondisi pasar: Tambahkan modul identifikasi kondisi pasar untuk menyesuaikan parameter strategi secara otomatis dalam lingkungan pasar yang berbeda.

  3. Sinyal penyaringan: memperkenalkan mekanisme penyaringan tambahan, seperti trend intensity threshold, untuk mengurangi sinyal palsu.

  4. Analisis kuantitas transaksi: analisis kuantitas transaksi yang lebih dalam, mungkin memperkenalkan pengenalan bentuk transaksi untuk meningkatkan keandalan sinyal.

  5. Analisis multi-frame: mengintegrasikan sinyal dari beberapa frame waktu untuk meningkatkan stabilitas keputusan perdagangan.

  6. Optimalisasi manajemen risiko: menerapkan strategi manajemen risiko yang lebih kompleks, seperti posisi dinamis dan multi-level stop loss.

  7. Efisiensi komputasi: mengoptimalkan kode untuk meningkatkan efisiensi komputasi, terutama ketika menangani sejumlah besar data historis.

Meringkaskan

VAWSI dan strategi trend reversal berkelanjutan adalah sistem perdagangan yang kompleks dan komprehensif, yang menggabungkan beberapa indikator inovatif dan penyesuaian parameter dinamis. Kelebihannya terletak pada analisis pasar multi-dimensi dan kemampuan beradaptasi sendiri, yang memungkinkannya untuk mencari peluang reversal potensial dalam berbagai kondisi pasar. Namun, kompleksitas strategi juga membawa tantangan dalam hal over-optimisasi dan adaptasi.

Strategi ini memiliki potensi untuk menjadi alat perdagangan yang kuat dengan pengoptimalan lebih lanjut, terutama dalam hal penyesuaian parameter, identifikasi keadaan pasar, dan manajemen risiko. Namun, pengguna harus memperhatikan bahwa tidak ada strategi yang sempurna dan pemantauan dan penyesuaian yang berkelanjutan diperlukan. Dalam aplikasi praktis, disarankan untuk melakukan pengujian yang memadai pada simulasi akun dan menggabungkan alat analisis lainnya dan pengetahuan pasar untuk membuat keputusan perdagangan.

Kode Sumber Strategi
/*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))