Strategi V-Reversal SMA menghitung perbedaan absolut 14 hari antara harga tertinggi dan harga terendah hari sebelumnya, dan perbedaan absolut 14 hari antara harga terendah dan harga tertinggi hari sebelumnya. Kemudian menghitung rata-rata bergerak sederhana 14 hari mereka untuk membentuk kurva VI + dan VI-. Sinyal beli dihasilkan ketika VI + melintasi VI-. Sinyal jual dihasilkan ketika VI- melintasi di bawah VI +.
Indikator inti dari strategi ini adalah VI+ dan VI-. VI+ mencerminkan momentum bullish sementara VI- mencerminkan momentum bearish. Rumus perhitungan spesifik adalah sebagai berikut:
VMP = SUM(ABS(HIGH - LOW[1]),14)
VMM = SUM(ABS(LOW - HIGH[1]),14)
STR = SUM(ATR(1),14)
VI+ = VMP/STR
VI- = VMM/STR
Untuk menghilangkan osilasi dalam kurva, rata-rata bergerak sederhana 14 hari dihitung pada VI+ dan VI- untuk mendapatkan SMA ((VI+) dan SMA ((VI-). Sinyal bullish dihasilkan ketika SMA ((VI+) melintasi SMA ((VI-). Sinyal bearish dihasilkan ketika SMA ((VI-) melintasi di bawah SMA ((VI+).
Selain itu, strategi ini juga menggabungkan status naik dan turun dari VI + dan VI- untuk menilai tren dan menyaring sinyal, pergi panjang hanya ketika tren menurun dan pergi pendek hanya ketika tren naik.
Dengan menggabungkan status tren dan golden/dead cross dari indikator VI, strategi ini dapat secara efektif menyaring sinyal palsu dan meningkatkan profitabilitas.
Risiko utama dari strategi ini adalah:
Indikator VI dapat menghasilkan sinyal yang menyesatkan pada periode tertentu.
Pasar dengan biaya perdagangan dan slippage yang tinggi tidak cocok untuk strategi ini karena akan sangat mengurangi margin keuntungan.
Strategi dapat dioptimalkan dalam aspek berikut:
Optimalkan parameter indikator VI untuk menemukan kombinasi parameter terbaik.
Menggunakan metode pembelajaran mesin untuk secara otomatis mengidentifikasi sinyal yang menyesatkan dan meningkatkan kualitas sinyal.
Mengoptimalkan mekanisme keluar dengan stop loss dan manajemen uang untuk mengendalikan kerugian perdagangan tunggal.
Mengoptimalkan pemilihan produk perdagangan dengan fokus pada pasar dengan biaya perdagangan yang lebih rendah.
Strategi V-Reversal SMA menentukan sinyal perdagangan dengan menghitung indikator VI+ dan VI- dan menggabungkan status tren. Ini adalah strategi tren yang relatif dapat diandalkan. Kekuatannya terletak pada kualitas sinyal yang tinggi dan kemampuan untuk menyaring kebisingan.
/*backtest start: 2024-01-01 00:00:00 end: 2024-01-31 23:59:59 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 //@author=SIDD //Sidd-Vortex strategy is using Vortex formula to generate 4 signals Bullish1 Bullish2 and Bearish1 Bearish2. //Bullish1 signal is getting generated when smooth ma of VIP is crossing over smooth ma of VIM and smooth VIM is falling from previous bar smooth VIM //Bullish2 signal is getting generated when smooth ma of VIP is crossing over smooth ma of VIM and smooth VIP is rising from previous bar smooth VIP //Bearish1 signal is getting generated when smooth ma of VIM is crossing over smooth ma of VIP and smooth VIP is falling from previous bar smooth VIP //Bearish2 signal is getting generated when smooth ma of VIM is crossing over smooth ma of VIP and smooth VIM is rising from previous bar smooth VIM //This strategy can be converted into study un-commenting the plotshape and 15th line strategy replace with study and overlay=false strategy(title = "SIDD-Vortex", shorttitle="SIDD-VORTEX", format=format.price, precision=4,overlay=true) period_ = input(14, title="Period", minval=2) len = input(14, minval=1, title="WMA Length") VMP = sum( abs( high - low[1]), period_ ) // sum of absolute current high and previous low with 14 period default VMM = sum( abs( low - high[1]), period_ ) // sum of absolute current low and previous high with 14 period default STR = sum( atr(1), period_ ) //sum of daily atr for 14 days VIP = VMP / STR VIM = VMM / STR simpleMAVIP=wma(VIP, len) smmaVIP = 0.0 smmaVIP := na(smmaVIP[1]) ? simpleMAVIP : (smmaVIP[1] * (len - 1) + VIP) / len // finding the Smoothing average simpleMAVIM=wma(VIM, len) smmaVIM = 0.0 smmaVIM := na(smmaVIM[1]) ? simpleMAVIM : (smmaVIM[1] * (len - 1) + VIM) / len // finding the Smoothing average risingVIP = rising(smmaVIP, 1) fallingVIP = falling(smmaVIP, 1) lineColorVIP = smmaVIP > 0.95 and risingVIP ? color.lime : smmaVIP > 0.95 ? #d65240 : smmaVIP < 0.95 and fallingVIP ? color.red : color.olive risingVIM = rising(VIM, 1) fallingVIM = falling(VIM, 1) lineColorVIM = smmaVIM > 0.95 and risingVIM ? color.red : smmaVIM > 0.95 ? color.olive : smmaVIM < 0.95 and fallingVIM ? color.lime : #d65240 plot(VIP, title="VI +", color=lineColorVIP) plot(VIM, title="VI -", color=lineColorVIM) longCondition = crossover(smmaVIP,smmaVIM) shortCondition = crossover(smmaVIM,smmaVIP) if (longCondition and fallingVIM) strategy.entry("Bullish1", strategy.long) if (shortCondition and fallingVIP) strategy.entry("Bearish1", strategy.short) if (longCondition and risingVIP) strategy.entry("Bullish2", strategy.long) if (shortCondition and risingVIM) strategy.entry("Bearish2", strategy.short) //plotshape(longCondition and fallingVIM, color=color.lime, location=location.belowbar, style=shape.triangleup,size= size.large,text="Bullish",offset=0,textcolor=color.white) //plotshape(longCondition and risingVIP, color=color.lime, location=location.belowbar, style=shape.labelup,size= size.large,text="Bullish",offset=0,textcolor=color.white) //plotshape(Diff > 0 and direction>0, color=color.lime, location=location.belowbar, style=shape.arrowup,size= size.normal,offset=0) //plotshape(shortCondition and fallingVIP , color=color.red, location=location.abovebar, style=shape.triangledown, size= size.large,text="Bearish",offset=0,textcolor=color.white) //plotshape( shortCondition and risingVIM , color=color.red, location=location.abovebar, style=shape.labeldown, size= size.large,text="Bearish",offset=0,textcolor=color.white) //band1 = hline(1.0 , title="Upper Line", linestyle=hline.style_dashed, linewidth=3, color=color.red) //band0 = hline(0.5, title="Lower Line", linestyle=hline.style_dashed, linewidth=3, color=color.lime) //fill(band1, band0, color=color.purple, transp=70)