Estrategia de trading cuantitativo con cruce de EMA bidireccional


Fecha de creación: 2024-01-24 17:31:41 Última modificación: 2024-01-24 17:31:41
Copiar: 0 Número de Visitas: 314
1
Seguir
1166
Seguidores

Estrategia de trading cuantitativo con cruce de EMA bidireccional

Descripción general

Esta estrategia utiliza el indicador de EMA bidireccional para determinar la dirección de la tendencia principal del mercado, y se combina con el indicador RSI como una opción de entrada, pertenece a la estrategia de negociación de algoritmos de seguimiento de tendencias.

Principio de estrategia

  1. Calcula el promedio de EMA de varios grupos de diferentes períodos para identificar las principales tendencias del mercado en tres dimensiones: corto, medio y largo plazo
  2. Cuando un EMA a corto plazo se cruza con un EMA a mediano y largo plazo, se determina que se ha formado una tendencia alcista.
  3. Cuando el EMA corto cruza el EMA medio largo, se determina que se ha formado una tendencia bajista.
  4. En combinación con el RSI para encontrar el momento adecuado de entrada, el RSI se puede utilizar para determinar las zonas de sobrecompra y sobreventa
  5. En una tendencia alcista, el RSI toma posiciones largas cuando está bajo; en una tendencia bajista, el RSI toma posiciones cortas cuando está alto

La estrategia anterior utiliza principalmente dos indicadores EMA para determinar la dirección de la tendencia principal, y utiliza el indicador RSI como una opción de señal de entrada, y es una estrategia de negociación típica de algoritmos de seguimiento de tendencias.

Análisis de las ventajas estratégicas

La mayor ventaja de esta estrategia es que puede determinar claramente la dirección de las principales tendencias del mercado y elegir el mejor momento de entrada según el indicador RSI. Las ventajas específicas son las siguientes:

  1. Utiliza conjuntos de EMAs para identificar las principales tendencias del mercado en múltiples dimensiones temporales
  2. Los indicadores EMA son fáciles de calcular, son menos ruidosos y son fiables para determinar las principales tendencias del mercado
  3. Los indicadores RSI son eficaces para determinar los puntos de entrada y de parada, lo que puede optimizar significativamente el ratio de retorno de las ganancias de la estrategia
  4. La estructura del algoritmo es clara, fácil de entender y modificable, y es típico de las estrategias de seguimiento de tendencias
  5. Flexible combinación con otros indicadores técnicos para mejorar aún más la eficacia de la estrategia

Análisis de riesgos estratégicos

Esta estrategia también presenta ciertos riesgos, que se manifiestan principalmente en los siguientes aspectos:

  1. Cuando la tendencia se invierte, los puntos de parada pueden ser demasiado idealizados y aumentar las pérdidas
  2. No puede determinar el punto de inflexión de la tendencia y puede perder la oportunidad de detener la pérdida a tiempo.
  3. Los parámetros EMA y RSI necesitan ser optimizados para pruebas repetitivas, de lo contrario pueden causar inestabilidad
  4. No hay garantías de que cada entrada sea perfecta, y es posible que se repitan innecesariamente.
  5. Los grandes saltos en el aire bajo el impacto de un evento inesperado no pueden evitarse de manera efectiva

En relación con los riesgos mencionados, se puede optimizar desde los siguientes puntos de vista:

  1. Establezca un punto de parada razonable para evitar pérdidas excesivas en una sola operación
  2. Aumentar otros indicadores para determinar el cambio de tendencia y asegurar el cese oportuno de pérdidas
  3. Optimización de la combinación de parámetros para adaptarse a una situación de mercado más amplia
  4. Modificación de la lógica de entrada y parada para reducir el número de operaciones repetidas
  5. Aumentar el conocimiento de situaciones excepcionales y evitar el impacto negativo de los saltos en el mercado

Dirección de optimización de la estrategia

A partir de las ventajas y los riesgos de esta estrategia, podemos obtener las siguientes direcciones de optimización:

  1. En el marco de los actuales dos EMA, la introducción de MACD, BOLL y otros indicadores que pueden ser utilizados para determinar el punto de reversión de la tendencia, lo que optimiza la estrategia de stop loss
  2. La introducción de modelos de aprendizaje automático para predecir la probabilidad de reversión de tendencias mejora aún más la eficacia de las estrategias
  3. Aplicación de filtros avanzados para identificar automáticamente situaciones anormales y prevenir las pérdidas
  4. Utilizando métodos como algoritmos genéticos y aprendizaje de refuerzo profundo para optimizar automáticamente los parámetros y adaptar las estrategias a más tipos de mercados
  5. Se añade un módulo de parada automática que permite ajustar el punto de parada de forma dinámica en función de la situación real

La introducción de más indicadores, modelos de predicción, optimización de parámetros y módulos de control de riesgos puede mejorar aún más esta estrategia, lo que la hace adaptada a situaciones de mercado más complejas y cambiantes.

Resumir

Este artículo describe en detalle los principales contenidos de la estrategia de comercio cuantitativo de EMA de cruce bidireccional. En primer lugar, se describe la principal idea y el principio de funcionamiento de la estrategia. A continuación, se realiza un análisis completo de las ventajas de la estrategia. Al mismo tiempo, se analizan los principales puntos de riesgo que pueden existir en la estrategia.

Código Fuente de la Estrategia
/*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])
//////////////////////////////////