Strategi ini menilai apakah harga mengalami fluktuasi besar yang tidak biasa dengan menghitung perbedaan standar harga. Ketika harga mengalami fluktuasi besar yang tidak biasa, maka strategi ini menilai peluang untuk membalikkan harga dan melakukan operasi reversal.
Strategi ini menggunakan dua indikator utama:
wvf = ((highest(close, pd)-low)/(highest(close, pd)))*100
sDev = mult * stdev(wvf, bbl)
midLine = sma(wvf, bbl)
lowerBand = midLine - sDev
upperBand = midLine + sDev
Di antaranya, wvf adalah tingkat fluktuasi harga, sDev adalah standar deviasi, midLine adalah rata-rata, dan lowerBand dan upperBand adalah batas bawah dan batas atas. Ketika harga melebihi batas atas, dianggap terjadi fluktuasi yang tidak biasa.
fastup = rma(max(change(close), 0), 7)
fastdown = rma(-min(change(close), 0), 7)
fastrsi = fastdown == 0 ? 100 : fastup == 0 ? 0 : 100 - (100 / (1 + fastup / fastdown))
Ketika RSI berada di bawah suatu nilai, harga berada dalam keadaan oversold dan mungkin terjadi bouncing. Ketika RSI melebihi suatu nilai, harga berada dalam keadaan overbought dan mungkin terjadi rebound.
Logika masuk dan keluar dari strategi ini adalah sebagai berikut:
Masukkan lebih banyak posisi: ketika harga melebihi batas atas atau volatilitas melebihi batas, dan RSI berada di bawah nilai tertentu.
Posisi kosong masuk: ketika harga melebihi batas atas atau volatilitas melebihi nilai tebing, dan RSI melebihi nilai tertentu, maka posisi kosong masuk.
Kondisi Keluar: posisi terbuka berlawanan dengan arah entitas K line.
Strategi ini menangkap peluang berbalik dengan menghitung standar deviasi dari volatilitas harga untuk menentukan apakah harga mengalami fluktuasi yang tidak biasa. Pada pilihan waktu masuk, ini dikombinasikan dengan indikator RSI untuk menentukan status overbought dan oversold dari harga, meningkatkan akurasi. Pada metode stop loss, menggunakan arah entitas yang sederhana untuk menghentikan kerugian. Secara keseluruhan, strategi ini menggunakan data statistik untuk menentukan fluktuasi yang tidak biasa, lebih efektif, tetapi perlu lebih mengoptimalkan parameter, meningkatkan stabilitas.
/*backtest
start: 2022-10-04 00:00:00
end: 2023-10-10 00:00:00
period: 2d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//Noro
//2018
//@version=2
strategy(title = "Noro's VixFix + RSI Strategy v1.0", shorttitle = "VixFix + RSI str 1.0", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 5)
//Settings
needlong = input(true, defval = true, title = "Long")
needshort = input(true, defval = true, title = "Short")
leverage = input(1, defval = 1, minval = 1, maxval = 100, title = "leverage")
limit = input(40, defval = 40, minval = 2, maxval = 50, title = "RSI Limit")
pd = input(22, title="LookBack Period Standard Deviation High")
bbl = input(20, title="Bolinger Band Length")
mult = input(2.0, minval = 1, maxval = 5, title = "Bollinger Band Standard Devaition Up")
lb = input(50, title="Look Back Period Percentile High")
ph = input(.85, title="Highest Percentile - 0.90=90%, 0.95=95%, 0.99=99%")
pl = input(1.01, title="Lowest Percentile - 1.10=90%, 1.05=95%, 1.01=99%")
hp = input(false, title="Show High Range - Based on Percentile and LookBack Period?")
sd = input(false, title="Show Standard Deviation Line?")
fromyear = input(1900, defval = 1900, minval = 1900, maxval = 2100, title = "From Year")
toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year")
frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month")
tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month")
fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From day")
today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day")
//Vix Fix
wvf = ((highest(close, pd)-low)/(highest(close, pd)))*100
sDev = mult * stdev(wvf, bbl)
midLine = sma(wvf, bbl)
lowerBand = midLine - sDev
upperBand = midLine + sDev
rangeHigh = (highest(wvf, lb)) * ph
rangeLow = (lowest(wvf, lb)) * pl
col = wvf >= upperBand or wvf >= rangeHigh ? lime : gray
//RSI
fastup = rma(max(change(close), 0), 7)
fastdown = rma(-min(change(close), 0), 7)
fastrsi = fastdown == 0 ? 100 : fastup == 0 ? 0 : 100 - (100 / (1 + fastup / fastdown))
//Body
body = abs(close - open)
abody = sma(body, 10)
//Signals
up = (wvf >= upperBand or wvf >= rangeHigh) and fastrsi < limit and close < open
dn = (wvf >= upperBand or wvf >= rangeHigh) and fastrsi > (100 - limit) and close > open
exit = ((strategy.position_size > 0 and close > open) or (strategy.position_size < 0 and close < open)) and body > abody / 3
//Trading
lot = strategy.position_size == 0 ? strategy.equity / close * leverage : lot[1]
if up
if strategy.position_size < 0
strategy.close_all()
strategy.entry("Bottom", strategy.long, needlong == false ? 0 : lot, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))
if dn
if strategy.position_size > 0
strategy.close_all()
strategy.entry("Top", strategy.short, needshort == false ? 0 : lot, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))
if time > timestamp(toyear, tomonth, today, 23, 59) or exit
strategy.close_all()