Estrategia bidireccional de negociación cuantitativa cruzada de la EMA

El autor:¿ Qué pasa?, Fecha: 2024-01-24 17:31:41
Las etiquetas:

img

Resumen general

Esta estrategia utiliza indicadores EMA bidireccionales para determinar la dirección de tendencia principal del mercado y combina el indicador RSI como el momento de selección de entrada, que pertenece a la tendencia que sigue a la estrategia de negociación del algoritmo.

Principio de la estrategia

  1. Calcular múltiples grupos de EMA con diferentes ciclos para identificar la dirección de tendencia principal del mercado en tres dimensiones: a corto, mediano y largo plazo
  2. Cuando la EMA a corto plazo se cruza por encima de la EMA a medio y largo plazo, se determina que se ha formado una tendencia alcista.
  3. Cuando la EMA a corto plazo se cruza por debajo de la EMA a medio y largo plazo, se determina que se ha formado una tendencia bajista.
  4. Combine el indicador RSI para encontrar el momento de entrada adecuado.
  5. En una tendencia alcista, ir largo cuando el indicador RSI está en niveles bajos; en una tendencia bajista, ir corto cuando el indicador RSI está en niveles altos

La estrategia anterior aplica principalmente el indicador EMA bidireccional para determinar la dirección de la tendencia principal y utiliza el indicador RSI como la selección de la señal de entrada, que pertenece a una tendencia típica que sigue la estrategia de negociación del algoritmo.

Análisis de ventajas

La mayor ventaja de esta estrategia es que puede determinar claramente la dirección de la tendencia principal del mercado y seleccionar un mejor momento de entrada basado en el indicador RSI.

  1. Utilice varios conjuntos de EMA para identificar la dirección de la tendencia principal del mercado en múltiples dimensiones temporales
  2. El cálculo del indicador EMA es sencillo, con menos ruido y determina la tendencia principal del mercado de forma precisa y fiable.
  3. El indicador RSI puede determinar eficazmente los puntos de entrada y parada de pérdidas para optimizar significativamente la rentabilidad
  4. La estructura del algoritmo es clara y fácil de entender y modificar.
  5. Puede combinarse de forma flexible con otros indicadores técnicos para mejorar aún más el rendimiento de la estrategia

Análisis de riesgos

La estrategia también presenta algunos riesgos, principalmente en los siguientes aspectos:

  1. Cuando la tendencia se invierte, el punto de stop loss puede ser demasiado idealizado, aumentando así las pérdidas
  2. Incapacidad para determinar eficazmente el punto de reversión de la tendencia, posiblemente perdiendo la oportunidad de detener las pérdidas a tiempo
  3. Los parámetros de EMA y RSI necesitan pruebas y optimización repetidas, de lo contrario pueden causar inestabilidad
  4. No se puede garantizar que cada entrada sea el momento perfecto, puede haber repetencias múltiples innecesarias
  5. Es difícil evitar de manera efectiva las grandes lagunas bajo la influencia de eventos repentinos

Para hacer frente a los riesgos anteriores, se pueden realizar optimizaciones en las siguientes áreas:

  1. Puntos de detención de pérdidas establecidos razonablemente para evitar pérdidas excesivas
  2. Aumentar otros indicadores para determinar la reversión de tendencia para garantizar un alto oportuno de pérdidas
  3. Optimizar las combinaciones de parámetros para adaptarse a las condiciones más amplias del mercado
  4. Modificar la lógica de entrada y stop loss para reducir el número de repeticiones
  5. Aumentar el juicio de excepciones para evitar los efectos negativos de los déficits de mercado

Direcciones de optimización

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

  1. En el marco de la EMA bidireccional existente, introducir indicadores como MACD y BOLL para juzgar los puntos de inversión de tendencia, optimizando así las estrategias de toma de ganancias y stop loss
  2. Introducir modelos de aprendizaje automático para predecir la probabilidad de reversión de tendencias y mejorar aún más el rendimiento de la estrategia
  3. Aplicar filtros avanzados para identificar automáticamente las condiciones anormales del mercado y prevenir eficazmente las pérdidas
  4. Utilice algoritmos genéticos, aprendizaje de refuerzo profundo y otros métodos para optimizar automáticamente los parámetros para que las estrategias puedan adaptarse a más tipos de mercado
  5. Añadir módulo de pérdida de parada automática, puede ajustar dinámicamente los puntos de pérdida de parada de acuerdo con la situación real

Mediante la introducción de más indicadores, modelos de predicción, optimización de parámetros, módulos de control de riesgos y otros medios, esta estrategia puede mejorarse aún más para adaptarse a condiciones de mercado más complejas y volátiles.

Conclusión

Este artículo presentó detalladamente el contenido principal de la estrategia de negociación cuantitativa cruzada bidireccional EMA. Primero, se describieron las ideas principales y los principios de funcionamiento de la estrategia. Luego se analizaron completamente las ventajas de la estrategia. Al mismo tiempo, también se analizaron los principales riesgos potenciales en la estrategia. Sobre esta base, se propusieron varias direcciones clave optimizables. En resumen, esta estrategia tiene la ventaja de determinar la tendencia principal del mercado, y también tiene cierto margen de optimización, que es una estrategia de negociación cuantitativa típica. A través de la mejora y optimización continuas, esta estrategia puede convertirse en una opción importante para los inversores trading algorítmico.


/*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])
////////////////////////////////// 

Más.