Strategi Pembalikan Fluktuasi Harga Abnormal


Tanggal Pembuatan: 2023-10-11 16:03:36 Akhirnya memodifikasi: 2023-10-11 16:03:36
menyalin: 1 Jumlah klik: 705
1
fokus pada
1628
Pengikut

Ringkasan

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.

Prinsip

Strategi ini menggunakan dua indikator utama:

  1. Indikator VixFix: Menghitung perbedaan standar harga dalam periode tertentu untuk menentukan apakah harga mengalami fluktuasi yang tidak biasa. Metode perhitungan spesifik adalah:
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.

  1. Indeks RSI: Indeks kekuatan relatif dari harga untuk menentukan kapan harga berbalik. Metode perhitungan spesifiknya adalah:
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.

Masuk dan keluar

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.

Keunggulan

  • Menggunakan karakteristik statistik dari fluktuasi harga yang tidak biasa untuk menentukan kapan harga berbalik, cakupan luas.
  • Dengan menggunakan indikator RSI untuk menilai kondisi overbought dan oversold, Anda dapat meningkatkan akurasi entry.
  • Menggunakan batas standar standar terbawah sebagai sinyal masuk, dapat mengurangi peluang untuk gagal.
  • Menggunakan reversal entitas sebagai metode stop loss, dapat cepat stop loss, mengurangi kerugian.

Risiko

  • Batas rendah standar deviasi dapat disesuaikan, parameter yang perlu dioptimalkan.
  • Penembusan standar deviasi minimum tidak selalu menghasilkan pembalikan, dan ada risiko yang ditanam.
  • Parameter RSI perlu dioptimalkan, jika tidak sesuai dapat menyebabkan sinyal tidak akurat.
  • Penentuan stop loss dalam arah entitas mungkin terlalu radikal dan parameter perlu disesuaikan.

Optimalkan Pikiran

  • Optimalkan parameter periodik untuk menghitung deviasi standar, sehingga lebih mampu menangkap fluktuasi harga yang tidak normal.
  • Optimalkan parameter RSI untuk menemukan kriteria penilaian overbought dan oversold yang lebih baik.
  • Cobalah kombinasi indikator lain, seperti KDJ, MACD, dan lain-lain untuk menentukan waktu pembalikan.
  • Mengoptimalkan metode stop loss dengan menetapkan margin rebound harga sebagai standar stop loss.

Meringkaskan

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.

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