Estratégia de negociação quantitativa de crossover EMA bidirecional


Data de criação: 2024-01-24 17:31:41 última modificação: 2024-01-24 17:31:41
cópia: 0 Cliques: 602
1
focar em
1617
Seguidores

Estratégia de negociação quantitativa de crossover EMA bidirecional

Visão geral

Esta estratégia usa o EMA bidirecional para determinar a direção da principal tendência do mercado, e em combinação com o RSI como uma opção de entrada, pertence à estratégia de negociação do algoritmo de seguimento de tendência.

Princípio da estratégia

  1. Calcular a média das EMAs de vários grupos de diferentes períodos e identificar as principais direções de tendência do mercado em três dimensões: curto, médio e longo prazo
  2. Quando a EMA de curto prazo ultrapassa a EMA de médio e longo prazo, é considerada uma tendência otimista.
  3. Quando a EMA de curto prazo atravessa a EMA de médio e longo prazo, é considerada uma tendência de baixa
  4. Combinado com o RSI para encontrar um momento de entrada apropriado, o RSI pode ser usado para determinar áreas de sobrecompra e sobrevenda
  5. Em uma tendência de baixa, o indicador RSI fica mais longo quando o indicador é baixo; em uma tendência de baixa, o indicador RSI fica mais curto quando o indicador é alto

A estratégia acima é baseada na aplicação de dois indicadores EMA para determinar a direção da tendência principal e na escolha do indicador RSI como sinal de entrada, sendo uma estratégia de negociação típica de algoritmos de seguimento de tendência.

Análise de vantagens estratégicas

A maior vantagem desta estratégia é que pode determinar claramente a direção das principais tendências do mercado e pode escolher o melhor momento de entrada com base no indicador RSI. As vantagens específicas são as seguintes:

  1. Utilizando múltiplos conjuntos de EMA para identificar as principais direções de tendência do mercado em várias dimensões temporais
  2. Os indicadores EMA são fáceis de calcular, são menos ruidosos e são confiáveis para determinar as principais tendências do mercado
  3. Os indicadores RSI são eficazes para determinar os pontos de entrada e de parada, otimizando significativamente a estratégia de retorno de ganhos e perdas
  4. Algoritmos com uma estrutura clara e fácil de entender, com modificações e uma estratégia típica de seguir tendências
  5. Flexível combinação com outros indicadores técnicos para melhorar ainda mais a eficácia da estratégia

Análise de risco estratégico

A estratégia também apresenta alguns riscos, que se manifestam principalmente nos seguintes aspectos:

  1. Quando a tendência se inverte, o ponto de parada pode ser idealizado demais, aumentando a perda
  2. Não é possível avaliar com eficácia o ponto de reversão da tendência, podendo perder a oportunidade de parar o prejuízo em tempo hábil
  3. Os parâmetros EMA e RSI precisam ser testados e otimizados repetidamente, o que pode levar à instabilidade
  4. Não há garantias de que cada entrada seja perfeita, podendo ocorrer repetitividade desnecessária.
  5. O impacto de um acidente de avião foi tão grande que não foi evitado.

Para os riscos acima mencionados, otimizar pode ser feito de várias maneiras:

  1. Estabeleça um ponto de parada razoável para evitar perdas excessivas
  2. Adição de outros indicadores para avaliar a reversão de tendência e garantir a parada de perdas em tempo hábil
  3. Optimizar o conjunto de parâmetros para um contexto de mercado mais amplo
  4. Modificação da lógica de entrada e parada para reduzir o número de operações repetidas
  5. Aumentar o julgamento de situações excepcionais e evitar os efeitos adversos de saltos de mercado

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

De acordo com a estratégia, os benefícios e os riscos podem ser avaliados de acordo com as seguintes direções de otimização:

  1. Introdução de outros indicadores, como MACD, BOLL e outros, no quadro de EMAs duplas existentes, que podem ser usados para determinar o ponto de reversão da tendência e, assim, otimizar a estratégia de stop loss
  2. Introdução de modelos de aprendizagem de máquina para prever a probabilidade de reversão de tendências e melhorar ainda mais a eficácia da estratégia
  3. Aplicação de filtros avançados para identificar automaticamente situações anormais e prevenir perdas
  4. Utilizando algoritmos genéticos, aprendizagem em profundidade e outros métodos para otimizar automaticamente os parâmetros, para adaptar as estratégias a mais tipos de mercados
  5. Adição de um módulo de parada automática que permite ajustar o ponto de parada de forma dinâmica de acordo com a situação real

A introdução de mais indicadores, modelos de previsão, otimização de parâmetros, módulos de controle de risco, entre outros, permitem melhorar ainda mais a estratégia e adaptá-la a situações de mercado mais complexas e variáveis.

Resumir

Este artigo descreve detalhadamente os principais conteúdos de uma estratégia de negociação quantitativa de EMA de cruzamento bidirecional. Primeiro, descreve o principal conceito e princípio de funcionamento da estratégia. Em seguida, faz-se uma análise completa das vantagens da estratégia. Ao mesmo tempo, também analisa os principais pontos de risco que podem existir na estratégia.

Código-fonte da estratégia
/*backtest
start: 2023-01-23 00:00:00
end: 2024-01-23 00:00:00
period: 4h
basePeriod: 15m
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/
// © Investoz
// Indikatorn är byggd som ett utbildningsyfte och är därför ingen rekommendation för köp/sälj av aktier. Tanken är att skapa en visuell form i en graf
// som visar om det finns någon trend såväl positiv som negativ. En dialogruta med en varning talar om vilken trend som råder. I koden finns en möjlighet
// att ta position eller gå ur position om man vill skapa en startegi kring denna trendindikator. Rekommenderar dock starkt att inte enbart förlita sig på denna
// indikator som beslut för köp/sälj då resultaten blir negativa om man köper på psoitiv trend och säljer på negativ trend. Det måste kombineras med andra idéer
// och därför fungerar denna skript mer som ett komplement till sin egen strategi.
// Det är fritt fram för vem som helst att använda sig av denna indikator.  
//@version=4
//Skapar en strategiskript med 5 % av eget kapital som ett exempel. Detta går att ändra i skriptets inställningar, välj egenskaper och sedan ändra orderstorlek
//till ett annat värde av % på eget kapital.
strategy("© Investoz trendvarningar", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=5)
//Lägger till inmatningar till skriptindikatorn. Användaren kan se och redigera inmatningar i objektdialogen efter eget val.
ema1 = input(21, minval=1, maxval=500, title="Lila linje")
valema1=input(true, title="Visa lila linje")
ema2 = input(34, minval=1, maxval=500, title="Blå linje")
valema2=input(true, title="Visa blå linje")
ema3 = input(55, minval=1, maxval=500, title="Grön linje")
valema3=input(true, title="Visa grön linje")
ema4 = input(89, minval=1, maxval=500, title="Gul linje")
valema4=input(true, title="Visa gul linje")
ema5 = input(141, minval=1, maxval=500, title="Orange linje")
valema5=input(true, title="Visa orange linje")
ema6 = input(230, minval=1, maxval=500, title="Röd linje")
valema6=input(true, title="Visa röd linje")
ema7 = input(371, minval=1, maxval=500, title="Röd linje")
valema7=input(true, title="Visa röd linje")
//Inmatningar för antal staplar
startbar = input(1, minval=1, maxval=1, title="Första stapeln")
Endbar = bar_index
//Källa input, stängning. Användaren kan själv byta till vilken källa som önskas.
src = input(close, title="Source")
//Antal staplar sedan den längsta ema började och framåt. 
tid=Endbar + startbar - 371
//EMA loop
aema1 = ema(src, ema1)
bema2 = ema(src, ema2)
cema3 = ema(src, ema3)
dema4 = ema(src, ema4)
eema5 = ema(src, ema5)
fema6 = ema(src, ema6)
gema7 = ema(src, ema7)
//Skriver ut linjer i diagrammet om förhållandet är sant, annars falskt.
h=plot(valema1 ? aema1 : na, title="Lila linje", style=plot.style_line, linewidth=1, color=color.purple)
i=plot(valema2 ? bema2 : na, title="Blå linje", style=plot.style_line, linewidth=1, color=color.blue)
j=plot(valema3 ? cema3 : na, title="Grön linje", style=plot.style_line, linewidth=1, color=color.green)
k=plot(valema4 ? dema4 : na, title="Gul linje", style=plot.style_line, linewidth=1, color=color.yellow)
l=plot(valema5 ? eema5 : na, title="Orange linje", style=plot.style_line, linewidth=1, color=color.orange)
m=plot(valema6 ? fema6 : na, title="Röd linje", style=plot.style_line, linewidth=1, color=color.red)
n=plot(valema7 ? gema7 : na, title="Brun linje", style=plot.style_line, linewidth=1, color=color.maroon)
//Fyller bakgrunden mellan två linjer med en viss färg.
fill(h, i, color = color.purple,transp=34)
fill(i, j, color = color.blue,transp=34)
fill(j, k, color = color.green,transp=34)
fill(k, l, color = color.yellow,transp=34)
fill(l, m, color = color.orange,transp=34)
fill(m, n, color = color.red,transp=34)
//Skapa en algoritm för positiv trend
PositivTrend = crossover(aema1,gema7)?1:0
TrendPositiv = ema(close,1) > aema1 and aema1 > bema2?1:0
//Skapa en algoritm för negativ trend
NegativTrend = crossunder(aema1,gema7)?1:0
TrendNegativ = ema(close,1) < aema1 and aema1 < bema2?1:0
//Skapar en textruta med varningstext för positiv trend
varningtextpositiv = "Varning för positiv trend."+"\n" + "Leta efter att ta position!"
// if PositivTrend
//     varningpositiv=label.new(
//      bar_index, 
//      low,  
//      xloc=xloc.bar_index, 
//      yloc=yloc.price,
//      color=color.black, 
//      textcolor=color.green,
//      text=varningtextpositiv,
//      style=label.style_label_down,
//      textalign=text.align_left)
//Skapar en textruta med varningstext för negativ trend
varningtextnegativ = "Varning för negativ trend."+"\n" + "Leta efter utgången!"
// if NegativTrend
//     varningnegativ=label.new(
//      bar_index, 
//      low,  
//      xloc=xloc.bar_index, 
//      yloc=yloc.price,
//      color=color.black, 
//      textcolor=color.red,
//      text=varningtextnegativ,
//      style=label.style_label_up,
//      textalign=text.align_left)
//Köp om positiv trend
if (PositivTrend) 
    strategy.entry("Ta position", strategy.long, when = PositivTrend)
//Sälj om negativ trend
if (NegativTrend)
    strategy.close("Ta position", when = NegativTrend, comment="Gå ur position")
//Beräkning av positiv trend
vspositiv(positiv)=>valuewhen(Endbar==startbar,positiv,0)
vepositiv(positiv)=>valuewhen(Endbar==Endbar,positiv,0)
positivmean(TrendPositiv)=>
    csumpositiv = cum(TrendPositiv)
//Slut//   
    a = vepositiv(csumpositiv)
//Start//
    b = vspositiv(csumpositiv)
//Slut - Start// 
    (a - b)/(tid)
positivmeanpositiv = positivmean(TrendPositiv) 
//Beräkning av negativ trend
vsnegativ(negativ)=>valuewhen(Endbar==startbar,negativ,0)
venegativ(negativ)=>valuewhen(Endbar==Endbar,negativ,0)
negativmean(TrendNegativ)=>
    csumnegativ = cum(TrendNegativ)
//Slut//   
    a = venegativ(csumnegativ)
//Start//
    b = vsnegativ(csumnegativ)
//Slut - Start// 
    (a - b)/(tid)
negativmeannegativ = negativmean(TrendNegativ) 
//Inmatning av text som ska in i texruta som visar antal staplar i trend
logga = "© Investoz: Trend i tid"+ "\n"
streck = "--------------------------------------------------------"
totalastaplar = "\n" + "Dagar totalt: " + tostring(tid)+ " dagar "+"\n"+ streck + "\n"
totalpositiv = "Dagar totalt i positiv trend "+" 📈 : "  +tostring(positivmeanpositiv*tid, "##.##") +" dagar " + "\n"
totalnegativ = "\n" + "Dagar totalt i negativ trend" + " 📉 : "  +tostring(negativmeannegativ*tid, "##.##") +" dagar " 
//Textruta för antal staplar i trend
// if barstate.ishistory
//     barcountlbl=label.new(
//      bar_index, 
//      low,  
//      xloc=xloc.bar_index, 
//      yloc=yloc.price,
//      color=color.black, 
//      textcolor=color.yellow,
//      text=logga+streck+totalastaplar+totalpositiv+streck+totalnegativ,
//      style=label.style_label_lower_left,
//      textalign=text.align_left)
//     label.delete(barcountlbl[1])
//////////////////////////////////