Estratégia de negociação quantitativa de múltiplos indicadores


Data de criação: 2023-10-25 18:06:44 última modificação: 2023-10-25 18:06:44
cópia: 0 Cliques: 645
1
focar em
1617
Seguidores

Estratégia de negociação quantitativa de múltiplos indicadores

Visão geral

Esta estratégia usa vários indicadores técnicos em combinação para tomar decisões de negociação de longo e curto prazo. Inclui principalmente indicadores como linhas de Brin, RSI e ADX, além de determinar a direção da tendência em combinação com a linha de equilíbrio.

Princípio da estratégia

A estratégia é baseada em um Bollinger Band para avaliar oscilações de preços, onde o estreitamento da Bollinger Band representa a redução da flutuação de preços e a possibilidade de uma ruptura; e, em combinação com o RSI, para avaliar o fenômeno de sobrevenda e sobrecompra, onde o RSI acima de 70 é a zona de sobrecompra e abaixo de 30 é a zona de sobrevenda. Quando a Bollinger Band se estreita, o RSI está perto da zona de sobrecompra.

Além disso, a estratégia também usa o ADX para determinar a intensidade da tendência de preços. Quando o ADX é alto, representando uma forte tendência, pode-se optar por uma negociação em andamento; Quando o ADX é baixo, representando uma tendência invisível, pode-se considerar uma negociação em reversão. Finalmente, combinando a linha de equilíbrio para determinar a direção da tendência de longo prazo, se o preço estiver em uma tendência ascendente, pode-se considerar comprar; Se o preço estiver em uma tendência descendente, pode-se considerar vender.

Especificamente, quando a faixa de Brin se estreita, o indicador RSI está perto da zona de sobrevenda e o preço cai do trilho, o mercado pode se recuperar, então considere mais; quando a faixa de Brin se estreita, o indicador RSI está perto da zona de venda e o preço se rompe do trilho, o mercado pode cair, então considere o vazio. Além disso, se o ADX for alto, o preço está na tendência de alta, pode adicionar mais posição; se o ADX for baixo, o preço está na tendência de queda, pode adicionar posição e vazio.

Análise de vantagens

Esta estratégia de combinação de indicadores tem as seguintes vantagens:

  1. A integração de vários indicadores técnicos aumenta a precisão e a robustez dos sinais de negociação. Um único indicador é suscetível a falhas e erros, enquanto uma combinação de vários indicadores pode verificar o sinal e evitar transações erradas.

  2. Considere as tendências e oscilações, adapta-se a diferentes situações de mercado, flexibilidade de mudança. Negociação de tendências busca grandes tendências, negociação de choques com objetivo de obter pequenos lucros.

  3. Ao mesmo tempo, fazer mais “depositivos” pode reduzir o risco de posição no mercado unilateral e evitar situações extremas.

  4. O set de stop loss limita alguns lucros e limita as perdas quando as posições vão mal.

  5. A otimização de parâmetros permite melhorar continuamente a eficácia da estratégia e adaptar-se às mudanças do mercado.

Análise de Riscos

A estratégia também apresenta alguns riscos que devem ser lembrados:

  1. A combinação de múltiplos indicadores aumenta a complexidade da estratégia, e a configuração inadequada dos parâmetros pode reduzir a eficácia.

  2. O uso excessivo de indicadores técnicos e a negligência de informações básicas podem levar a sinais de negociação imprecisos.

  3. Quando o indicador produz um sinal, a situação pode ter mudado um pouco, existindo o risco de seguir a alta e a queda. É necessário esperar adequadamente para voltar a tocar.

  4. A abertura de binários em múltiplos espaços aumenta a frequência de negociação, aumenta os custos de comissão e a pressão financeira. É necessário controlar o tamanho da posição.

  5. Há um certo risco de curva de adequação, e é melhor testar a robustez da estratégia em vários mercados.

O risco pode ser controlado por meio de métodos como stop loss rigoroso, adição prudente de posições e controle racional de posições. Em geral, a estratégia tem uma forte utilidade.

Direção de otimização

A estratégia pode ser melhorada nos seguintes aspectos:

  1. Teste diferentes combinações de parâmetros para encontrar o parâmetro ideal. Otimizar os parâmetros pode ser feito por métodos como progresso passo a passo, pesquisa aleatória e algoritmos genéticos.

  2. Adicionar mais indicadores, como KDJ, William, etc., formando um grupo de indicadores e aumentando a robustez da estratégia.

  3. Optimizar o gerenciamento de posições e controlar o risco por meio de ajustes dinâmicos de posições.

  4. Combinando algoritmos de aprendizagem de máquina com modelos quantitativos para determinar tendências de preços e tendências futuras.

  5. Testar estratégias em diferentes variedades, períodos de tempo e mercados para melhorar a adequação.

  6. Optimizar o tempo de entrada e saída para capturar tendências em um estágio inicial e sair antes da reversão.

  7. A utilização de métodos como o rastreamento de stop loss e o stop loss móvel para bloquear os lucros e controlar os riscos.

  8. Adicionar fatores fundamentais e a estrutura do mercado para filtrar os sinais gerados pelos indicadores técnicos.

Resumir

Esta estratégia utiliza vários indicadores para determinar a tendência dos preços e automatizar a negociação. A estratégia tem vantagens como verificação de grupos de indicadores, negociação bidirecional e parada de perda, o que pode melhorar a eficiência da negociação.

Código-fonte da estratégia
/*backtest
start: 2023-09-24 00:00:00
end: 2023-10-24 00:00:00
period: 2h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © The_Bigger_Bull
//@version=5
strategy("Best TradingView Strategy", overlay=true, margin_long=0, margin_short=0)
//Bollinger Bands
source1 = close
length1 = input.int(15, minval=1)
mult1 = input.float(2.0, minval=0.001, maxval=50)
basis1 = ta.sma(source1, length1)
dev1 = mult1 * ta.stdev(source1, length1)
upper1 = basis1 + dev1
lower1 = basis1 - dev1
//buyEntry = ta.crossover(source1, lower1)
//sellEntry = ta.crossunder(source1, upper1)

//RSI
ma(source, length, type) =>
    switch type
        "SMA" => ta.sma(source, length)
        "Bollinger Bands" => ta.sma(source, length)
        "EMA" => ta.ema(source, length)
        "SMMA (RMA)" => ta.rma(source, length)
        "WMA" => ta.wma(source, length)
        "VWMA" => ta.vwma(source, length)

rsiLengthInput = input.int(14, minval=1, title="RSI Length", group="RSI Settings")
rsiSourceInput = input.source(close, "Source", group="RSI Settings")
maTypeInput = input.string("SMA", title="MA Type", options=["SMA", "Bollinger Bands", "EMA", "SMMA (RMA)", "WMA", "VWMA"], group="MA Settings")
maLengthInput = input.int(14, title="MA Length", group="MA Settings")
bbMultInput = input.float(2.0, minval=0.001, maxval=50, title="BB StdDev", group="MA Settings")

up = ta.rma(math.max(ta.change(rsiSourceInput), 0), rsiLengthInput)
down = ta.rma(-math.min(ta.change(rsiSourceInput), 0), rsiLengthInput)
rsi = down == 0 ? 100 : up == 0 ? 0 : 100 - (100 / (1 + up / down))
rsiMA = ma(rsi, maLengthInput, maTypeInput)
isBB = maTypeInput == "Bollinger Bands"

//plot(rsi, "RSI", color=#7E57C2)
//plot(rsiMA, "RSI-based MA", color=color.yellow)
rsiUpperBand = hline(70, "RSI Upper Band", color=#787B86)
hline(50, "RSI Middle Band", color=color.new(#787B86, 50))
rsiLowerBand = hline(30, "RSI Lower Band", color=#787B86)
fill(rsiUpperBand, rsiLowerBand, color=color.rgb(126, 87, 194, 90), title="RSI Background Fill")
bbUpperBand = plot(isBB ? rsiMA + ta.stdev(rsi, maLengthInput) * bbMultInput : na, title = "Upper Bollinger Band", color=color.green)
bbLowerBand = plot(isBB ? rsiMA - ta.stdev(rsi, maLengthInput) * bbMultInput : na, title = "Lower Bollinger Band", color=color.green)
fill(bbUpperBand, bbLowerBand, color= isBB ? color.new(color.green, 90) : na, title="Bollinger Bands Background Fill")

//ADX

adxlen = input(14, title="ADX Smoothing")
dilen = input(14, title="DI Length")
dirmov(len) =>
	up1 = ta.change(high)
	down1 = -ta.change(low)
	plusDM = na(up1) ? na : (up1 > down1 and up1 > 0 ? up1 : 0)
	minusDM = na(down1) ? na : (down1 > up1 and down1 > 0 ? down1 : 0)
	truerange = ta.rma(ta.tr, len)
	plus = fixnan(100 * ta.rma(plusDM, len) / truerange)
	minus = fixnan(100 * ta.rma(minusDM, len) / truerange)
	[plus, minus]
adx(dilen, adxlen) =>
	[plus, minus] = dirmov(dilen)
	sum = plus + minus
	adx = 100 * ta.rma(math.abs(plus - minus) / (sum == 0 ? 1 : sum), adxlen)
sig = adx(dilen, adxlen)




out = ta.sma(close, 14)

sma1=ta.sma(close,55)

ema200=ta.ema(close,200)



longCondition = (out>sma1) and ta.crossover(source1, lower1)

if (longCondition )
    strategy.entry("long", strategy.long)
    
shortCondition = (out<sma1) and ta.crossunder(source1, lower1)

if (shortCondition )
    strategy.entry("short", strategy.short)
    
    
stopl=strategy.position_avg_price-50
tptgt=strategy.position_avg_price+100
stopshort=strategy.position_avg_price+50
tptgtshort=strategy.position_avg_price-100

strategy.exit("longclose","long",trail_offset=5,trail_points=45,when=ta.crossover(sma1,out))
strategy.exit("shortclose","short",trail_offset=5,trail_points=45,when=ta.crossover(out,sma1))

    
//if strategy.position_avg_price<0
    
    
plot(sma1 , color=color.blue)
plot(out, color=color.green)
//plot(ema200,color=color.red)