Esta estratégia é uma estratégia de negociação quantitativa baseada no indicador Bollinger Bands e no indicador Relative Strength Index (RSI). Esta estratégia usa métodos de aprendizado de máquina para testar e otimizar parâmetros em quase 1 ano de dados históricos usando a linguagem Python, encontrando a combinação ideal de parâmetros.
Os sinais de negociação desta estratégia vêm do julgamento combinado de Bandas de Bollinger duplas e indicadores RSI. Entre eles, o indicador de Bandas de Bollinger é o canal de volatilidade calculado com base no desvio padrão do preço. Ele gera sinais de negociação quando o preço se aproxima ou toca o canal. O indicador RSI julga a situação de sobrecompra e sobrevenda do preço.
Especificamente, um sinal de compra é gerado quando o preço de fechamento está abaixo do trilho inferior de 1.0 desvios padrão e o RSI é maior que 42 ao mesmo tempo. Um sinal de venda é gerado quando o preço de fechamento está acima do trilho superior de 1.0 desvios padrão e o RSI é maior que 70 ao mesmo tempo. Além disso, essa estratégia também define dois conjuntos de parâmetros BB e RSI, que são usados para posições de fechamento de entrada e stop loss, respectivamente. Esses parâmetros são valores ideais obtidos por meio de backtesting extensivo e aprendizado de máquina.
A maior vantagem desta estratégia é a precisão dos parâmetros. Através de métodos de aprendizado de máquina, cada parâmetro é obtido através de backtesting abrangente para alcançar a melhor taxa de Sharpe. Isso garante tanto a taxa de retorno da estratégia quanto os riscos. Além disso, a combinação de indicadores duplos também melhora a precisão e a taxa de vitória dos sinais.
O principal risco desta estratégia vem da definição de pontos de stop loss. Se o ponto de stop loss for definido muito grande, ele não controlará efetivamente as perdas. Além disso, se o ponto de stop loss não calcular adequadamente outros custos de negociação, como comissões e deslizamento, ele também aumentará os riscos. Para reduzir os riscos, recomenda-se ajustar o parâmetro de magnitude de stop loss para reduzir a frequência de negociação, enquanto se calcula uma posição de stop loss razoável.
A estratégia de Bollinger Bands é uma estratégia de longo prazo, que pode ser usada para otimizar a sua estratégia de longo prazo.
Esta estratégia combina indicadores de BB duplo e indicadores de RSI, e obtém parâmetros ideais através de métodos de aprendizado de máquina para alcançar altos retornos e níveis de risco controláveis.
/*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)