
Strategi ini adalah strategi perdagangan kuantitatif berdasarkan Bollinger Bands dan RSI. Strategi ini menggunakan kaedah pembelajaran mesin untuk mengoptimumkan pengulangan data sejarah hampir 1 tahun melalui bahasa Python untuk mencari kombinasi parameter yang optimum.
Isyarat perdagangan untuk strategi ini berasal dari penilaian gabungan Bollinger Bands dan RSI ganda. Di antaranya, Bollinger Bands adalah saluran turun naik yang dikira berdasarkan jarak standard harga. Isyarat perdagangan dihasilkan apabila harga mendekati atau menyentuh saluran turun naik.
Khususnya, ia menghasilkan isyarat beli apabila harga penutupan berada di bawah 1.0 standard deviation dan RSI lebih besar daripada 42. Ia menghasilkan isyarat jual apabila harga penutupan berada di atas 1.0 standard deviation dan RSI lebih besar daripada 70. Selain itu, strategi ini juga menetapkan dua set parameter BB dan RSI untuk masuk dan menghentikan kedudukan rata.
Kelebihan utama strategi ini adalah ketepatan parameter. Dengan kaedah pembelajaran mesin, setiap parameter diperiksa secara menyeluruh untuk mendapatkan nisbah Sharpe terbaik. Ini memastikan keuntungan strategi dan mengawal risiko.
Risiko strategi ini terutamanya berasal dari penyetempatan titik berhenti. Jika titik berhenti terlalu besar, kerugian tidak dapat dikawal dengan berkesan. Selain itu, risiko akan meningkat jika titik berhenti dikira dengan tidak betul dengan bayaran dan kos perdagangan lain seperti titik slip perdagangan. Untuk mengurangkan risiko, disarankan untuk menyesuaikan parameter lebar berhenti, mengurangkan frekuensi perdagangan, sambil mengira kedudukan berhenti yang munasabah.
Strategi ini mempunyai ruang untuk pengoptimuman lebih lanjut. Sebagai contoh, anda boleh mencuba mengubah parameter panjang Bollinger Bands, atau menyesuaikan nilai paras RSI. Selain itu, anda boleh mencuba memperkenalkan indikator lain, membina gabungan pelbagai indikator.
Strategi ini menggabungkan indikator BB ganda dan indikator RSI, memperoleh parameter terbaik melalui kaedah pembelajaran mesin, mencapai kadar pulangan yang tinggi dan tahap risiko yang boleh dikawal. Ia mempunyai kelebihan dalam kedua-dua penilaian gabungan indikator dan pengoptimuman parameter. Dengan penambahbaikan berterusan, strategi ini dijangka menjadi strategi perdagangan kuantitatif yang 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)