Sunday, November 27, 2016

Promedio Móvil Personalizado

Indicador técnico de media móvil El Indicador técnico de media móvil muestra el valor medio del precio del instrumento durante un determinado período de tiempo. Cuando se calcula la media móvil, se calcula la media del precio del instrumento para este período de tiempo. A medida que el precio cambia, su promedio móvil aumenta o disminuye. Hay cuatro tipos diferentes de promedios móviles: Simple (también conocido como Aritmética). Exponencial. Suavizado y lineal ponderado. Los promedios móviles se pueden calcular para cualquier conjunto de datos secuenciales, incluyendo precios de apertura y cierre, precios más altos y más bajos, volumen de operaciones o cualquier otro indicador. A menudo es el caso cuando se usan promedios móviles dobles. Lo único en que los promedios móviles de diferentes tipos divergen considerablemente entre sí, es cuando los coeficientes de peso, que se asignan a los últimos datos, son diferentes. En caso de que se trate de media móvil simple, todos los precios del período de tiempo en cuestión, son iguales en valor. Los promedios móviles exponenciales y lineales ponderan más valor a los últimos precios. La forma más común de interpretar el precio promedio móvil es comparar su dinámica con la acción del precio. Cuando el precio del instrumento sube por encima de su promedio móvil, aparece una señal de compra, si el precio cae por debajo de su media móvil, lo que tenemos es una señal de venta. Este sistema de comercio, que se basa en la media móvil, no está diseñado para proporcionar la entrada en el mercado justo en su punto más bajo, y su salida a la derecha en el pico. Permite actuar de acuerdo con la siguiente tendencia: comprar poco después de que los precios lleguen al fondo, y vender poco después de que los precios hayan alcanzado su punto máximo. Los promedios móviles también pueden aplicarse a los indicadores. Es ahí donde la interpretación de las medias móviles de los indicadores es similar a la interpretación de los promedios móviles de los precios: si el indicador sube por encima de su media móvil, es probable que continúe el movimiento del indicador ascendente: si el indicador cae por debajo de su promedio móvil, Significa que es probable que siga bajando. Estos son los tipos de promedios móviles en el gráfico: Promedio móvil simple (SMA) Promedio móvil exponencial (EMA) Promedio móvil suavizado (SMMA) Cálculo de media móvil ponderada lineal (LWMA) Simple, en otras palabras, El promedio móvil aritmético se calcula sumando los precios del cierre del instrumento durante un cierto número de períodos individuales (por ejemplo, 12 horas). Este valor se divide entonces por el número de tales períodos. Donde: N es el número de períodos de cálculo. Promedio móvil exponencial (EMA) El promedio móvil suavizado exponencialmente se calcula sumando la media móvil de una determinada proporción del precio de cierre actual al valor anterior. Con los promedios móviles suavizados exponencialmente, los últimos precios son de mayor valor. La media móvil exponencial del P por ciento se verá así: Donde: CERRAR (i) el precio del cierre del período actual EMA (i-1) Promedio Movimiento Exponencial del cierre del período anterior P el porcentaje de usar el valor del precio. Promedio móvil suavizado (SMMA) El primer valor de esta media móvil suavizada se calcula como la media móvil simple (SMA): La segunda y las medias móviles sucesivas se calculan de acuerdo con esta fórmula: Donde: SUM1 es la suma total de los precios de cierre de N Es la suma suavizada de la barra anterior SMMA1 es la media móvil suavizada de la primera barra SMMA (i) es la media móvil suavizada de la barra actual (excepto la primera) CLOSE (i) es el precio actual de cierre N Es el período de suavizado. Promedio móvil ponderado lineal (LWMA) En el caso de la media móvil ponderada, los datos más recientes tienen más valor que los datos más antiguos. La media móvil ponderada se calcula multiplicando cada uno de los precios de cierre dentro de la serie considerada, por un cierto coeficiente de ponderación. Donde: SUM (i, N) es la suma total de coeficientes de peso. Fuente Código Fuente MQL4 completa de promedios móviles está disponible en el Código Base: Promedios móviles Advertencia: Todos los derechos sobre estos materiales están reservados por MetaQuotes Software Corp. Copia o reimpresión de estos materiales en su totalidad o en parte está prohibido. double ma iCustom (NULL , PERIODM30, quotMoving Average, 13,0,0,0,1) Imprimir (quotMA quot ma) Cómo hacer EA si quiero imprimir variable quotmaquot sólo una vez por barra (una vez cada 30min) Ahora se imprime muchas veces incluso mi gráfico Tiene periodo m30. Su EA y la función del indicador funcionarán probablemente por la señal, no por la barra. La EA hace esto, ya que podría necesitar hacer varias operaciones entre cada barra. Una marca puede ser una cantidad pequeña pero variable de tiempo. Así que si tiene un comando de impresión dentro de la función de inicio principal de EA, su resultado se imprimirá con frecuencia. Hay varias maneras alrededor de esto, uno es mantener un tickcount que usted utiliza y reajustarlo cada tan a menudo, otro es contar tiempo, usando los resultados colectivos de las diversas funciones de TimeCurrent, otro sería esperar hasta que el resultado de construido en Barras variables, la cantidad total de barras en el gráfico, aumentado en 1. NB iCustom es sólo para los indicadores personalizados que usted hace o editar usted mismo, es eso lo que su iMA de búsqueda es la función de media móvil estándar. Su EA y la función del indicador funcionarán probablemente por la señal, no por la barra. La EA hace esto, ya que podría necesitar hacer varias operaciones entre cada barra. Una marca puede ser una cantidad pequeña pero variable de tiempo. Así que si tiene un comando de impresión dentro de la función de inicio principal de EA, su resultado se imprimirá con frecuencia. Hay varias maneras alrededor de esto, uno es mantener un tickcount que usted utiliza y reajustarlo cada tan a menudo, otro es contar tiempo, usando los resultados colectivos de las diversas funciones de TimeCurrent, otro sería esperar hasta que el resultado de construido en Barras variables, la cantidad total de barras en el gráfico, aumentado en 1. NB iCustom es sólo para los indicadores personalizados que usted hace o editar usted mismo, es eso lo que su iMA de búsqueda es la función de media móvil estándar. Gracias por su respuesta. Sí, tengo un indicador personalizado. Comparo 2 valores (cambio diferente en icustom) y luego decido whato para hacer (vender, comprar o cerrar impresión). Como usted dijo que funciona en cada garrapata. Voy a intentar con las barras. Int LastClose // Establece esto en la parte superior de la secuencia de comandos en vars globales, justo después de extern vars // Ponga su código aquí Cualquier cosa dentro de la IF sólo se ejecutará una vez por barra int LastClose // Establece esto en la parte superior de la secuencia de comandos en vars globales, Extern vars // poner su código aquí Cualquier cosa dentro de la IF sólo se ejecutará una vez por barra Es una buena idea, excepto en la rara circunstancia de que el valor de cierre era el mismo valor en ambas barras. Todavía voy a ir por el tiempo a mí mismo y 30 minutos antes de cada comando se llevó a cabo, pero si realmente quería una opción de barra: int CountBars 0 si (barras lt CountBars) // si no es igual o mayor, debemos restablecer su valor. If (Barras gt CountBars) // Tu código aquí dentro. NB la otra razón id tiempo de uso en lugar de barras, es porque en el retraso pesado supongo que puede perder una barra en los gráficos más pequeños. Creación de indicadores personalizados Al crear una estrategia comercial un desarrollador a menudo se enfrenta a la necesidad de dibujar gráficamente en una seguridad Ventana una cierta dependencia calculada por un usuario (programador). Para ello MQL4 ofrece la posibilidad de crear indicadores personalizados. Custom Indicator es un programa de aplicación codificado en MQL4 que básicamente está destinado a la visualización gráfica de las dependencias preliminares calculadas. Estructura del indicador personalizado Necesidad de los búferes El principio principal subyacente a los indicadores personalizados es pasar los valores de los conjuntos de indicadores a un terminal cliente (para dibujar líneas de indicadores) a través de búferes de intercambio. Buffer es un área de memoria que contiene valores numéricos de una matriz de indicadores. MQL4 estándar implica la posibilidad de dibujar hasta ocho líneas de indicadores utilizando un indicador personalizado. Una matriz de indicadores y un buffer se ponen en correspondencia con cada línea de indicador. Cada búfer tiene su propio índice. El índice del primer búfer es 0, del segundo - 1, y así sucesivamente, el último tiene el índice 7. Fig. 115 muestra cómo la información de un indicador personalizado se pasa a través de memorias intermedias a un terminal de cliente para dibujar líneas de indicador. Higo. 115. Pasar valores de matrices de indicadores a través de un búfer a un terminal cliente. El orden general de las líneas del indicador del edificio es el siguiente: 1. Los cálculos se llevan a cabo en un indicador personalizado como resultado de que los valores numéricos se asignan a elementos del conjunto de indicadores. 2. Los valores de los elementos de la matriz de indicadores se envían a un terminal cliente a través de búferes. 3. Sobre las bases de los arrays de valores recibidos de buffers, un terminal cliente muestra líneas indicadoras. Componentes de un indicador personalizado Permite analizar un indicador personalizado sencillo que muestra dos líneas: una línea se basa en los precios máximos de barras y la segunda utiliza precios mínimos. Ejemplo de un indicador personalizado simple userindicator. mq4 Permite analizar en detalle las partes del indicador. En cualquier programa de aplicación escrito en MQL4 puede indicar parámetros de configuración que proporcionan el servicio de programa correcto por un terminal de cliente. En este ejemplo, la parte principal del programa (véase Estructura del programa) contiene varias líneas con propiedades de directivas. La primera directiva indica en qué ventana el terminal cliente debe dibujar las líneas indicadoras: En MQL4 hay dos variantes de las líneas indicadoras de dibujo: en la ventana de seguridad principal y en una ventana separada. La ventana principal es la ventana que contiene un gráfico de seguridad. En este ejemplo, el indicador de parámetro indicador de cuadro en el directorio de propiedades indica que un terminal cliente debe dibujar líneas indicadoras en la ventana principal. La siguiente línea muestra el número de búferes utilizados en el indicador: En el ejemplo analizado se dibujan dos líneas de indicadores. Se asigna un búfer a cada búfer, por lo que el número total de búferes es de dos. Las líneas siguientes describen los colores de las líneas indicadoras. Parámetros indicatorcolor1 y indicatorcolor2 definen la configuración de color para los buffers correspondientes, en este caso para buffers con índices 0 (Azul) y 1 (Rojo). Tenga en cuenta que las cifras de los nombres de parámetros indicatorcolor1 e indicatorcolor2 no son índices de búfer. Estas cifras son partes de nombres constantes que se establecen de acuerdo con los búferes. Para cada color constante se puede establecer a discreción de un usuario. En el siguiente indicador de línea se declaran los arrays: El indicador está destinado a dibujar dos líneas de indicador, por lo que tenemos que declarar dos matrices globales de una dimensión, una para cada línea. Los nombres de las matrices de indicadores dependen del usuario. En este caso se usan los nombres de las matrices Buf0 y Buf1, en otros casos se pueden utilizar otros nombres, por ejemplo, Line1, Alfa, Integral, etc. Es necesario declarar arrays a nivel global, De la función especial start (). El indicador personalizado descrito se construye sobre la base de dos funciones especiales - init () y start (). La función init () contiene la parte de código utilizada en el programa una sola vez (ver Funciones especiales). Se realiza una acción muy importante en la línea: Usando la función SetIndexBuffer () se pone un buffer necesario (en este caso con el índice 0) en correspondencia con un array (en este caso Buf0). Significa que para construir la primera línea de indicador un terminal de cliente aceptará los datos contenidos en la matriz Buf0 usando el buffer de cero para ello. Además, se define el estilo de línea: Para el buffer cero (0), un terminal cliente debe utilizar los siguientes estilos de dibujo: línea simple (DRAWLINE), línea continua (STYLESOLID), ancho de línea 2. Las dos líneas siguientes contienen ajustes para la segunda línea : Así, de acuerdo con el código de la función especial init (), ambas líneas de indicador se dibujarán en la ventana de seguridad principal. La primera será una línea azul sólida con la anchura 2, la segunda es una línea punteada roja (STYLEDOT) de una anchura usual. Las líneas de indicadores también pueden dibujarse por otros estilos (consulte Estilos de líneas de indicadores). Cálculo de valores de elementos de matrices de indicadores (Atención) Los valores de los elementos de matrices de indicadores se calculan en la función especial start (). Para entender correctamente el contenido del código start () presta atención al orden de las barras de indexación. La sección Arrays describe en detalle el método de indexar arrays-timeseries. De acuerdo con este método, la indexación de las barras comienza desde cero. La barra cero es una barra actual sin estar formada. El índice de bares más cercano es 1. Los siguientes son 2 y así sucesivamente. A medida que aparecen nuevas barras en una ventana de seguridad, se cambian los índices de barras (de historia) ya formadas. La nueva barra (actual, recién formada, más a la derecha) obtiene el índice cero, el que está a la izquierda de él (que acaba de formarse) obtiene el índice 1 y los valores de los índices de todas las barras de la historia también aumentan en uno. El método descrito de barras de indexación es el único posible para todo el sistema de comercio en línea MetaTrader, y se tiene en cuenta al dibujar líneas utilizando indicadores técnicos y personalizados. Se dijo anteriormente que las líneas de indicadores se construyen sobre la base de la información numérica contenida en los conjuntos de indicadores. Una matriz de indicadores contiene información sobre las coordenadas de punto sobre las que se dibuja una línea de indicador. Y la coordenada Y de cada punto es el valor de un elemento de matriz de indicadores. Y la coordenada X es el valor de un índice de elementos de matriz de indicadores. En el ejemplo analizado se dibuja la primera línea de indicadores usando valores máximos de barras. La Fig. 116 muestra esta línea de indicador (de color azul) en una ventana de seguridad, se construye sobre la base de la matriz de indicadores Buf0. Higo. 116. Correspondencia de las coordenadas de una línea de indicadores con los valores de una matriz de indicadores. El valor de índice de una matriz de indicadores está fuera por un terminal de cliente en correspondencia con un índice de barras - estos valores de índice son iguales. También debe tenerse en cuenta que el proceso de construcción de líneas de indicadores se enciende en modo de tiempo real bajo condiciones cuando en una ventana de seguridad aparecen nuevas barras de vez en cuando. Y todas las barras de la historia se desplazan a la izquierda. Para que la línea del indicador se dibuje correctamente (cada punto de línea por encima de su barra) también debe desplazarse junto con barras. Por lo tanto, existe la necesidad (necesidad técnica) de volver a indexar una matriz de indicadores. La diferencia fundamental de una matriz de indicadores de una matriz habitual es la siguiente: En el momento en que se crea una nueva barra, los valores de índice de los elementos de la matriz de indicadores se cambian automáticamente por el terminal cliente, a saber: Uno y el tamaño de la matriz indicadora se incrementa en un elemento (con un índice cero). Por ejemplo, la barra cero en la Fig. 116 (horario H1) tiene el tiempo de apertura 6:00. A las 7:00 aparecerá una nueva barra en la ventana de seguridad. La barra abierta a las 6:00 obtendrá automáticamente el índice 1. Para que la línea del indicador dibuje correctamente en esta barra, el terminal cliente cambiará el índice del elemento del array indicador correspondiente a la barra abierta a las 6:00. En la tabla de la Fig. 116 este elemento está escrito en la primera línea. Junto con los índices de todos los elementos de la matriz se incrementará por el terminal del cliente en uno. El índice del elemento de matriz correspondiente a la barra abierta a las 6:00 obtendrá el valor 1 (antes de que fuera igual a 0). La matriz de indicadores se ampliará en un elemento. El índice de un nuevo elemento agregado será igual a 0, el valor de este elemento será un nuevo valor que refleje la coordenada de la línea de indicador en una barra cero. Este valor se calcula en la función especial start () en cada tick. Los cálculos en la función especial start () deben realizarse de forma que no se realicen acciones adicionales. Antes de que el indicador se adjunte a un gráfico, no refleja ninguna línea de indicadores (porque los valores de los conjuntos de indicadores no están definidos todavía). Es por eso que en el primer inicio de la función especial start () los valores del array de indicadores deben ser calculados para todas las barras, en las que se debe dibujar la línea del indicador. En el ejemplo analizado se trata de todas las barras presentes en un gráfico (los cálculos iniciales pueden realizarse no para todas las barras disponibles, pero para alguna última parte de la historia se describe en otros ejemplos). Ar todos los nuevos comienzos de la función especial start () no hay necesidad de calcular los valores de matriz de indicadores para todas las barras de nuevo. Estos valores ya están calculados y están contenidos en la matriz de indicadores. Es necesario calcular el valor actual de la línea del indicador sólo en cada nueva marca de la barra cero. Para la implementación de la tecnología descrita existe una función estándar muy útil en MQL4 - IndicatorCount (). Function IndicatorCount () Esta función devuelve el número de barras que no han cambiado desde la última llamada del indicador. Si el indicador nunca ha sido conectado a un gráfico, en la primera ejecución start () el valor de Countedbars será igual a cero: Significa que la matriz de indicadores no contiene ningún elemento con valor predefinido anterior, es por eso que todo el conjunto de indicadores Debe calcularse de principio a fin. La matriz de indicadores se calcula de la barra más antigua a la cero. El índice de la barra más antigua, a partir de la cual los cálculos deben iniciarse, se calcula de la siguiente manera: Supongamos que en el momento de adjuntar el indicador hay 300 barras en una ventana de gráfico. Este es el valor de la variable predefinida Bars. Como se definió anteriormente, Countedbars es igual a 0. Por lo tanto, como resultado obtenemos que el índice i de la primera barra no contabilizada (la última, a partir de la cual se deben realizar los cálculos) es igual a 299. Todos los valores de los elementos de la matriz indicadora son Calculado en el bucle while (): Mientras que i está dentro del rango desde la primera barra sin contar (299) hasta la actual (0) inclusive, los valores de los elementos de la matriz de indicadores se calculan para ambas líneas de indicador. Tenga en cuenta que los valores faltantes de los elementos de la matriz de indicadores se calculan durante el primer inicio de la función especial start (). Durante los cálculos el terminal cliente recuerda los elementos, para los cuales se calcularon los valores. La última iteración en while () se realiza cuando i es igual a 0, es decir, se calculan los valores de las matrices de indicadores para la barra cero. Cuando el bucle ha terminado, la función especial start () finaliza su ejecución y el control se pasa al terminal cliente. A su vez, el terminal cliente dibujará todas las líneas indicadoras (en este caso dos) de acuerdo con los valores calculados de los elementos del conjunto. En el siguiente tick start () el terminal del cliente iniciará de nuevo. Otras acciones dependerán de la situación (continuaremos analizando el ejemplo para 300 barras). Variante 1. Una nueva marca aparece durante la formación de la barra cero actual (la situación más común). Higo. 117 muestra dos señales recibidas por el terminal en momentos de tiempo t1 y t2. La situación analizada será la misma para ambas garrapatas. En la ejecución de la función start () se ejecutará la siguiente línea: IndicatorCount () devolverá el valor 299, es decir, desde la última llamada start () 299 barras anteriores no fueron cambiadas. Como resultado, el valor de índice i será igual a 0 (300-299-1): Significa que en el siguiente while () se calcularán los valores de elementos de matriz con el índice cero. En otras palabras, se calculará la nueva posición de una línea de indicador en la barra cero. Cuando finalice el ciclo, start () dejará de ejecutarse y pasará el control al terminal cliente. Variante 2. Una nueva marca es la primera marca de una barra cero (ocurre de vez en cuando). En este caso, el hecho de la aparición de una nueva barra es importante. Antes de que el control se pase a la función especial start (), el terminal cliente volverá a dibujar todas las barras presentes en la ventana de seguridad y volverá a indexar todas las matrices de indicadores declarados (establecidas en correspondencia con las memorias intermedias). Además, el terminal de cliente recordará que ya hay 301 barras, no 300 en una ventana de gráfico. Higo. 118 contiene la situación cuando en la última marca de la barra anterior (en el momento t 2) se inició y ejecutó con éxito la función start (). Por eso, aunque ahora la primera barra (con índice 1) terminada en el momento t 2 fue calculada por el indicador, la función IndicatorCount () devolverá el valor que estaba en la barra anterior. 299: En el siguiente índice de línea se calculará, en este caso para la primera marca de una nueva barra será igual a 1 (301-299-1): Significa el cálculo de los valores de la matriz de indicadores en el bucle while () En la aparición de una nueva barra se llevará a cabo tanto para la última barra y para la nueva barra cero. Un poco antes durante la re-indexación de matrices de indicadores, el terminal cliente aumentó el tamaño de estos arrays. Los valores de elementos de matriz con índices cero no se definieron antes de los cálculos en el bucle. Durante los cálculos en el bucle estos elementos obtienen algunos valores. Cuando los cálculos en start () han finalizado, el control se devuelve al terminal cliente. Después de eso, el terminal cliente dibujará líneas de indicador en la barra cero basándose en valores calculados de elementos de matriz con cero índices. Variante 3. Una nueva marca es la primera marca de una nueva barra cero, pero la última pero una no se procesa (caso raro). Higo. 119 muestra la situación en la que se inició start () en la primera marca de una nueva barra en el momento t 5. Hora anterior en que esta función se inició en el momento t 2. Marque que llegó a la terminal en el momento t 3 (flecha roja ) No fue procesado por el indicador. Esto sucedió porque el tiempo de ejecución t 2 - t 4 de inicio () es mayor que el intervalo entre t - t - t 3. Este hecho será detectado por el terminal cliente durante la ejecución de start () iniciada en el momento t 5. Durante Cálculos en la línea: IndicatorCount () devolverá el valor 299 (). Este valor es verdadero - a partir del momento de la última llamada del indicador 299 barras no fueron cambiadas después (ahora ya) 301. Es por eso que el índice calculado de la primera barra (a la izquierda), a partir de la cual los cálculos de los valores del elemento de la matriz deben iniciarse, Será igual a 1 (301-299-1): significa que durante la ejecución while () se realizarán dos iteraciones. Durante el primer valor se calcularán los valores de los elementos de la matriz con el índice i1, es decir, Buf01 y Buf11. No, en el momento en que comienzan los cálculos, las barras y las matrices de indicadores ya están re-indexadas por el terminal cliente (porque se inició una nueva barra entre los arranques de la función especial start). Es por eso que los cálculos para los elementos de matrices con el índice 1 se calcularán sobre la base de array-timeseries (valores máximos y mínimos de un precio de barras) también con el índice 1: Durante la segunda iteración de while () Índices, es decir, para la barra cero, se calcula sobre la base de los últimos valores conocidos de matrices-series de tiempo. El uso de la tecnología descrita para el cálculo de indicadores personalizados permite, en primer lugar, garantizar el cálculo de los valores de todos los elementos de la matriz de indicadores independientemente de la naturaleza específica de la historia de las marcas y, segundo, realizar cálculos sólo para las barras no contabilizadas, es decir, . No, una barra se considera sin contar si no se realiza el cálculo de los valores de los elementos de un indicador al menos para una última marca de la barra. Al iniciar el indicador personalizado userindicator. mq4 en una ventana de gráfico verá dos líneas: una línea azul gruesa construida sobre los máximos de barras y una línea roja punteada construida sobre sus mínimos (Figura 120). Cabe señalar que se puede construir un indicador personalizado, cuyas líneas de indicadores coincidirían con las líneas de un indicador técnico análogo. Se puede hacer fácilmente si como fórmulas de cálculo en el indicador personalizado, se utilizan las mismas fórmulas que en el indicador técnico. Para ilustrar esto se puede mejorar el código de programa analizado en el ejemplo anterior. Deje que el indicador dibuje líneas sobre valores promedio de máximos y mínimos de varias últimas barras. Es fácil llevar a cabo los cálculos necesarios: simplemente necesitamos encontrar valores promedio de elementos arrays-timeseries. Por ejemplo, el valor de una matriz de indicadores con el índice 3 (es decir, la coordenada de la línea del indicador para la tercera barra) sobre la base de los últimos cinco máximos se calcula de la siguiente manera: Buf03 (High3 High4 High5 High6 High7) / 5 Cálculos análogos pueden ser Realizado para las líneas de un indicador construido sobre mínimos. Ejemplo de un indicador personalizado simple averagevalue. mq4. Las líneas de indicadores se basan en valores medios mínimos y máximos de N barras. En este ejemplo hay una variable externa AverBars. Usando esta variable un usuario puede indicar el número de barras, para las cuales se calcula un valor medio. En start (), este valor se utiliza para calcular un valor medio. En el bucle para la suma de valores máximos y mínimos se calcula el número de barras correspondiente al valor de la variable AverBars. En las siguientes dos líneas de programa se calculan los valores de los elementos de la matriz de indicadores para las líneas de indicador que corresponden a valores mínimos y máximos. El método de promediación utilizado aquí también se aplica para cálculos en el indicador técnico Moving Average. Si adjuntamos el indicador promedio analizado averagevalue. mq4 y el indicador técnico Moving Average, veremos tres líneas de indicadores. Si se establece el mismo período de promediación para ambos indicadores, la línea de Media móvil coincidirá con una de las líneas de indicador personalizadas (para esto los parámetros descritos en la figura 121 deben especificarse en la configuración del indicador técnico). Higo. 121. Líneas coincidentes de un indicador técnico y un indicador personalizado (línea roja). Así, utilizando un indicador técnico un usuario puede construir la reflexión de cualquier regularidad necesaria en el trabajo práctico. Opciones de indicadores personalizados Dibujo de líneas de indicadores en ventanas separadas MQL4 ofrece un gran servicio para la construcción de indicadores personalizados que hace que su uso sea muy conveniente. En particular, las líneas de indicadores pueden dibujarse en una ventana separada. Esto es conveniente cuando los valores absolutos de la amplitud de la línea de indicador son sustancialmente más pequeños (o mayores) que los precios de seguridad. Por ejemplo, si nos interesa la diferencia entre los valores medios de los máximos de barras y los mínimos en un cierto intervalo histórico, dependiendo del período de tiempo, este valor será aproximadamente de 0 a 50 puntos (por ejemplo, para M15). No es difícil construir una línea de indicadores, pero en una ventana de seguridad, esta línea se dibujará en el rango de 0 a 50 puntos de un precio de seguridad, es decir, sustancialmente inferior al área del gráfico reflejada en la pantalla. Es muy incómodo. Para dibujar líneas de indicadores en una ventana separada (que se encuentra en la parte inferior de una ventana de seguridad), en el parámetro de la propiedad de directiva (al inicio del programa) se debe indicar: En el momento en que dicho indicador se adjunta a una ventana de seguridad , El terminal cliente crea una ventana separada debajo de un gráfico, en el que se dibujarán líneas indicadoras calculadas en el indicador. Dependiendo de la configuración de color y los tipos de líneas de indicadores que se dibujarán en este o aquel estilo. Limitación del historial de cálculos En la mayoría de los casos, las líneas de indicadores contienen información útil sólo en el historial más reciente. La parte de las líneas de indicadores construidas sobre barras antiguas (por ejemplo, un período de tiempo de un mes de antigüedad) difícilmente puede considerarse útil para tomar decisiones comerciales. Además, si hay una gran cantidad de barras en una ventana de gráfico, el tiempo invertido en el cálculo y dibujo de líneas de indicadores es excesivamente grande. Esto puede ser crítico en la depuración del programa, cuando un programa se compila a menudo y se inicia. Por eso es necesario realizar cálculos no para toda la historia, sino para la parte limitada de la historia del bar más reciente. Para ello se utiliza un historial de variables externas en el siguiente programa. El valor de esta variable se tiene en cuenta al calcular el índice de la primera barra (a la izquierda), a partir de la cual deben calcularse los elementos de las matrices de indicadores. Se realizarán cálculos adicionales en el bucle while () para el número de barras de historiales recientes que no sean mayores que el valor de Historial. Tenga en cuenta que el método analizado de limitar un historial de cálculo se refiere sólo a la parte de los cálculos que se realizan en el primer inicio de la función especial start (). Además, cuando aparecen nuevas barras, se añadirán nuevas partes de las líneas indicadoras en la parte derecha, mientras que la imagen en la parte izquierda se conservará. Por lo tanto, la longitud de la línea del indicador se incrementará durante todo el tiempo de operación del indicador. El valor común del parámetro History se considera aproximadamente 5000 barras. Ejemplo de un indicador personalizado simple separatewindow. mq4. Las líneas de los indicadores se dibujan en una ventana separada. Cálculo similar de una línea de indicador se realiza en el indicador técnico AverageTrue Range. Higo. 122 muestra una línea de indicador construida por el indicador personalizado separatewindow. mq4 en una ventana separada y una línea de indicador construida por ATR en otra ventana. En este caso, las líneas son completamente idénticas porque el período de promediado es el mismo para ambos indicadores. 5. Si este parámetro cambia en cualquiera de los indicadores, la línea indicadora correspondiente también cambiará. Higo. 122. dibujar una línea de indicador personalizado en una ventana separada. Líneas idénticas de un indicador técnico (ATR) y un indicador personalizado (separatewindow. mq4). También es evidente que la línea de indicador personalizado no se construye para toda la anchura de la pantalla, sino para las 50 barras más recientes como se especifica en la variable externa Historial. Si un comerciante necesita usar un intervalo de historial más grande, el valor de la variable externa se puede cambiar fácilmente a través de la ventana de configuración del indicador personalizado. Higo. 123 muestra una ventana de seguridad, en la que la línea de indicadores nos dibujó en otro estilo - como un histograma. Para obtener este resultado se cambió una línea en el código de programa separatewindow. mq4 - se indican otros estilos de línea: Todas las demás partes de código no cambian. Higo. 123. Dibujo línea de indicador personalizado en una ventana separada (histograma). Similitud de dibujos de un indicador técnico (ATR) y un indicador personalizado (separatewindow. mq4). Desplazamiento de las líneas de indicadores vertical y horizontalmente En algunos casos es necesario cambiar una línea de indicador. Se puede hacer fácilmente por medios MQL4. Vamos a analizar un ejemplo, en el que la posición de las líneas de indicadores en una ventana de seguridad se calculan de acuerdo con los valores especificados por un usuario. Ejemplo de un indicador personalizado displacement. mq4. Desplazamiento de las líneas indicadoras horizontal y verticalmente. Para ajustar el cambio de líneas en un gráfico, hay dos variables externas: LeftRight para el desplazamiento horizontal de todas las líneas y UpDown para desplazar dos líneas punteadas verticalmente. El algoritmo utilizado para calcular los valores de elementos de matriz correspondientes se basa en reglas muy simples: para desplazar una línea horizontalmente, asigne el valor calculado a un elemento de matriz cuyo índice es mayor por LeftRight (para desplazar hacia la derecha y menos para desplazar A la derecha) que el índice de una barra, para lo cual se realizan cálculos para desplazar una línea verticalmente, se debe añadir UpDownPoint (para desplazar hacia arriba o hacia abajo para desplazar hacia abajo) a cada valor de una matriz de indicadores que caracteriza la posición de línea inicial. Los índices de ejemplo se calculan en la línea: Aquí i es el índice de una barra, para la cual se realizan cálculos, k es un índice de un elemento de matriz de indicadores. Línea roja del indicador visualizada por el terminal cliente según la matriz de indicadores La línea 0 se desplaza a la izquierda por 5 barras (de acuerdo con los ajustes personalizados, véase la figura 124) de la línea inicial. En este caso, la línea inicial es un promedio móvil con el período de promedio igual a 5 la fórmula del cálculo de MA es (HighiLowi) / 2. En este ejemplo, la posición de la línea roja es la base para el cálculo de los valores del conjunto de indicadores para otras dos líneas, es decir, su posición en el gráfico. Las líneas punteadas se calculan de esta manera: El uso del índice k para elementos de todos los arrays de indicadores permite realizar cálculos para elementos de arrays Line1, Line2 en la misma barra utilizada para calcular los valores del arreglo básico correspondiente Line0. Como resultado, las líneas punteadas se desplazan en relación con la línea roja en el valor especificado en la ventana de configuración del indicador, en este caso 30 puntos (figura 124). Higo. 124. La línea indicadora roja se desplaza a la izquierda por 5 barras. Las líneas indicadoras punteadas se desplazan en relación con la línea roja en 30 puntos. Limitaciones de los indicadores personalizados Hay algunas limitaciones en MQL4 que deben tenerse en cuenta en la programación de indicadores personalizados. Hay un grupo de funciones que sólo se pueden utilizar en indicadores personalizados y no se pueden utilizar en Asesores expertos y secuencias de comandos: IndicatorBuffers (), IndicatorCount (), IndicatorDigits (), IndicatorShortName (), SetIndexArrow (), SetIndexBuffer (), SetIndexDrawBegin ), SetIndexEmptyValue (), SetIndexLabel (), SetIndexShift (), SetIndexStyle (), SetLevelStyle (), SetLevelValue (). Por otro lado, las funciones comerciales no se pueden utilizar en los indicadores: OrderSend (), OrderClose (), OrderCloseBy (), OrderDelete () y OrderModify (). Esto se debe a que los indicadores operan en el flujo de interfaz (a diferencia de los Asesores Expertos y scripts que operan en su propio flujo). Esta es la razón por la cual los algoritmos basados ​​en looping no pueden ser utilizados en indicadores personalizados. El inicio de un indicador personalizado que contiene un bucle interminable (en términos de tiempo real de ejecución) puede resultar en que el terminal del cliente se cierra con necesidad adicional de reiniciar un equipo. Las características comparativas generales de los Asesores Expertos, los guiones y los indicadores están contenidas en la Tabla 2. En este tutorial agregamos el indicador del promedio móvil como una condición adicional de entrada en el mercado a nuestra estrategia de negociación. Para ello, utilizaremos la función iMA () que está incorporada en MQL4. Funciones como iMA, iMACD, iRSI y muchos otros le permiten acceder rápidamente a la media móvil, MACD, RSI y otros indicadores de su Algorithmic Trading Systems. En este curso de principiantes sólo tocaremos brevemente el iMA (), pero eso debería ser suficiente para lo que necesitamos en nuestro sistema de comercio. Código para corretores de 4 dígitosSaucer Esta es la única señal de compra que viene cuando el gráfico de barras es más alto que la línea cero. Hay que tener en cuenta: la señal del platillo se genera cuando el gráfico de barras invierte su dirección de abajo hacia arriba. La segunda columna es más baja que la primera y está coloreada en rojo. La tercera columna es más alta que la segunda y está coloreada en verde. Para que se genere la señal del plato, el gráfico de barras debe tener al menos tres columnas. Tenga en cuenta que todas las columnas Awesome Oscillator deben estar sobre la línea cero para que se use la señal del platillo. Cruce de línea cero La señal de compra se genera cuando el gráfico de barras pasa del área de valores negativos a la de positivo. Viene cuando el gráfico de barras cruza la línea cero. En cuanto a esta señal: para que esta señal sea generada, sólo se necesitan dos columnas, la primera columna debe estar por debajo de la línea cero, la segunda debe cruzarla (transición de un valor negativo a positivo) generación simultánea de señales Comprar y vender es imposible. Picos gemelos Esta es la única señal de compra que se puede generar cuando los valores del gráfico de barras están por debajo de la línea cero.


No comments:

Post a Comment