Strategi perdagangan kuantitatif kemenangan yang sempurna berdasarkan indikator BB ganda dan RSI

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

img

Gambaran umum

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.

Prinsip Strategi

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.

Analisis Keuntungan

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.

Analisis Risiko

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.

Arahan Optimasi

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.

Ringkasan

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)


Lebih banyak