Gracias por el buen artículo. Pero no puedo evitar criticarlo. Hoy estoy de mal humor.
El artículo presta especial atención no tanto a la codificación como a las fórmulas y la optimización de los cálculos. Pero creo que será más útil para los programadores principiantes y para los que han empezado hace poco a prestar atención a la posibilidad de utilizar distintos operadores de bucle. Espero que los próximos artículos lo reflejen. Después de todo, hay al menos 3 operadores de bucle en MQL5. Y cualquiera de ellos se puede utilizar para construir un indicador.
información útil, todo a la vez en un solo lugar,
y finalmente el bucle i++
Un buen artículo para principiantes para mostrar el código detrás de los promedios estándar de 4 MQ.
También debe discutir la importancia de la optimización simple y su impacto ya que el 99% de los ticks ocurren entre los cambios de barra. Minimizar los cálculos entre cada cambio de barra proporcionará una eficiencia mucho mayor a costa de un poco de complejidad. Así, calculando los valores base una vez en el cambio de barra y guardando los valores producirá reducciones significativas en el tiempo de cálculo. por ejemplo con un SAM el cálculo estándar para N periodos es:
Consideremos
double sm=0;
for(int bar=0;bar<N;bar++) suma+=Cierre[BarraActual];
SMA=suma/N;
frente a
doble estático partialsum;
double sum=0;
En el cambio de barra{
partialsum=0;
for(int bar=0;bar<N-1;bar++) partialsum+=Close[CurrentBar-bar];
partialsum/=(N-1);
}
SMA =partialsum +Cierre[BarraActual]/N;
Si hay 1000 ticks en un periodo de barra y N=10 entonces esta optimización ahorra unos 90.000 cálculos de suma+=Cierre[BarraFin] para cada barra. Si tu gráfico contiene 1.000 barras, entonces el ahorro es de más de 90 millones de cálculos innecesarios. Con los cpus modernos este ahorro generado por este ejemplo es trivial y probablemente no se note, con el tiempo se sumarán a medida que tus programas se vuelvan más complejos en Asesores Expertos.
La importancia de la optimización manual es que usted está desarrollando mejores técnicas de programación que se convertirá en una segunda naturaleza para usted en futuros proyectos.
Gracias por su artículo, pero no está claro por qué, después de utilizar la función OnCalculate(), ya no puedo utilizar la función de transacción OrderSend(), no sé cómo el autor resolvió este problema, no tengo más remedio que utilizar los indicadores de la biblioteca estándar de la siguiente manera:
#property copyright "Copyright 2024, MetaQuotes Ltd." #property link "https://www.mql5.com" #property version "1.00" #include <Indicators\Trend.mqh> CiMA ma; //+------------------------------------------------------------------+ //| Función de inicio de programa   Función de inicio de programa //+------------------------------------------------------------------+ int OnInit(){ ma.DeleteFromChart(ChartID(), 0); ma.Create(_Symbol, PERIOD_CURRENT, 14, 0, MODE_SMA, PRICE_CLOSE); ma.AddToChart(PERIOD_CURRENT, 0); return INIT_SUCCEEDED; } void OnTick(){ ma.Refresh(); double curMA = ma.Main(0); //Print("Valor actual de la MA:", maValue); }
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Usted acepta la política del sitio web y las condiciones de uso
Artículo publicado Media móvil en MQL5 desde cero: Sencilla y accesible:
Hoy hemos analizado los principios de cálculo de los principales tipos de medias móviles disponibles en los ajustes del indicador estándar Media móvil en el terminal de cliente. Los cálculos presentados en el artículo pueden utilizarse en indicadores con cálculos optimizados (lo cual también se muestra en el artículo); asimismo, podemos usar los códigos presentados como un cálculo independiente de los valores medios de un conjunto de datos consecutivos en nuestros propios programas.
La figura anterior muestra la diferencia entre medias móviles idénticas en cuanto al periodo de cálculo (10) pero diferentes en cuanto al tipo:
Roja - SMA, verde - EMA, dorada - SMMA, azul - LWMA.
Podemos observar que la media móvil suavizada se ve menos afectada por las pequeñas fluctuaciones de los precios y refleja con mayor claridad la tendencia general del movimiento de los precios.
Las medias móviles exponenciales y lineales ponderadas reaccionan con mayor fuerza a las fluctuaciones del mercado, ya que sus cálculos dan la mayor importancia a los datos actuales.
Autor: Artyom Trishkin