Estratégia de negociação algorítmica Golden Cross e Death Cross de média móvel dupla


Data de criação: 2024-01-29 15:11:58 última modificação: 2024-01-29 15:11:58
cópia: 0 Cliques: 590
1
focar em
1617
Seguidores

Estratégia de negociação algorítmica Golden Cross e Death Cross de média móvel dupla

Visão geral

A estratégia de negociação de dupla média móvel crossover é uma estratégia de negociação quantitativa que utiliza a média de ouro e a média de forquilhas para determinar entradas e saídas. A estratégia combina a média de diferentes períodos para formar filtros em várias camadas, o que reduz efetivamente os falsos sinais e aumenta a confiabilidade dos sinais de negociação.

Princípio da estratégia

A lógica central da estratégia é acompanhar 2 médias móveis de 3 períodos de tempo: 180 minutos, 60 minutos e 120 minutos. Quando a linha rápida atravessa a linha lenta da direção inferior, gera um sinal de garfo de ouro, representando a variedade em movimento múltiplo. Quando a linha rápida atravessa a linha lenta da direção superior, gera um sinal de garfo morto, representando a variedade em movimento vazio.

A estratégia começa a calcular a linha de 10 dias e a linha de 200 dias em períodos de 180 minutos e 60 minutos, respectivamente. Quando a linha de 10 dias de 180 minutos atravessa a linha de 200 dias em sentido descendente, gera um sinal de forquilha dourada; quando atravessa a linha de 200 dias em sentido superior, gera um sinal de forquilha morta. Isso equivale a um sinal de transação em um ciclo rápido.

Em seguida, a estratégia introduz a linha de 200 dias com um período de 120 minutos como a linha de controle. Apenas quando ocorre um garfo de ouro ou um garfo de morte, é decidido se a negociação deve ser iniciada ou não, julgando se a linha de 200 dias com um período de 60 minutos é superior ou inferior à linha de 200 dias com um período de 120 minutos.

Por exemplo, quando 180 minutos produzem um garfo de ouro, se a linha de 200 dias de 60 minutos for maior que a linha de 200 dias de 120 minutos, então você vai ver mais; somente com essa condição, você abrirá mais uma opção. Por outro lado, se a linha de 200 dias de 60 minutos for menor que a linha de 200 dias de 120 minutos, então você não vai ver mais e não abrirá a posição.

Em suma, a estratégia de criar filtros em camadas, aumentando a confiabilidade do sinal, através da comparação de relações entre diferentes períodos de tempo, pertence a uma estratégia de negociação de filtro comum.

Vantagens estratégicas

  • Confirmação de múltiplos ciclos, melhorando a precisão do sinal. Em comparação com o julgamento de um único ciclo, a estratégia usa três ciclos de 180 minutos, 60 minutos e 120 minutos para confirmar a relação de linha média, o que reduz significativamente os falsos sinais e melhora a qualidade do sinal de negociação.

  • Frequência de operação moderada. Comparada com a estratégia de negociação de alta frequência, a estratégia de negociação de baixa frequência, sem a necessidade de operações frequentes, é mais adequada para o acompanhamento manual.

  • Implementação simples e fácil de entender. A estratégia usa apenas indicadores de linha média, sem lógica complexa, é muito fácil de entender a implementação, o limiar é baixo e é adequado para praticantes iniciantes.

  • Pode ser otimizado de acordo com diferentes períodos e parâmetros. O período e o tipo de linha média da estratégia podem ser ajustados, podendo ser estudado um conjunto de parâmetros adequado para diferentes variedades e ambientes de mercado.

Risco estratégico

  • A estratégia baseia-se principalmente na relação de equilíbrio e tem um certo atraso na resposta às mudanças de preço, sendo fácil de perder uma rápida reversão.

  • É fácil parar em mercados com grandes turbulências. Quando os mercados estão em grandes turbulências, a correlação entre as linhas de equilíbrio pode se cruzar com frequência, resultando em aberturas e paradas frequentes. Isso aumenta os custos de negociação e o risco de perdas.

  • A estratégia é baseada principalmente na otimização de parâmetros para obter alfa. Esta dependência de resultados de um único conjunto de dados pode levar a problemas de otimização excessiva e de sobre-conformidade.

As soluções para os riscos são:

  • A redução apropriada dos parâmetros da linha média acelera a velocidade de reação.

  • Aumentar as condições de filtragem para evitar a abertura de posições frequentes em mercados turbulentos.

  • Testar dados de diferentes variedades e períodos de tempo para avaliar a robustez dos parâmetros.

Direção de otimização da estratégia

A estratégia ainda tem espaço para ser melhorada:

  • Experimente diferentes combinações de períodos e parâmetros de linha média para encontrar uma combinação de parâmetros mais eficiente. A combinação de parâmetros mais eficiente pode ser encontrada por meio de otimização por excesso de esforço e métodos de aprendizado de máquina.

  • Aumentar o volume e a confirmação de indicadores de tendência em grande escala. Isso pode filtrar ainda mais os sinais falsos, como não abrir posições quando o volume é insuficiente.

  • Combinação de modelos de aprendizagem profunda para prever a forma da curva. Usar modelos de aprendizagem profunda, como RNN, para fazer previsões de preços futuros, auxiliando a tomada de decisões.

  • O uso de linhas médias adaptáveis, melhorando a lógica de filtragem. Quando o mercado entra em um estado de agitação, ajuste dinamicamente o comprimento da linha média, reduzindo a frequência de abertura de posição.

Resumir

A estratégia de negociação de algoritmos de forquilhos-morto-forquilhos é uma estratégia de negociação de algoritmos de filtragem mais comum. A estratégia é fácil de implementar, é adequada para o aprendizado de iniciantes, e também pode ser ampliada e otimizada em várias dimensões.

Código-fonte da estratégia
/*backtest
start: 2024-01-01 00:00:00
end: 2024-01-28 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
strategy(shorttitle = "ALGO 3-1-2", title="ALGO 3h, 1h, 2h", overlay=true)

bool startLONGBOTandDEAL = false
bool stopLONGBOTandDEAL = false
bool openLONG = false
bool closeLONG = false
bool startSHORTBOTandDEAL = false
bool stopSHORTBOTandDEAL = false
bool openSHORT = false
bool closeSHORT = false

MA1Period = ema(close, 10)
MA2Period = ema(close, 200)
MA3Period = ema(close, 200)

MA1 = security(syminfo.tickerid, "180", MA1Period)
MA2 = security(syminfo.tickerid, "60", MA2Period)
MA3 = security(syminfo.tickerid, "120", MA3Period)

MA12Crossover = crossover(MA1, MA2)
MA12Crossunder = crossunder(MA1, MA2)
MA23Crossover = crossover(MA2, MA3)
MA23Crossunder = crossunder(MA2, MA3)

if MA23Crossover
    startLONGBOTandDEAL := true //stop shortBOT and DEAL code in the TV alert as well, probably stop first w/ a delay on startlong
    lblBull = label.new(bar_index, na, ' BULL Time Open LONG', color=color.blue, textcolor=color.black, style=label.style_label_up, size=size.small)
    label.set_y(lblBull, MA2)  
    strategy.close("go Short")
    strategy.entry("go Long", strategy.long, comment="go Long")
if MA23Crossunder
    //not sure if i should set alert for stop and start each bot, or just put start appropriate bot and stop its opposite in the same alert.
    startSHORTBOTandDEAL := true
    lblBull = label.new(bar_index, na, ' BEAR Time - Open SHORT', color=color.orange, textcolor=color.black, style=label.style_label_down, size=size.small)
    label.set_y(lblBull, MA2)
    strategy.close("go Long")
    strategy.entry("go Short", strategy.short, comment="go Short")
if MA12Crossover
    if MA2 >= MA3
        openLONG := true
        lup1 = label.new(bar_index, na, ' OPEN LONG ', color=color.green, textcolor=color.white, style=label.style_label_up, size=size.small, yloc=yloc.belowbar)
        strategy.entry("go Long", strategy.long, comment="go Long")
    if MA2 <= MA3
        closeSHORT := true
        lup1 = label.new(bar_index, na, ' CLOSE SHORT ', color=color.gray, textcolor=color.black, style=label.style_label_up, size=size.small, yloc=yloc.belowbar)
        strategy.close("go Short")
    
if MA12Crossunder
    if MA2 >= MA3
        closeLONG := true
        lun1 = label.new(bar_index, na, ' CLOSE LONG ', color=color.red, textcolor=color.white, style=label.style_label_down, size=size.small, yloc=yloc.abovebar)
        strategy.close("go Long")
    if MA2 <= MA3
        openSHORT := true
        lun1 = label.new(bar_index, na, ' OPEN SHORT ', color=color.red, textcolor=color.white, style=label.style_label_down, size=size.small, yloc=yloc.abovebar)
        strategy.entry("go Short", strategy.short, comment="go Short")


plot(MA1, color=color.green, linewidth=2, title="MA1")
plot(MA2, color=color.yellow, linewidth=3, title="MA2")
plot(MA3, color=color.red, linewidth=4, title="MA3")


alertcondition(startLONGBOTandDEAL, title="Start LONG BOT and DEAL", message="Start Long Bot and Deal")
alertcondition(stopLONGBOTandDEAL, title="Stop LONG BOT and DEAL", message="Stop Long Bot and Deal")
alertcondition(openLONG, title="Open LONG DEAL", message="Open Long Deal")
alertcondition(closeLONG, title="Close LONG DEAL", message="Close Long Deal")
alertcondition(stopSHORTBOTandDEAL, title="Stop SHORT BOT and DEAL", message="Stop Short Bot and Deal")
alertcondition(openSHORT, title="Open SHORT DEAL", message="Open Short Deal")
alertcondition(closeSHORT, title="Close SHORT DEAL", message="Close Short Deal")