Strategi Perdagangan Kuantitatif Kemenangan yang sempurna berdasarkan Penunjuk BB Berganda dan RSI

Penulis:ChaoZhang, Tarikh: 2024-01-29 10:33:43
Tag:

img

Ringkasan

Strategi ini adalah strategi perdagangan kuantitatif berdasarkan penunjuk Bollinger Bands dan penunjuk Indeks Kekuatan Relatif (RSI). Strategi ini menggunakan kaedah pembelajaran mesin untuk menguji semula dan mengoptimumkan parameter selama hampir 1 tahun data sejarah menggunakan bahasa Python, mencari kombinasi parameter yang optimum.

Prinsip Strategi

Isyarat perdagangan strategi ini berasal dari penilaian gabungan Bollinger Bands dan penunjuk RSI berganda. Di antara mereka, penunjuk Bollinger Bands adalah saluran turun naik yang dikira berdasarkan penyimpangan standard harga. Ia menghasilkan isyarat perdagangan apabila harga mendekati atau menyentuh saluran. Penunjuk RSI menilai keadaan beli dan jual harga.

Secara khusus, isyarat beli dihasilkan apabila harga penutupan berada di bawah rel bawah 1.0 penyimpangan piawai dan RSI lebih besar daripada 42 pada masa yang sama. isyarat jual dihasilkan apabila harga penutupan berada di atas rel atas 1.0 penyimpangan piawai dan RSI lebih besar daripada 70 pada masa yang sama. Di samping itu, strategi ini juga menetapkan dua set parameter BB dan RSI, yang digunakan untuk kedudukan penutupan entri dan stop loss masing-masing. Parameter ini adalah nilai optimum yang diperoleh melalui pengujian belakang dan pembelajaran mesin yang luas.

Analisis Kelebihan

Kelebihan terbesar strategi ini adalah ketepatan parameter. Melalui kaedah pembelajaran mesin, setiap parameter diperoleh melalui pengujian balik yang komprehensif untuk mencapai nisbah Sharpe terbaik. Ini memastikan kedua-dua kadar pulangan strategi dan mengawal risiko. Di samping itu, gabungan penunjuk berganda juga meningkatkan ketepatan dan kadar kemenangan isyarat.

Analisis Risiko

Risiko utama strategi ini berasal dari penetapan titik stop loss. Jika titik stop loss ditetapkan terlalu besar, ia tidak akan mengawal kerugian dengan berkesan. Di samping itu, jika titik stop loss tidak mengira kos dagangan lain seperti komisen dan slippage, ia juga akan meningkatkan risiko. Untuk mengurangkan risiko, disyorkan untuk menyesuaikan parameter magnitud stop loss untuk mengurangkan kekerapan dagangan, sambil mengira kedudukan stop loss yang munasabah.

Arahan pengoptimuman

Terdapat lagi ruang untuk pengoptimuman strategi ini. Sebagai contoh, anda boleh cuba mengubah parameter panjang Bollinger Bands, atau menyesuaikan ambang overbought dan oversold RSI. Anda juga boleh cuba memperkenalkan penunjuk lain untuk membina kombinasi pelbagai penunjuk. Ini boleh meningkatkan ruang keuntungan dan kestabilan strategi.

Ringkasan

Strategi ini menggabungkan penunjuk BB berganda dan penunjuk RSI, dan memperoleh parameter optimum melalui kaedah pembelajaran mesin untuk mencapai pulangan yang tinggi dan tahap risiko yang boleh dikawal. Ia mempunyai kelebihan penilaian penunjuk gabungan dan pengoptimuman parameter. Dengan peningkatan berterusan, strategi ini berpotensi menjadi strategi perdagangan kuantitatif yang sangat baik.


/*backtest
start: 2023-12-01 00:00:00
end: 2023-12-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// @version=4
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © Bunghole 2020
strategy(overlay=true, shorttitle="Flawless Victory Strategy" )

// Stoploss and Profits Inputs
v1 = input(true, title="Version 1 - Doesn't Use SL/TP")
v2 = input(false, title="Version 2 - Uses SL/TP")
stoploss_input = input(6.604, title='Stop Loss %', type=input.float, minval=0.01)/100
takeprofit_input = input(2.328, title='Take Profit %', type=input.float, minval=0.01)/100
stoploss_level = strategy.position_avg_price * (1 - stoploss_input)
takeprofit_level = strategy.position_avg_price * (1 + takeprofit_input)

//SL & TP Chart Plots
plot(v2 and stoploss_input and stoploss_level ? stoploss_level: na, color=color.red, style=plot.style_linebr, linewidth=2, title="Stoploss")
plot(v2 and takeprofit_input ? takeprofit_level: na, color=color.green, style=plot.style_linebr, linewidth=2, title="Profit")

// Bollinger Bands 1
length = 20
src1 = close
mult = 1.0
basis = sma(src1, length)
dev = mult * stdev(src1, length)
upper = basis + dev
lower = basis - dev

// Bollinger Bands 2
length2 = 17
src2 = close
mult2 = 1.0
basis2 = sma(src1, length2)
dev2 = mult2 * stdev(src2, length2)
upper2 = basis2 + dev2
lower2 = basis2 - dev2

// RSI
len = 14
src = close
up = rma(max(change(src), 0), len)
down = rma(-min(change(src), 0), len)
rsi = down == 0 ? 100 : up == 0 ? 0 : 100 - 100 / (1 + up / down)

// Strategy Parameters
RSILL= 42
RSIUL= 70
RSILL2= 42
RSIUL2= 76

rsiBuySignal = rsi > RSILL
rsiSellSignal = rsi > RSIUL
rsiBuySignal2 = rsi > RSILL2
rsiSellSignal2 = rsi > RSIUL2

BBBuySignal = src < lower
BBSellSignal = src > upper
BBBuySignal2 = src2 < lower2
BBSellSignal2 = src2 > upper2

// Strategy Long Signals
Buy = rsiBuySignal and BBBuySignal
Sell = rsiSellSignal and BBSellSignal
Buy2 = rsiBuySignal2 and BBBuySignal2
Sell2 = rsiSellSignal2 and BBSellSignal2

if v1 == true
    strategy.entry("Long", strategy.long, when = Buy, alert_message = "v1 - Buy Signal!")
    strategy.close("Long", when = Sell, alert_message = "v1 - Sell Signal!")

if v2 == true
    strategy.entry("Long", strategy.long, when = Buy2, alert_message = "v2 - Buy Signal!")
    strategy.close("Long", when = Sell2, alert_message = "v2 - Sell Signal!")
    strategy.exit("Stoploss/TP", "Long", stop = stoploss_level, limit = takeprofit_level)


Lebih lanjut