Com base na estratégia de média móvel dupla de negociação quantitativa


Data de criação: 2023-12-29 11:03:14 última modificação: 2023-12-29 11:03:14
cópia: 2 Cliques: 659
1
focar em
1621
Seguidores

Com base na estratégia de média móvel dupla de negociação quantitativa

Visão geral

Esta estratégia baseia-se em indicadores técnicos de média móvel e volume de transações, projetando uma estratégia quantitativa de supressão de queda em uma longa linha. Quando o preço da ação está na linha de 20 dias e o volume de compra do dia é maior que o volume de venda e maior que o volume de transações médias dos últimos n dias, o mercado é considerado em um estado de alta, a compra é feita; Quando o preço da ação despenca e o volume de vendas do dia é maior que o volume de compra e maior que o volume de transações médias dos últimos n dias, o mercado é considerado em um estado de baixa, a venda é feita.

Princípio da estratégia

A estratégia baseia-se em dois indicadores:

  1. Linha de dupla média: Calcule a linha de 20 dias e a linha de 60 dias. Quando a linha de 20 dias atravessa a linha de 60 dias, o mercado é considerado em um estado de alta; Quando a linha de 20 dias atravessa a linha de 60 dias, o mercado é considerado em um estado de baixa.

  2. Volume de transação: calcula o volume de compra e venda de transações por dia, se o volume de compra for maior que o volume de venda e maior que o volume de transações médias dos últimos n dias, será julgado como uma operação multi-cabeça; se o volume de vendas for maior que o volume de compra e maior que o volume de transações médias dos últimos n dias, será julgado como uma operação em branco.

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

A entrada de vários pontos: quando o preço de fechamento está na linha do dia 20 e o volume de compra do dia é maior do que o volume de venda e o volume médio de transações dos últimos n dias, o mercado é considerado em um estado de venda, com base na taxa de flutuação calculada a faixa de Brin, se o preço de fechamento estiver entre a faixa de Brin e a faixa inferior, a entrada é mais.

Entrada em branco: quando o preço de fechamento cai para baixo, e o volume de vendas do dia é maior do que o volume de compras e o volume de transações médias dos últimos n dias, considere que o mercado está em um estado de baixa, calcule a faixa de Brin com base na taxa de flutuação e, se o preço de fechamento for menor do que a faixa de Brin, faça a entrada em branco.

Parar e parar: estabelecer um limite razoável de parada e perda, fixar ganhos ou reduzir perdas. Parar quando o preço da ação aumenta significativamente em 5% em relação ao preço de entrada; parar quando o prejuízo atinge 10%; ou parar quando o preço da ação retrocede de certa forma após atingir um novo máximo recente.

Análise de vantagens

A estratégia tem as seguintes vantagens:

  1. A combinação de dupla linha média e indicadores de volume de transação evita a zona cega de julgamento de um único indicador técnico.

  2. A banda de Brin, com diferentes parâmetros, determina o preço de transação específico, o que torna a entrada mais precisa.

  3. A estratégia de stop-loss é razoável e é útil para bloquear o lucro e controlar o risco.

  4. A retrospectiva é boa, o lucro estável, e pode ser usado na prática para transações quantitativas.

Análise de Riscos

A estratégia também apresenta alguns riscos:

  1. A estratégia de dupla equilíbrio é propensa a falhas de sinais e requer filtragem de indicadores de energia combinada.

  2. A configuração inadequada dos parâmetros da faixa de Bryn pode levar a entradas muito frequentes ou escassas.

  3. A configuração incorreta do ponto de parada fixo pode afetar o lucro da estratégia.

  4. A falta de dados históricos requer uma grande quantidade de testes de retrospectiva, o que pode levar a perdas acidentais no disco rígido.

Direção de otimização

A estratégia pode ser melhorada em vários aspectos:

  1. Optimizar os parâmetros de um sistema de equilíbrio para encontrar a melhor combinação de equilíbrio.

  2. Optimizar os parâmetros da faixa de Bryn para uma entrada mais precisa.

  3. Ajustar dinamicamente o ponto de parada e o ponto de parada, definindo uma taxa de ganho e perda razoável de acordo com a situação do mercado.

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

  5. O uso de métodos de aprendizagem de máquina para encontrar parâmetros de otimização automática torna as estratégias mais robustas.

Resumir

Esta estratégia é, em geral, uma estratégia de negociação quantitativa muito prática, de bom desempenho, fácil de implementar, de risco controlável, uma estratégia estável adequada para o mercado real, que vale a pena ser aprendida pelos comerciantes quantitativos. Claro, o espaço para otimização da estratégia ainda é grande, e espera-se que mais especialistas em negociação quantitativa a melhorem.

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

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