Esta estrategia es una estrategia de negociación cuantitativa basada en el indicador Bollinger Bands y el indicador Relative Strength Index (RSI). Esta estrategia utiliza métodos de aprendizaje automático para probar y optimizar parámetros durante casi 1 año de datos históricos utilizando el lenguaje Python, encontrando la combinación óptima de parámetros.
Las señales comerciales de esta estrategia provienen del juicio combinado de dos bandas de Bollinger e indicadores RSI. Entre ellos, el indicador de bandas de Bollinger es el canal de volatilidad calculado en función de la desviación estándar del precio. Genera señales comerciales cuando el precio se acerca o toca el canal. El indicador RSI juzga la situación de sobrecompra y sobreventa del precio.
Específicamente, una señal de compra se genera cuando el precio de cierre está por debajo del rieles inferior de 1.0 desviaciones estándar y el RSI es mayor que 42 al mismo tiempo. Una señal de venta se genera cuando el precio de cierre está por encima del rieles superior de 1.0 desviaciones estándar y el RSI es mayor que 70 al mismo tiempo. Además, esta estrategia también establece dos conjuntos de parámetros BB y RSI, que se utilizan para las posiciones de cierre de entrada y stop loss respectivamente. Estos parámetros son valores óptimos obtenidos a través de extensa backtesting y aprendizaje automático.
La mayor ventaja de esta estrategia es la precisión de los parámetros. A través de los métodos de aprendizaje automático, cada parámetro se obtiene a través de pruebas de retroceso integrales para lograr la mejor relación Sharpe. Esto garantiza tanto la tasa de retorno de la estrategia como los riesgos de control. Además, la combinación de indicadores dobles también mejora la precisión y la tasa de ganancia de las señales.
El principal riesgo de esta estrategia proviene del establecimiento de puntos de stop loss. Si el punto de stop loss se establece demasiado grande, no controlará eficazmente las pérdidas. Además, si el punto de stop loss no calcula adecuadamente otros costos de negociación como comisiones y deslizamiento, también aumentará los riesgos. Para reducir los riesgos, se recomienda ajustar el parámetro de magnitud de stop loss para reducir la frecuencia de negociación, mientras se calcula una posición de stop loss razonable.
Por ejemplo, puede intentar cambiar los parámetros de longitud de las bandas de Bollinger, o ajustar los umbrales de sobrecompra y sobreventa del RSI. También puede intentar introducir otros indicadores para construir una combinación de múltiples indicadores. Esto puede aumentar el espacio de ganancia y la estabilidad de la estrategia.
Esta estrategia combina indicadores dobles de BB e indicadores de RSI, y obtiene parámetros óptimos a través de métodos de aprendizaje automático para lograr altos rendimientos y niveles de riesgo controlables. Tiene las ventajas de un juicio combinado de indicadores y optimización de parámetros. Con una mejora continua, esta estrategia tiene el potencial de convertirse en una excelente estrategia comercial cuantitativa.
/*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)