Strategi ini adalah strategi perdagangan kuantitatif berdasarkan indikator Bollinger Bands dan indikator Relative Strength Index (RSI). Strategi ini menggunakan metode pembelajaran mesin untuk melakukan backtest dan mengoptimalkan parameter selama hampir 1 tahun data historis menggunakan bahasa Python, menemukan kombinasi parameter yang optimal.
Sinyal perdagangan dari strategi ini berasal dari penilaian gabungan Bollinger Bands ganda dan indikator RSI. Di antara mereka, indikator Bollinger Bands adalah saluran volatilitas yang dihitung berdasarkan deviasi standar harga. Ini menghasilkan sinyal perdagangan ketika harga mendekati atau menyentuh saluran. Indikator RSI menilai situasi overbought dan oversold harga.
Secara khusus, sinyal beli dihasilkan ketika harga penutupan berada di bawah rel bawah 1.0 standar deviasi dan RSI lebih besar dari 42 pada saat yang sama. Sinyal jual dihasilkan ketika harga penutupan berada di atas rel atas 1.0 standar deviasi dan RSI lebih besar dari 70 pada saat yang sama. Selain itu, strategi ini juga menetapkan dua set parameter BB dan RSI, yang digunakan untuk posisi penutupan entri dan stop loss masing-masing. Parameter ini adalah nilai optimal yang diperoleh melalui backtesting dan pembelajaran mesin yang ekstensif.
Keuntungan terbesar dari strategi ini adalah keakuratan parameter. Melalui metode pembelajaran mesin, setiap parameter diperoleh melalui backtesting yang komprehensif untuk mencapai rasio Sharpe terbaik. Ini memastikan tingkat pengembalian strategi dan mengendalikan risiko. Selain itu, kombinasi indikator ganda juga meningkatkan keakuratan dan tingkat kemenangan sinyal.
Risiko utama dari strategi ini berasal dari pengaturan titik stop loss. Jika titik stop loss ditetapkan terlalu besar, maka tidak akan secara efektif mengendalikan kerugian. Selain itu, jika titik stop loss tidak menghitung biaya perdagangan lainnya seperti komisi dan slippage dengan benar, hal itu juga akan meningkatkan risiko. Untuk mengurangi risiko, disarankan untuk menyesuaikan parameter magnitudo stop loss untuk mengurangi frekuensi perdagangan, sambil menghitung posisi stop loss yang wajar.
Anda masih dapat mencoba untuk mengoptimalkan strategi ini. Misalnya, Anda dapat mencoba mengubah parameter panjang Bollinger Bands, atau menyesuaikan ambang overbought dan oversold dari RSI. Anda juga dapat mencoba untuk memperkenalkan indikator lain untuk membangun kombinasi multi-indikator. Ini dapat meningkatkan ruang keuntungan dan stabilitas strategi.
Strategi ini menggabungkan indikator BB ganda dan indikator RSI, dan memperoleh parameter optimal melalui metode pembelajaran mesin untuk mencapai pengembalian yang tinggi dan tingkat risiko yang dapat dikontrol.
/*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)