
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.
Indikator VAWSI: Ini adalah indikator asli, mirip dengan RSI, tetapi menggunakan VAWMA (volume dan ATR weighted moving average) sebagai pengganti RMA.
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.
Modifikasi ATR: Mengambil nilai maksimum dari sumber sebelumnya, lalu mengambil nilai mutlak dari perubahannya dan menggunakan data sumber untuk menyatukan.
Penghitungan panjang dinamis: Menggunakan metode penghitungan panjang dinamis BlackCat1402, parameter panjang indikator disesuaikan dengan kondisi pasar.
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.
Stop loss / profit dinamis: Stop loss dan profit dinamis yang dihitung berdasarkan indikator komposit dan arah tren saat ini.
Sinyal perdagangan: Ketika harga benar-benar melintasi garis terendah yang dihitung, sistem akan mengkonfirmasi persimpangan dan menghasilkan sinyal perdagangan.
Analisis multi-dimensi: Dengan menggabungkan beberapa indikator, strategi dapat menganalisis pasar dari berbagai sudut pandang, meningkatkan akurasi penilaian.
Adaptabilitas: Kalkulasi panjang dinamis memungkinkan strategi untuk beradaptasi dengan kondisi pasar yang berbeda, meningkatkan fleksibilitas strategi.
Pengelolaan risiko: Pengaturan stop loss dan keuntungan yang dinamis membantu mengendalikan risiko dengan lebih baik dan beradaptasi dengan perubahan pasar.
Indikator Originalitas: Indikator VAWSI dan Keberlanjutan Tren memberikan wawasan pasar yang unik dan dapat menangkap sinyal yang diabaikan oleh indikator tradisional.
Barstate.isconfirmed digunakan untuk memastikan bahwa sinyal tidak akan digambar ulang, meningkatkan akurasi pengukuran.
Kustomisasi: Berbagai parameter dapat disesuaikan, sehingga strategi dapat disesuaikan dengan berbagai jenis perdagangan dan kerangka waktu.
Optimasi berlebihan: Banyaknya parameter dapat menyebabkan optimasi berlebihan, yang tidak berkinerja baik dalam perdagangan langsung.
Adaptasi pasar: Meskipun berkinerja baik di beberapa pasar, mungkin tidak berlaku untuk semua kondisi pasar, terutama di pasar dengan volatilitas rendah.
Kompleksitas: Kompleksitas strategi dapat membuat mereka sulit untuk dipahami dan dipelihara, meningkatkan risiko kesalahan operasi.
Komputasi intensif: beberapa indikator kustom dan komputasi dinamis dapat menyebabkan beban komputasi yang lebih tinggi, yang mempengaruhi kecepatan eksekusi.
Tergantung pada data historis: Strategi menggunakan sejumlah besar data historis untuk menghitung, yang dalam beberapa kasus dapat menyebabkan keterlambatan.
Optimasi Parameter: Menggunakan algoritma pembelajaran mesin untuk mengoptimalkan berbagai parameter berat dan panjang untuk meningkatkan kinerja strategi dalam berbagai kondisi pasar.
Identifikasi kondisi pasar: Tambahkan modul identifikasi kondisi pasar untuk menyesuaikan parameter strategi secara otomatis dalam lingkungan pasar yang berbeda.
Sinyal penyaringan: memperkenalkan mekanisme penyaringan tambahan, seperti trend intensity threshold, untuk mengurangi sinyal palsu.
Analisis kuantitas transaksi: analisis kuantitas transaksi yang lebih dalam, mungkin memperkenalkan pengenalan bentuk transaksi untuk meningkatkan keandalan sinyal.
Analisis multi-frame: mengintegrasikan sinyal dari beberapa frame waktu untuk meningkatkan stabilitas keputusan perdagangan.
Optimalisasi manajemen risiko: menerapkan strategi manajemen risiko yang lebih kompleks, seperti posisi dinamis dan multi-level stop loss.
Efisiensi komputasi: mengoptimalkan kode untuk meningkatkan efisiensi komputasi, terutama ketika menangani sejumlah besar data historis.
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.
/*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))