Estratégia de negociação quantitativa do indicador Double BB RSI


Data de criação: 2024-01-29 10:33:43 última modificação: 2024-01-29 10:33:43
cópia: 0 Cliques: 785
1
focar em
1617
Seguidores

Estratégia de negociação quantitativa do indicador Double BB RSI

Visão geral

Esta estratégia é uma estratégia de negociação quantitativa baseada no indicador Bollinger Bands e no indicador Relative Strength Index (RSI). A estratégia usa métodos de aprendizado de máquina para analisar e otimizar dados históricos de cerca de 1 ano usando a linguagem Python para encontrar o melhor conjunto de parâmetros.

Princípio da estratégia

Os sinais de negociação da estratégia são derivados de um julgamento combinado de duplas Bollinger Bands e RSI. Dentre eles, o Bollinger Bands é um canal de flutuação calculado com base na banda de desvio padrão do preço. O sinal de negociação é gerado quando o preço se aproxima ou toca o canal de flutuação.

Especificamente, um sinal de compra é gerado quando o preço de fechamento está abaixo do desvio padrão de 1.0 e o RSI é maior que 42. Um sinal de venda é gerado quando o preço de fechamento está acima do desvio padrão de 1.0 e o RSI é maior que 70.

Análise de vantagens

A maior vantagem desta estratégia reside na precisão dos parâmetros. Através de métodos de aprendizagem de máquina, os parâmetros são obtidos com o melhor índice de Sharpe, depois de um retorno completo. Isso garante a rentabilidade da estratégia e controla o risco. Além disso, a combinação de dois indicadores aumenta a precisão e a taxa de sucesso do sinal.

Análise de Riscos

O risco desta estratégia é derivado principalmente da configuração do ponto de parada. Se o ponto de parada for definido de forma excessiva, não será possível controlar efetivamente os prejuízos. Além disso, o risco também aumenta se o ponto de parada for calculado incorretamente com outras despesas de transação, como taxas de processamento e pontos de transação.

Direção de otimização

A estratégia ainda tem espaço para otimização adicional. Por exemplo, pode-se tentar alterar os parâmetros de comprimento das Bandas de Bollinger ou ajustar o limiar de OPA do RSI. Além disso, pode-se tentar introduzir outros indicadores, construindo uma combinação de vários indicadores. Isso pode aumentar o espaço de ganho e a estabilidade da estratégia.

Resumir

A estratégia combina o indicador duplo BB e o indicador RSI, obtendo os melhores parâmetros por meio de métodos de aprendizagem de máquina, alcançando uma alta taxa de retorno e um nível de risco controlável. Tem vantagens em ambos os sentidos: julgamento de portfólio de indicadores e otimização de parâmetros. Com melhoria contínua, a estratégia tem potencial para ser uma excelente estratégia de negociação quantitativa.

Código-fonte da estratégia
/*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)