Sumber dimuat naik... memuat...

VAWSI dan Strategi Pembalikan Persistensi Trend dengan Sistem Analisis Multi-Indikator Pengiraan Panjang Dinamik

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

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

  1. Pengiraan Panjang Dinamik: Menggunakan kaedah pengiraan panjang dinamik BlackCat1402 untuk menyesuaikan parameter panjang penunjuk berdasarkan keadaan pasaran.

  2. Analisis Komposit: Menggabungkan bacaan dari VAWSI, Persistensi Trend, dan ATR untuk menghasilkan penunjuk komposit. Nilai akhir yang lebih rendah menunjukkan pembalikan yang akan datang, sementara nilai yang lebih tinggi menunjukkan pasaran yang tidak stabil atau bergelombang.

  3. Dinamis Stop-Loss/Take-Profit: Mengira tahap stop-loss dan take-profit dinamik berdasarkan penunjuk komposit dan arah trend semasa.

  4. Isyarat Perdagangan: Memastikan persilangan dan menghasilkan isyarat perdagangan apabila harga sepenuhnya melintasi garis ambang yang dikira.

Kelebihan Strategi

  1. Analisis Berbilang Dimensi: Dengan menggabungkan beberapa penunjuk, strategi dapat menganalisis pasaran dari sudut yang berbeza, meningkatkan ketepatan keputusan.

  2. Kebolehsesuaian: Pengiraan panjang dinamik membolehkan strategi menyesuaikan diri dengan keadaan pasaran yang berbeza, meningkatkan fleksibiliti.

  3. Pengurusan Risiko: Tetapan stop-loss dan mengambil keuntungan yang dinamik membantu mengawal risiko dengan lebih baik dan menyesuaikan diri dengan perubahan pasaran.

  4. Penunjuk Asli: Indikator VAWSI dan Persistence Trend memberikan wawasan pasaran yang unik yang mungkin menangkap isyarat yang diabaikan oleh penunjuk tradisional.

  5. Anti-Repainting: Penggunaan barstate.isconfirmed memastikan isyarat tidak mengecat semula, meningkatkan ketepatan backtesting.

  6. Keupayaan untuk disesuaikan: Pelbagai parameter yang boleh diselaraskan membolehkan strategi disesuaikan untuk instrumen perdagangan dan jangka masa yang berbeza.

Risiko Strategi

  1. Peningkatan yang berlebihan: Sejumlah besar parameter boleh menyebabkan peningkatan yang berlebihan, berpotensi melakukan prestasi yang buruk dalam perdagangan langsung.

  2. Kesesuaian pasaran: Walaupun berprestasi baik di pasaran tertentu, ia mungkin tidak sesuai untuk semua keadaan pasaran, terutamanya di pasaran dengan turun naik yang rendah.

  3. Kerumitan: Kerumitan strategi boleh menjadikannya sukar untuk difahami dan dipelihara, meningkatkan risiko kesilapan operasi.

  4. Pengiraan intensif: Pelbagai penunjuk khusus dan pengiraan dinamik boleh mengakibatkan beban pengiraan yang tinggi, mempengaruhi kelajuan pelaksanaan.

  5. Kepercayaan pada Data Sejarah: Strategi menggunakan sejumlah besar data sejarah untuk pengiraan, yang mungkin menyebabkan kelewatan dalam beberapa situasi.

Arahan pengoptimuman

  1. Pengoptimuman Parameter: Gunakan algoritma pembelajaran mesin untuk mengoptimumkan pelbagai parameter berat dan panjang untuk meningkatkan prestasi strategi di bawah keadaan pasaran yang berbeza.

  2. Pengiktirafan keadaan pasaran: Tambah modul pengiktirafan keadaan pasaran untuk menyesuaikan parameter strategi secara automatik dalam persekitaran pasaran yang berbeza.

  3. Penapisan isyarat: Memperkenalkan mekanisme penapisan tambahan, seperti ambang kekuatan trend, untuk mengurangkan isyarat palsu.

  4. Analisis Volume: Memperdalam analisis volum, mungkin memperkenalkan pengenalan corak volum untuk meningkatkan kebolehpercayaan isyarat.

  5. Analisis pelbagai jangka masa: Mengintegrasikan isyarat dari pelbagai jangka masa untuk meningkatkan ketahanan keputusan perdagangan.

  6. Pengoptimuman Pengurusan Risiko: Melaksanakan strategi pengurusan risiko yang lebih canggih, seperti ukuran kedudukan dinamik dan stop-loss pelbagai peringkat.

  7. Kecekapan Pengiraan: Mengoptimumkan kod untuk meningkatkan kecekapan pengiraan, terutamanya apabila memproses sejumlah besar data sejarah.

Kesimpulan

VAWSI dan Strategi Pembalikan Persistensi Trend adalah sistem perdagangan yang kompleks dan komprehensif yang menggabungkan beberapa penunjuk inovatif dan penyesuaian parameter dinamik. Kekuatannya terletak pada analisis pasaran dan kemampuan beradaptasi berbilang dimensi, yang membolehkannya mencari peluang pembalikan yang berpotensi dalam pelbagai keadaan pasaran.

Melalui pengoptimuman lanjut, terutamanya dalam pelarasan parameter, pengiktirafan keadaan pasaran, dan pengurusan risiko, strategi ini berpotensi menjadi alat perdagangan yang kuat. Walau bagaimanapun, pengguna harus ambil perhatian bahawa tidak ada strategi yang sempurna, dan pemantauan dan penyesuaian berterusan diperlukan. Dalam aplikasi praktikal, disyorkan untuk menjalankan ujian menyeluruh pada akaun demo dan menggabungkan strategi ini dengan alat analisis lain dan pengetahuan pasaran 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 lanjut