Estratégia de negociação quantitativa de médias móveis duplas

Autora:ChaoZhang, Data: 2023-12-29 11:03:14
Tags:

img

Resumo

Esta estratégia é concebida com base nos indicadores técnicos da média móvel e do volume de negociação para uma estratégia quantitativa de longo prazo que siga a tendência. Quando o preço de fechamento está acima da linha da média móvel de 20 dias e o volume de compra do dia é maior que o volume de venda e o volume médio de negociação nos últimos n dias, o mercado é considerado em um estado de alta e é hora de comprar. Quando o preço de fechamento rompe abaixo do trilho inferior e o volume de venda do dia é maior que o volume de compra e o volume médio de negociação nos últimos n dias, o mercado é considerado em um estado de baixa e é hora de vender.

Princípio da estratégia

A estratégia baseia-se principalmente em dois indicadores de avaliação:

  1. Linhas de média móvel dupla: Calcule a linha de 20 dias e a linha de 60 dias. Quando a linha de 20 dias cruza acima da linha de 60 dias, o mercado é considerado em uma tendência de alta. Quando a linha de 20 dias cruza abaixo da linha de 60 dias, o mercado é considerado em uma tendência de queda.

  2. Volume de negociação: Calcule o volume de compra e volume de venda diários. Se o volume de compra for maior que o volume de venda e maior que o volume médio de negociação nos últimos n dias, determina-se que o mercado é de alta. Se o volume de venda for maior que o volume de compra e maior que o volume médio de negociação nos últimos n dias, determina-se que o mercado é de baixa.

A estratégia e a lógica de negociação específicas são as seguintes:

Go long: Quando o preço de fechamento está acima da linha média móvel de 20 dias e o volume de compra do dia é maior que o volume de venda e o volume médio de negociação nos últimos n dias, o mercado é considerado de alta.

Se o preço de fechamento estiver abaixo da linha inferior e o volume de venda do dia for maior do que o volume de compra e o volume médio de negociação nos últimos n dias, o mercado é considerado de baixa.

Tomada de lucro e stop loss: defina níveis razoáveis de tomada de lucro e stop loss para bloquear lucros ou reduzir perdas. Por exemplo, quando o preço sobe 5% acima do preço de entrada, tire lucro; quando a perda atinge 10%, pare de perder; ou quando o preço atinge uma nova alta recente e depois retira-se em certa medida, tire lucro.

Análise das vantagens

A estratégia apresenta as seguintes vantagens:

  1. A combinação de duas linhas de média móvel e indicadores de volume de negociação evita os pontos cegos do julgamento de um único indicador técnico.

  2. O uso de Bandas de Bollinger com diferentes parâmetros determina preços de entrada mais precisos.

  3. A estratégia de captação de lucros e stop loss é razoável, o que ajuda a bloquear lucros e controlar riscos.

  4. Bons resultados de backtesting com retornos estáveis, que podem ser realmente aplicados à negociação quantitativa.

Análise de riscos

A estratégia apresenta também alguns riscos:

  1. As estratégias de média móvel dupla tendem a produzir sinais falsos e precisam ser filtradas por indicadores de volume.

  2. As configurações incorretas dos parâmetros Bollinger Bands podem levar a entradas excessivamente frequentes ou escassas.

  3. Pontos de captação de lucro fixo e stop loss inadequados podem afetar os retornos da estratégia.

  4. Para o backtesting é necessária uma grande quantidade de dados históricos, podendo ainda ocorrer perdas inesperadas na negociação ao vivo.

Direcção de otimização

A estratégia pode ser otimizada nos seguintes aspectos:

  1. Otimizar os parâmetros do sistema de médias móveis para encontrar a combinação ideal de médias móveis.

  2. Otimizar os parâmetros das bandas de Bollinger para uma entrada mais precisa.

  3. Ajustar dinamicamente os pontos de captação de lucro e de stop loss de acordo com as condições de mercado para estabelecer rácios razoáveis de risco-recompensa.

  4. Aumentar o julgamento de outros indicadores técnicos, como MACD, KD, etc., para melhorar a precisão da estratégia.

  5. Usar métodos de aprendizagem de máquina para encontrar automaticamente parâmetros ideais para tornar as estratégias mais robustas.

Resumo

No geral, esta é uma estratégia quantitativa de negociação muito prática com bom desempenho de backtesting. É fácil de implementar, com riscos controláveis, e é uma estratégia estável adequada para negociação ao vivo, o que vale a pena aprender para os traders quantitativos.


/*backtest
start: 2023-12-21 00:00:00
end: 2023-12-28 00:00:00
period: 1m
basePeriod: 1m
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/
// © KAIST291

//@version=4
strategy("prototype",initial_capital=0.01,commission_type=strategy.commission.percent,commission_value=0.1, format=format.volume, precision=0,overlay=true)
// SETTING //
length1=input(1)
length3=input(3)
length7=input(7)
length14=input(14)
length20=input(20)
length60=input(60)
length120=input(120)
ma1= sma(close,length1)
ma3= sma(close,length3)
ma7= sma(close,length7)
ma14=sma(close,length14)
ma20=sma(close,length20)
ma60=sma(close,length60)
ma120=sma(close,length120)
rsi=rsi(close,14)
// BUYING VOLUME AND SELLING VOLUME //
BV = iff( (high==low), 0, volume*(close-low)/(high-low))
SV = iff( (high==low), 0, volume*(high-close)/(high-low))
vol = iff(volume > 0, volume, 1)
dailyLength = input(title = "Daily MA length", type = input.integer, defval = 50, minval = 1, maxval = 100)
weeklyLength = input(title = "Weekly MA length", type = input.integer, defval = 10, minval = 1, maxval = 100)
//-----------------------------------------------------------
Davgvol = sma(volume, dailyLength)
Wavgvol = sma(volume, weeklyLength)
//-----------------------------------------------------------
length = input(20, minval=1)
src = input(close, title="Source")
mult = input(2.0, minval=0.001, maxval=50, title="StdDev")
mult2= input(1.5, minval=0.001, maxval=50, title="exp")
mult3= input(1.0, minval=0.001, maxval=50, title="exp1")
basis = sma(src, length)
dev = mult * stdev(src, length)
upper = basis + dev
lower = basis - dev
dev2= mult2 * stdev(src, length)
Supper= basis + dev2
Slower= basis - dev2
dev3= mult3 * stdev(src, length)
upper1= basis + dev3
lower1= basis - dev3
offset = input(0, "Offset", type = input.integer, minval = -500, maxval = 500)
plot(basis, "Basis", color=#FF6D00, offset = offset)
p1 = plot(upper, "Upper", color=#2962FF, offset = offset)
p2 = plot(lower, "Lower", color=#2962FF, offset = offset)
fill(p1, p2, title = "Background", color=color.rgb(33, 150, 243, 95))
//----------------------------------------------------
exit=(close-strategy.position_avg_price / strategy.position_avg_price*100)
bull=(close>Supper and BV>SV and BV>Davgvol)
bull2=(close>ma20  and BV>SV and BV>Davgvol)
bux =(close<Supper and close>Slower and volume<Wavgvol)
bear=(close<Slower and close<lower and SV>BV and SV>Wavgvol)
hi=highest(exit,10)
imInATrade = strategy.position_size != 0
highestPriceAfterEntry = valuewhen(imInATrade, high, 0)
// STRATEGY LONG //
if (bull and close>ma3 and ma20>ma60 and rsi<70)
    strategy.entry("Long",strategy.long,0.1)

if (strategy.position_avg_price*1.05<close)
    strategy.close("Long",0.1)

else if (highestPriceAfterEntry*0.999<close and close>strategy.position_avg_price*1.002)
    strategy.close("Long",0.1)
else if (highestPriceAfterEntry*0.997<close and close>strategy.position_avg_price*1.002)
    strategy.close("Long",0.1)
else if (highestPriceAfterEntry*0.995<close and close>strategy.position_avg_price*1.002)
    strategy.close("Long",0.1)
else if (strategy.openprofit < strategy.position_avg_price*0.9-close)
    strategy.close("Long",0.1)
//////////////////////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////////////////////


Mais.