Estratégias de negociação quantitativa baseadas em faixa de brinquedos e MACD

Autora:ChaoZhang, Data: 2024-02-23 14:30
Tags:

基于布林带和MACD的量化交易策略

Resumo

A estratégia é uma estratégia de negociação quantitativa baseada no Brin Band e no indicador MACD. Ele combina a negociação de ruptura do Brin Band com o rastreamento de tendências do MACD, com o objetivo de melhorar a qualidade dos sinais de negociação.

Princípios estratégicos

A estratégia baseia-se principalmente nos indicadores do Brainstorm e do MACD para julgar os sinais de negociação.

Os indicadores de faixa de brinquedos são compostos de meio, alto e baixo. O sinal de compra é gerado quando o preço quebra o trajeto abaixo; o sinal de venda é gerado quando o preço quebra o trajeto acima. A estratégia usa o princípio de ruptura do faixa de brinquedos para identificar os sinais de ruptura mais fortes.

O indicador MACD reflete a relação entre as médias móveis de curto e longo prazo, e determina a hora de compra e venda através de um forco de ouro, ou forco morto, da linha de diferencial e da linha de sinal. A estratégia combina o uso do indicador MACD para filtrar os sinais de negociação da faixa de pólvora, produzindo um sinal de compra mais eficaz quando a linha de sinal é quebrada acima da linha de diferencial.

No geral, a estratégia combina o seguimento de tendências da faixa de brinquedos com a vantagem da linha média móvel do MACD, com o objetivo de capturar maiores flutuações do mercado em tendências fortes.

Vantagens estratégicas

  1. A combinação de uma faixa de brinquedos e um indicador MACD torna os sinais de negociação mais confiáveis.

  2. No mercado de tendência, o seguimento da tendência da faixa de brinquedo e o cruzamento da média móvel do MACD podem produzir sinais de entrada mais fortes.

  3. A avaliação por dois indicadores pode efetivamente filtrar sinais falsos e reduzir o risco de negociação.

  4. Os parâmetros estratégicos de otimização têm um espaço grande e podem ser ajustados de acordo com diferentes variedades e ciclos.

Risco estratégico

  1. Em mercados turbulentos, os sinais de negociação gerados pela faixa de Bryn e o MACD podem ser frequentes e trazem risco de arbitragem.

  2. O indicador MACD apresenta três sinais de compra de forks de ouro em áreas baixas, podendo enfrentar riscos de reversão.

  3. A estratégia usa mais indicadores, otimização de parâmetros e maior dificuldade para testar a estratégia.

Para os riscos acima mencionados, pode ser controlado por meio de métodos como ajustes apropriados de tempo de detenção, configuração de linhas de stop loss, otimização de parâmetros e outros.

Estratégias de otimização

  1. Testar parâmetros de faixa de brinquedos de ciclo mais longo, reduzindo a frequência de transações.

  2. Otimizar os parâmetros da linha média do MACD rápido e lento para melhorar a sensibilidade do indicador.

  3. A adição de filtros para outros indicadores, como KDJ, RSI, etc., melhora a qualidade do sinal.

  4. Configure o stop loss dinâmico, o stop loss automático e controle o risco de uma única transação.

Resumo

A estratégia, que integra a negociação de rupturas na faixa de Bryn e a filtragem do indicador MACD, pode, em teoria, produzir sinais de negociação de alta qualidade. É esperado obter melhores resultados de reavaliação por meio de otimização de parâmetros e controle de riscos. Mas nenhuma estratégia pode evitar completamente os prejuízos e é necessário avaliar cuidadosamente o efeito real da negociação.


/*backtest
start: 2024-01-01 00:00:00
end: 2024-01-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Nabz-BBMACD-2022-V1.1", shorttitle="BBM-Nabz", overlay=true)


// My 1st Pine Scrpt Indicator
// Work on best on 1Hr Chart
// Open for Help/Donations.


var float lastentry=1
int result = 0
float x = 0
drawshape = false

/////////////EMA
shortest = ta.ema(close, 20)
short = ta.ema(close, 50)
longer = ta.ema(close, 100)
longest = ta.ema(close, 200)

plot(shortest, color = color.red)
plot(short, color = color.orange)
plot(longer, color = color.aqua)
plot(longest, color = color.blue)

///////////// RSI
RSIlength = input(6,title="RSI Period Length") 
RSIoverSold = 50
RSIoverBought = 50
price = close
vrsi = ta.rsi(price, RSIlength)


///////////// Bollinger Bands
BBlength = input.int(200, minval=1,title="Bollinger Period Length")
BBmult = 2 // input(2.0, minval=0.001, maxval=50,title="Bollinger Bands Standard Deviation")
BBbasis = ta.sma(price, BBlength)
BBdev = BBmult * ta.stdev(price, BBlength)
BBupper = BBbasis + BBdev
BBlower = BBbasis - BBdev
source = close
buyEntry = ta.crossover(source, BBlower)
sellEntry = ta.crossunder(source, BBupper)



////////////// MACD
fastLength = input(12)
slowlength = input(26)
MACDLength = input(9)
MACD = ta.ema(close, fastLength) - ta.ema(close, slowlength)
aMACD = ta.ema(MACD, MACDLength)
delta = MACD - aMACD


///////////// Colors
switch1=input(true, title="Enable Bar Color?")
switch2=input(true, title="Enable Background Color?")
TrendColor = RSIoverBought and (price[1] > BBupper and price < BBupper) and BBbasis < BBbasis[1] ? color.red : RSIoverSold and (price[1] < BBlower and price > BBlower) and BBbasis > BBbasis[1] ? color.green : na


///////////Strategy

bool tcu = not (ta.crossunder(price[0],shortest[0]))


if (((price[1]<BBlower[1]) and (ta.crossover(price,BBlower))))
    lastentry := low[1]
    strategy.entry("RSI_BB_L", strategy.long, comment="Buy 1st IF")
    
if (((ta.crossover(delta, 0.0) and (ta.crossover(price,BBlower)))))
    lastentry := low[1]
    strategy.entry("RSI_BB_L", strategy.long, comment="Buy 2nd IF")    
    
if (((ta.crossover(delta, 0.0)) and (low[0]>shortest[0])) and (price[1]<low))
    lastentry := low[1]
    strategy.entry("RSI_BB_L", strategy.long, comment="Buy 3rd IF")   //else

if (((ta.crossover(delta, 0.01)) and (high[1]<BBupper)) and (tcu))
    lastentry := low[1]
    strategy.entry("RSI_BB_L", strategy.long, comment="Buy 4th IF")

       
if ((ta.crossunder(low[0],shortest[0]) and close<shortest))
    strategy.close(id="RSI_BB_L", comment="Close by 1st IF")
    
    
    
if (price<lastentry)
    drawshape := true
    
if (price<strategy.opentrades.entry_price(0)/1.01175734321249)
    strategy.close(id="RSI_BB_L", comment="Close by 2nd IF")



plot(strategy.opentrades.entry_price(0), color=color.yellow)


Mais informações