Estratégia de negociação quantitativa de vitória impecável baseada em indicadores BB duplo e RSI

Autora:ChaoZhang, Data: 2024-01-29 10:33:43
Tags:

img

Resumo

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.

Princípios de estratégia

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.

Análise das vantagens

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.

Análise de riscos

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.

Orientações de otimização

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.

Resumo

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)


Mais.