
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.
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.
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.
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.
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.
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.
/*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")