Saturday, 28 October 2017

Media Móvil Simple A Mq4


MetaTrader 4 - Experts Moving Average - experto para MetaTrader 4 El experto en media móvil para la formación de señales comerciales utiliza una media móvil. La apertura y el cierre de las posiciones se realizan cuando el promedio móvil satisface el precio en la barra recién formada (índice de barras igual a 1). El tamaño del lote se optimizará según un algoritmo especial. El asesor experto analiza la concurrencia de la media móvil y la tabla de precios de mercado. La comprobación se realiza mediante la función CheckForOpen (). Si la media móvil cumple con la barra de tal manera que la primera es superior al precio abierto pero inferior al precio cerrado, se abrirá la posición de COMPRA. Si la media móvil cumple con la barra de tal manera que la primera sea inferior al precio de apertura pero superior al precio de cierre, se abrirá la posición de venta. La gestión del dinero utilizada en el experto es muy simple, pero eficaz: el control sobre cada volumen de posición se realiza dependiendo de los resultados de las transacciones anteriores. Este algoritmo es implementado por la función LotsOptimized (). El tamaño del lote básico se calcula sobre la base del riesgo máximo permitido: El parámetro MaximumRisk muestra el porcentaje de riesgo básico para cada transacción. Por lo general, posee un valor entre 0,01 (1) y 1 (100). Por ejemplo, si el margen libre (AccountFreeMargin) es igual a 20.500 y las reglas de administración de capital prescriben usar el riesgo de 2, el tamaño del lote básico hará 20500 0.02 / 1000 0.41. Es muy importante controlar la precisión del tamaño del lote y normalizar el resultado con los valores permitidos. Normalmente, se permiten lotes fraccionados con paso de 0,1. No se realizará una transacción con un volumen de 0,41. Para normalizar, la función NormalizeDouble () se utiliza con precisión hasta 1 carácter después del punto. Esto resulta en el lote básico de 0,4. El cálculo del lote básico sobre la base del margen libre permite aumentar los volúmenes de operación dependiendo del éxito comercial, es decir, el comercio con la reinversión. Éste es el mecanismo básico con la gestión obligatoria del capital para aumentar la eficacia de los intercambios. DecreaseFactor es la medida en que el tamaño del lote se reducirá después de un comercio no rentable. Los valores normales son 2,3,4,5. Si las transacciones precedentes no eran rentables, los volúmenes posteriores disminuirán por un factor de DecreaseFactor para esperar a través del período no rentable. Este es el principal factor en el algoritmo de gestión de capital. La idea es muy simple: si el comercio está aumentando con éxito, el experto trabaja con el lote básico de obtener el máximo beneficio. Después de la primera transacción no rentable, el experto reducirá la velocidad hasta que se realice una nueva transacción positiva. El algoritmo permite desactivar la reducción de velocidad, para ello, se tiene que especificar DecreaseFactor 0. El importe de las últimas transacciones no rentables sucesivas se calcula en el historial comercial. El lote básico se recalculará sobre esta base: Por lo tanto, el algoritmo permite reducir eficazmente el riesgo que se produce como resultado de una serie de transacciones no rentables. El tamaño del lote se comprueba obligatoriamente para el tamaño de lote mínimo permitido al final de la función porque Los cálculos realizados anteriormente pueden resultar en el lote 0: El experto está principalmente destinado a trabajar con el período diario, y en el modo de prueba - para hacer a precios cerrados. Se comercializará sólo en la apertura de una nueva barra, es por eso que los modos de cada modelo de garrapatas no son necesarios. Los resultados de las pruebas se representan en el informe. Simple consejero experto Problema 29. Crear un Asesor experto en comercio. Argumentos Preliminares Antes de comenzar a programar un Asesor Experto en comercio, es necesario definir los principios generales de un programa futuro. No hay un programa estricto que crea reglas. Sin embargo, una vez que ha creado un programa, un programador por lo general sigue mejorando. Para poder entender fácilmente el programa en el futuro, debe crearse de acuerdo con un esquema bien pensado y fácil de entender (es especialmente importante si un programa va a ser mejorado por otro programador). El programa más conveniente es el que consiste en bloques funcionales, cada uno de los cuales es responsable de su parte de cálculos. Para crear un algoritmo de un asesor experto en comercio, vamos a analizar lo que un programa operativo debe hacer. Uno de los datos más importantes en la formación de órdenes comerciales es la información sobre los pedidos que ya existen en un terminal cliente. Algunas de las estrategias de negociación permiten un solo orden unidireccional. Generalmente, si una estrategia de negociación permite, varias órdenes pueden estar abiertas en un terminal al mismo tiempo, aunque su número debe ser razonablemente limitado. Cuando se utiliza cualquier estrategia, las decisiones comerciales deben tomarse teniendo en cuenta la situación actual. Antes de que se tome una decisión comercial en un programa, es necesario saber qué órdenes comerciales ya se han abierto o colocado. En primer lugar, un programa debe contener un bloque de órdenes de contabilidad que está entre los primeros en ejecutarse. Durante una ejecución de EA se deben tomar decisiones comerciales, cuya implementación conduce a la ejecución de operaciones comerciales. La parte del código responsable de la formación de órdenes comerciales se escribe mejor en un bloque separado. Un asesor experto puede formar una solicitud de comercio para abrir una nueva orden pendiente o de mercado, cerrar o modificar cualquiera de las órdenes existentes o no realizar ninguna acción. Una EA también debe calcular los precios de pedido en función del deseo de los usuarios. Las decisiones comerciales deben tomarse en un programa sobre la base de criterios comerciales. El éxito de todo el programa depende de la corrección de la detección de criterios comerciales en el programa. Al calcular los criterios comerciales, un programa puede (y debe) tener en cuenta toda la información que pueda ser útil. Por ejemplo, un Asesor experto puede analizar la combinación de valores de indicadores técnicos, el tiempo de los comunicados de prensa importantes, la hora actual, los valores de algunos niveles de precios, etc. Por conveniencia, la parte del programa responsable del cálculo de los criterios de negociación debe escribirse en un bloquear. Un Asesor Experto debe contener necesariamente un bloque de procesamiento de errores. El análisis de los errores que pueden producirse en la ejecución de la operación comercial permite, por un lado, repetir una solicitud comercial y, por otro lado, informar al usuario sobre una posible situación de conflicto. Estructura de un Asesor Experto Simple A continuación se muestra un esquema estructural de un Asesor Experto simple construido sobre la base de varios bloques funcionales, en cada bloque una cierta parte separada de los cálculos. En la etapa de desarrollo de EA siguiente todavía no hay código de programa. Al mismo tiempo, el algoritmo de un programa se forma en gran medida. Cómo se construirá la EA sobre las bases del esquema ofrecido puede ser fácilmente entendido simplemente mirando el esquema y orientándose sobre nombres de bloques y matrices de relaciones (control passing) entre ellos. Después del control de arranque del programa se pasa al bloque de procesamiento preliminar. En este bloque se pueden analizar algunos parámetros generales. Por ejemplo, si no hay suficientes barras en una ventana (barras necesarias para calcular parámetros de indicadores técnicos), una EA no podrá funcionar adecuadamente. En tal caso, una EA debe terminar la operación informando preliminarmente al usuario sobre ella e informando sobre el motivo de la terminación. Si no hay contraindicadores de carácter general, el control se pasa al bloque de contabilidad del pedido. En el bloque de órdenes de contabilidad se detecta el número y la calidad de las órdenes existentes en un terminal cliente para una seguridad (a la ventana de la que está asociada la EA). En este bloque deben eliminarse los pedidos de otros valores. Si una estrategia de negociación programada requiere el uso de sólo órdenes de mercado (y no utiliza pedidos pendientes) debe detectarse el hecho de la presencia de pedidos pendientes. Si una estrategia admite sólo una orden de mercado y hay realmente varias órdenes, este hecho también debe ser conocido. La tarea del bloque de contabilidad de órdenes (en este esquema) consiste en definir si la situación comercial actual se corresponde con una esperada, es decir, aquella en la que la EA puede funcionar adecuadamente. Si la situación se corresponde, el control debe pasar al siguiente bloque para continuar la operación de EAs si no, la operación de EA debe ser terminada y este hecho debe ser reportado a un usuario. Si no hay órdenes en el terminal o el número y la calidad de las órdenes existentes corresponde a lo que se esperaba, el control se pasa al bloque de definir los criterios de negociación. En este bloque se calculan todos los criterios necesarios para tomar decisiones comerciales, es decir, los criterios de apertura, cierre y modificación de órdenes. El control adicional se pasa al bloque de órdenes de cierre. Es fácil entender por qué en el esquema ofrecido el bloque de órdenes de cierre se ejecuta antes que el bloque de órdenes de apertura. Siempre es más razonable procesar las primeras órdenes existentes (cerrar o modificar) y sólo después de eso abrir órdenes nuevas. Generalmente, es correcto estar guiado por el deseo de tener tan pocos pedidos como sea posible. Durante la ejecución de este bloque se deben cerrar todos los pedidos, para los que se ha activado el criterio de cierre. Después de que todas las órdenes necesarias han sido cerradas, el control se pasa a un bloque de nuevo cálculo de tamaño de órdenes. Hay un montón de algoritmos para calcular un volumen de pedido. La más simple de ellas es usar un tamaño de lote constante y fijo. Es conveniente usar este algoritmo en un programa para probar estrategias. Un método más popular de definir un tamaño de orden es establecer el número de lotes dependiendo de la cantidad de margen libre, por ejemplo 30-40 de la misma. Si el margen libre no es suficiente, el programa termina su operación informando al usuario sobre la razón. Después de definir el número de lotes para la apertura de nuevos pedidos, el control se pasa al bloque de apertura del pedido. Si alguno de los criterios calculados anteriormente señala la necesidad de abrir una orden de cierto tipo, se forma en este bloque una solicitud de negociación para abrir una orden. También hay un bloque de análisis de errores en un asesor experto. Si falla alguna operación comercial, el control (sólo en este caso) se pasa al bloque de procesamiento de errores. Si un error devuelto por un servidor o un terminal de cliente no es crucial, se hace un intento más para realizar una operación comercial. Si se devuelve un error crucial (por ejemplo, una cuenta se bloquea), un EA debe finalizar su operación. Recuerde que en MQL4 no hay posibilidad de que el programa termine una operación de EA en una ventana de seguridad (a diferencia de los scripts, vea Funciones especiales). Lo que se puede hacer de una manera programada es la terminación de start (). En un nuevo inicio de la función start () en una nueva marca el valor de una determinada bandera variable que prohíbe la negociación (en este caso habilitada como resultado de un error crítico) puede ser analizado y el control puede ser pasado para la terminación de la Operación de la función especial así la formación de la nueva petición del comercio no se permite. En el esquema ofrecido se analiza el valor de la bandera en el bloque de procesamiento preliminar. Estrategia de negociación Los precios de mercado se están moviendo constantemente. El estado del mercado en cualquier momento puede caracterizarse condicionalmente como una tendencia - fuerte cambio de precio unidireccional (subida o bajada), o como un movimiento de precio plano - lateral con desviaciones débiles de una cierta media. Estas características del mercado son condicionales, porque no existen criterios claros, según los cuales se pueda identificar la tendencia o el plano. Por ejemplo, movimientos laterales largos con fuertes desviaciones que no se pueden rastrear ni a un plano ni a una tendencia. En general se supone que el mercado se encuentra principalmente en el estado de movimiento lateral y las tendencias suelen tener lugar 15-20 de tiempo. Todas las estrategias comerciales también se pueden dividir convencionalmente en dos grupos principales. El primer grupo contiene estrategias planas. La idea principal de estas estrategias es que después de una evidente desviación el precio debe volver a la posición anterior, es por eso que las órdenes se abren en la dirección contraria al último movimiento de precios. Las estrategias del segundo grupo son estrategias de tendencia, cuando los pedidos se abren en la misma dirección que el movimiento del precio del sal. Hay estrategias más complicadas (combinadas). Tales estrategias tienen en cuenta muchos factores diferentes que caracterizan el mercado como resultado de comercio se puede ejecutar tanto en plano y tendencia. No es difícil implementar el comercio de acuerdo con esta o aquella estrategia técnicamente - MQL4 contiene todos los medios necesarios para ello. El trabajo principal en la creación de una vez estrategia propia consiste en la búsqueda de criterios comerciales. Criterios de Negociación En este ejemplo trataremos de construir un Asesor Experto de tendencias, es decir, el que abrirá órdenes en la dirección de movimiento de precios. Por lo tanto, tenemos que encontrar entre varios indicadores técnicos los que detectan una tendencia de inicio. Uno de los métodos más simples de búsqueda de criterios comerciales se basa en el análisis de la combinación de MA con diferentes períodos de promedio. Higo. 111 y la fig. 112 muestran la posición de dos MA diferentes (con períodos de promedio 11 y 31) en diferentes partes del mercado. Los promedios con un pequeño período de promedio (líneas rojas) están más cerca de un gráfico de precios, twisty y movible. Los promedios móviles con mayor período de promediación (línea azul) son más inertes, tienen mayor retraso y están situados más lejos de los precios de mercado. Vamos a prestar atención a los lugares donde MA con diferentes períodos de promediación cruzar y tratar de decidir, si el hecho de MA cruzamiento se puede utilizar como un criterio de lectura. Higo. 111. Cruce de MA (11) y MA (31) cuando cambia la dirección del movimiento del precio. En la Fig. 111 vemos una parte del mercado en la que se justifican las órdenes de apertura en el sentido de movimiento de precios en el cruce MA. En el punto A la línea roja cruza la azul de abajo hacia arriba, después de que el precio de mercado continúa creciendo durante algún tiempo. El avance inverso del MA indica el cambio de dirección del movimiento del precio. Si abrimos una orden de Compra en el punto A y la cerramos en B, obtendremos un beneficio proporcional a la diferencia de los precios de A y B. Higo. 112. Cruce de MA (11) y MA (31) cuando cambia la dirección de movimiento del precio. Al mismo tiempo hay otros momentos en el mercado cuando se cruzan MA, pero esto no conduce a una subida o caída de precios aún más considerable (Fig. 112). Las órdenes abiertas en el cruce de MA en tales momentos darán lugar a pérdidas. Si Sell se abre en A y se cierra en B, dicha negociación traerá pérdidas. Lo mismo puede decirse de una orden de compra abierta en B y cerrada en C. El éxito de toda la estrategia implementada sobre la base del cruce de MA depende del número de piezas que se pueden caracterizar como tendencia y plana. En plano, a menudo MA crossing es un evento regular que interfiere con cualquier estrategia de tendencia. Numerosas señales falsas, por regla general, conducen a pérdidas. Esta es la razón por la que este cruce de signos de MA con diferentes períodos de promedio puede ser utilizado para la construcción de estrategias comerciales sólo en combinación con otros signos que demuestran una tendencia. En este ejemplo (para la construcción de un asesor experto simple) tendremos que rechazar el uso de este signo. Usaremos otra señal. Analizando visualmente el carácter de los cambios de precios en el mercado, podemos ver que una larga subida o caída de una dirección de precios a menudo aparece como resultado de un movimiento corto y fuerte. En otras palabras, si en un corto período se produjera un fuerte movimiento, podemos esperar su continuación en un período de mediano plazo. Higo. 113 muestra el período de mercado cuando un movimiento fuerte dio lugar a la continuación del cambio de precio en la misma dirección. Como el movimiento fuerte de cuota podemos utilizar la diferencia de MAs con diferentes períodos de promedio. Cuanto más fuerte sea el movimiento, mayor será el retraso de MA con un período promedio más grande de MA con un pequeño período de promedio. Además, incluso fuertes movimientos de precios discontinuos con retorno adicional no dan lugar a una gran diferencia entre MAs, es decir, no aparecen numerosas señales falsas. Por ejemplo, el salto de precios por 50 puntos con un retorno adicional (en el centro en la figura 113) implicó un aumento de la diferencia entre MAs sólo en 20 puntos. Al mismo tiempo, un movimiento realmente fuerte (que no suele acompañarse de una corrección considerable) en el punto A dio lugar a que la diferencia aumentara hasta 25-30 puntos. Si se abre el pedido de compra cuando se alcanza un cierto valor de diferencia entre MA, por ejemplo en A, lo más probable es que el pedido sea rentable cuando un precio alcanza un valor de orden de parada preestablecido. Utilice este valor como criterio de negociación en nuestro asesor experto. Número de órdenes En este ejemplo, analizamos un asesor experto que admite la presencia de una única orden de mercado, no se proporcionan órdenes pendientes. Este enfoque se justifica no sólo en este ejemplo concreto, sino que puede utilizarse como base para cualquier estrategia. Los pedidos pendientes usualmente se usan cuando un desarrollador tiene un criterio bastante confiable para pronosticar el cambio de precio futuro con alta probabilidad. Si no existe tal criterio, no hay necesidad de utilizar órdenes pendientes. La situación cuando varias órdenes opuestas para una seguridad están abiertas también no puede considerarse razonable. Se escribió anteriormente que desde el punto de vista económico se considera que los órdenes opuestos son insensatos, especialmente si los precios del pedido son iguales (ver Cierre y Supresión de Órdenes). En tal caso debemos cerrar un orden por otro y esperar una señal para abrir un orden de mercado en una determinada dirección. Relación de Criterios de Negociación Desde esta posición se hace evidente qué relaciones son posibles entre los criterios de negociación. Higo. 114 muestra tres variantes de correlación de criterios de negociación, cuando cada criterio es importante (válido). Las acciones (apertura y cierre de órdenes de mercado) se realizan en el sentido de las agujas del reloj en las siguientes imágenes. Higo. 114. Ordene la correlación de los criterios de apertura y cierre (a y b - correcta, c - incorrecta). La variante más popular de un criterio de negociación correctamente formado es la variante a. Después de abrirse una orden de mercado la compra se mantiene hasta el momento en que el criterio que requiere su cierre dispara. Después de esto se produce una pausa cuando no se abren órdenes. Además, se puede abrir una venta en el mercado. Las condiciones para cerrar una orden de venta (de acuerdo con los criterios correctamente formados) se producen antes, que las condiciones para abrir una orden de compra. Sin embargo, una orden de compra se puede abrir una vez más, si un criterio de negociación requiere esto. Pero de acuerdo con esta variante no se puede abrir una orden de mercado si hay un orden de mercado abierto en la dirección contraria. La correlación de criterios similar se encuentra en la variante b. La diferencia es que un criterio para abrir cualquier orden de mercado es al mismo tiempo un criterio para cerrar el orden opuesto. Esta variante como la variante a no permite varias órdenes abiertas en el terminal al mismo tiempo en una seguridad. La variante de correlación de criterios es incorrecta. De acuerdo con esta variante se permite la apertura de una orden de mercado cuando las órdenes contrarias no se cierran todavía, lo cual es insensato. Puede haber casos raros cuando esta variante está parcialmente justificada. La apertura de una orden opuesta a veces es aceptable para compensar las pérdidas que ocurren con pequeñas correcciones después de fuertes movimientos de precios. En tales casos se puede abrir un orden opuesto del mismo valor o menor que el existente y luego cerrarse cuando la corrección ha terminado. Tal táctica permite no interferir con el orden quotmainquot abierto en la dirección de la tendencia. En general, también son posibles varias órdenes de una dirección. Esto puede justificarse cuando un orden abierto anterior está protegido por una orden Stop y el criterio que apunta a la evolución de los precios en la misma dirección se activa de nuevo. Sin embargo, al crear una estrategia de este tipo, un desarrollador debe ser plenamente consciente de que en caso de un cambio brusco de movimiento de precios, las órdenes de stop colocadas pueden no ser ejecutadas por algunos corredores al primer toque de precio. Y la pérdida será proporcional al valor total de las órdenes de mercado unidireccionales. En nuestro ejemplo utilizamos la variante b de la correlación de criterios de negociación. Todas las órdenes de mercado abiertas están cerradas por una orden de stop o después de un criterio de apertura de una orden en sentido contrario dispara (aquí criterio de cierre de Compra coincide con el de apertura de Venta y viceversa). Tamaño de las órdenes abiertas En cualquier estrategia de negociación los tamaños de la orden deben ser razonablemente limitados. En un caso simple, se utiliza un tamaño de pedido fijo en un asesor experto. Antes de que comience la operación EA, un usuario puede establecer cualquier tamaño de órdenes futuras y dejarlo sin cambios durante algún tiempo. Además, si el balance cambia, un usuario puede configurar un nuevo valor de números de lote de pedidos abiertos. Un tamaño de pedido demasiado pequeño proporciona más confianza en la operación ante el imprevisible cambio de mercado, pero el beneficio en caso de éxito no será tan grande. Si el tamaño del pedido es demasiado grande, se pueden obtener grandes ganancias, pero tal EA será demasiado arriesgada. Por lo general, el tamaño de las órdenes abiertas se establece de tal manera que los requisitos de margen no excedan de 2-35 por ciento del saldo o margen libre (si una estrategia permite sólo un orden abierto, el equilibrio y el margen libre en el momento antes de la apertura de la orden será igual). En este ejemplo se implementan ambas variantes. Un usuario puede elegir indicar directamente valores de órdenes o establecer el valor en porcentaje del margen libre. Detalles de programación Una tendencia simple Asesor experto tradingexpert. mq4 construido sobre la base de argumentos anteriores puede tener este aspecto: Describiendo variables Un criterio más en la estimación del programa es su legibilidad. Un programa se considera que está escrito correctamente, si puede ser leído fácilmente por otros programadores, es por eso que todas las partes del programa principal y los principales momentos que caracterizan la estrategia deben ser comentados. También es por eso que se recomienda declarar y comentar todas las variables al inicio del programa. En el bloque 1-2 se describen variables externas y globales. De acuerdo con las reglas, las variables externas y globales deben ser abiertas antes de su primer uso (ver Tipos de Variables), es por eso que se declaran en la parte de la cabeza del programa. Todas las variables locales de la función start () se recogen y se describen en la parte superior de la función (bloque 2-3) inmediatamente después de la cabecera de la función. Las reglas de declarar variables locales no lo requieren, pero tampoco lo prohíben. Si un programador se enfrenta a dificultades para entender el significado de una variable al leer el programa, puede referirse a la parte superior del programa y averiguar el significado y el tipo de cualquier variable. Es muy conveniente en la práctica de la programación. Bloque de tratamiento preliminar En este ejemplo, el preproceso consiste en dos partes (bloque 3-4). El programa termina la operación si no hay suficientes barras en una ventana de seguridad, en tal caso es imposible detectar correctamente (en el bloque 5-6) los valores de las medias móviles necesarias para calcular los criterios. Además aquí se analiza el valor de la variable Trabajo. En la operación EA normal, el valor de la variable es siempre verdadero (se establece una vez durante la inicialización). Si se produce un error crítico en la operación del programa, se asigna false a esta variable y start () finaliza su operación. Este valor no cambiará en el futuro, es por eso que no se ejecuta el código siguiente. En tal caso, la operación del programa debe ser detenida y el motivo del error crítico debe ser detectado (si es necesario, se debe contactar a un centro de negociación). Una vez solucionada la situación, se puede iniciar de nuevo el programa, es decir, el EA se puede conectar a una ventana de seguridad. Órdenes de contabilidad El consejero experto descrito permite trabajar sólo con una orden de mercado. La tarea del bloque de contabilización de órdenes (bloque 4-5) es definir las características de un orden abierto, si lo hay. En el bucle que va a través de las órdenes para todo el mercado existente y las órdenes pendientes se comprueban, a saber de la primera (int i1) a la última (iampltOrdersTotal ()). En cada ciclo de iteración el siguiente orden es seleccionado por la función OrderSelect (). La selección se realiza desde una fuente de órdenes abiertas y pendientes (SELECTBYPOS). Si la selección se ejecuta con éxito (es decir, hay una orden más en el terminal), además este orden y la situación debe ser analizada: si el orden se abre para la seguridad, en la que la EA opera, si el orden es de mercado o pendiente También debe tenerse en cuenta al contar órdenes. En la línea: se eliminan todas las órdenes abiertas para otra seguridad. El operador continúa detiene la iteración y las características de tal orden no se procesan. Pero si se abre el pedido para la seguridad, a la ventana de la que se adjunta la EA, se analiza más a fondo. Si OrderType () devuelve un valor mayor que 1 (consulte Tipos de transacciones), la orden seleccionada es una pendiente. Sin embargo, en este Asesor experto gestionar órdenes pendientes no se proporciona. Significa que la ejecución de start () debe terminar, porque se produjo una situación de conflicto. En tal caso después de un mensaje sobre la operación start () la terminación start () la ejecución es detenida por el retorno del operador. Si el último cheque mostró que la orden analizada es una orden de mercado, se calcula y analiza el número total de pedidos para un valor. Para la primera de estas órdenes se definen todas las características necesarias. Si en la siguiente iteración el contador de órdenes (variable Total) encuentra la segunda orden de mercado, también se considera que la situación es conflictiva, ya que la EA no puede administrar más de una orden de mercado. En tal caso, la ejecución start () se detiene después de mostrar un mensaje correspondiente. Como resultado de la ejecución del bloque de contabilidad de pedido (si todas las comprobaciones tuvieron éxito) la variable Total conserva su valor cero si no hay órdenes de mercado o obtiene el valor 1 si existe una orden de mercado para nuestra seguridad. En este último caso, algunas variables establecidas en correspondencia con las características de orden (número, tipo, precio de apertura, niveles de parada y valor de pedido) también obtienen sus valores. Cálculo de los criterios de negociación En el ejemplo analizado, la definición de los criterios de negociación (bloque 5-6) se calcula sobre la base de la diferencia entre las medias móviles con diferentes períodos de promediación. De acuerdo con los criterios aceptados, un gráfico es dirigido al toro si el valor actual del MA con un período menor es mayor que el valor del MA con un período mayor y la diferencia entre los valores es mayor que un cierto valor. En un movimiento de oso MA con período menor es menor que MA con un período mayor y la diferencia es también mayor que un cierto valor crítico. A los valores de comienzo de bloque de MAs con periodos de promedio PeriodMA1 y PeriodMA2 se calculan. El hecho de significación de cualquier criterio de negociación se expresa a través del valor de una variable correspondiente. Las variables OpnB y OpnS indican el criterio de activación para la apertura de las órdenes de compra y venta, las variables Cls y ClsS para el cierre. Por ejemplo, si un criterio para la apertura de Buy no se ha activado, el valor de OpnB sigue siendo falso (establecido en la inicialización de la variable) si se ha activado, OpnB obtiene el valor true. En este caso el criterio para cerrar Sell coincide con el de apertura Buy, el criterio de apertura Sell coincide con el de closing Buy. Los criterios de negociación aceptados en este ejemplo se usan únicamente con fines educativos y no deben considerarse como una guía cuando se cotiza en una cuenta real. Órdenes de Cierre Se escribió anteriormente que este Asesor Experto está destinado a la operación sólo con una orden de mercado abierta para una seguridad, a la que se adjunta la EA. Hasta el momento en que el control en el programa se pasa al bloque de cierre de pedido se sabe con certeza que en el momento actual no hay órdenes para la seguridad, o sólo hay una orden de mercado. Es por eso que el código en el bloque de cierre de órdenes se escribe para que sólo una orden se puede cerrar con éxito. Este bloque se basa en el bucle infinito, mientras que el cuerpo del mismo consta de dos partes análogas: una para cerrar una orden de compra, otra para cerrar una orden de venta. Mientras que se utiliza aquí con el propósito de que en caso de un fracaso operación comercial podría repetirse una vez más. En la cabecera del primer operador si se calcula la condición para cerrar una orden de compra (las órdenes de venta se cierran de manera análoga). Si el tipo de un pedido abierto anterior corresponde a Buy (consulte Tipos de transacciones) y el signo para cerrar Buy es relevante, el control se pasa al cuerpo del operador si se forma una solicitud de cierre. Como precio de cierre de pedido en la función OrderClose () se indica el valor de una cotización a dos caras correspondiente al tipo de pedido (ver Requisitos y limitaciones en la realización de transacciones). Si una operación comercial se ejecuta correctamente, después de que se muestre un mensaje sobre el cierre del pedido, la corriente mientras la iteración se detiene y la ejecución del bloqueo de cierre de órdenes ha terminado. Pero si la operación falla, se llama a la función definida por el usuario para procesar errores FunError () (bloque 10-11). Procesamiento de errores Como un parámetro pasado en FunError () se utiliza el último código de error calculado por GetLastError (). Dependiendo del código de error FunError () devuelve 1 si el error no es crítico y la operación puede repetirse, y 0 si el error es crítico. Los errores críticos se dividen en dos tipos: aquellos, después de los cuales se puede continuar la ejecución de un programa (por ejemplo, un error común) y después de lo cual se debe detener la ejecución de cualquier operación comercial (por ejemplo, cuenta bloqueada). Si después de una operación comercial fracasada la función definida por el usuario devuelve 1, la corriente mientras la iteración termina y durante la siguiente iteración se hace otro intento de ejecutar la operación para cerrar la orden. Si la función devuelve 0, la ejecución start () actual se detiene. En el siguiente tick start () el terminal del cliente iniciará de nuevo y si se mantienen las condiciones para cerrar el pedido, se realizará otro intento de cerrar el pedido. Si durante el procesamiento de errores se descubre que la ejecución del programa adicional no tiene sentido (por ejemplo, el programa funciona en una versión de terminal antiguo) durante el próximo inicio, la ejecución de la función especial start () finalizará en el bloque de procesamiento preliminar cuando Analizando el valor de la variable Trabajo. Cálculo del monto de lotes para nuevas órdenes La cantidad de lotes se puede calcular de acuerdo con una configuración de usuario que sigue una de las dos variantes. La primera variante es un cierto valor constante establecido por un usuario. Según la segunda variante, la cantidad de lotes se calcula sobre la base de una suma igual a un cierto porcentaje (fijado por un usuario) de un margen libre. Al comienzo del bloque de definición de la cantidad de lotes para nuevas órdenes (bloque 7-8) se calculan los valores necesarios de algunas variables - cantidad mínima permitida de lotes y paso de cambio de lote establecido por un corredor, margen libre y precio de Un lote para la seguridad. En este ejemplo se proporciona lo siguiente. Si un usuario ha establecido un cierto valor distinto de cero de la variable externa Lts, por ejemplo 0,5, se acepta como la cantidad de lotes Lts cuando se crea una petición de comercio para abrir una orden. Si se asigna 0 a Lts, el número de lotes Lts se define a partir de la variable Prots (porcentaje), margen libre y condiciones establecidas por un corredor. Después de calcular Lts, se realiza un chequeo. Si este valor es inferior al valor mínimo permitido, se acepta el valor mínimo permitido. Pero si el margen libre no es suficiente, después de un mensaje correspondiente la ejecución start () se termina. Apertura de órdenes El bloque de órdenes de apertura (bloque 8-9) como el tipo de órdenes de apertura es un bucle infinito mientras. En el encabezado del primer operador si se calculan las condiciones para abrir una orden de compra: si no hay pedidos para la seguridad (la variable Total es igual a 0) y el signo para abrir una orden de compra es relevante (OpnB es cierto), el control Se pasa a si el cuerpo del operador para abrir una orden. En tal caso, después de actualizar las tarifas se calculan los precios de los niveles de parada. Los valores de los niveles de parada son establecidos inicialmente por un usuario en las variables externas StopLoss y TakeProfit. En un caso general, un usuario puede establecer valores para estos parámetros más pequeños que un corredor lo permita. Además, un corredor puede cambiar la distancia mínima permitida en cualquier momento (es un caso a menudo en movimientos fuertes del mercado, por ejemplo, antes del lanzamiento de noticias importante). Es por eso que antes de cada orden los niveles de parada de apertura deben calcularse teniendo en cuenta los valores establecidos por un usuario y el valor mínimo permitido establecido por un corredor. Para calcular los niveles de parada, la función definida por el usuario NewStop () se utiliza como parámetro pasado, se utiliza el valor de nivel de parada establecido por un usuario. En NewStop () primero se calcula la distancia mínima permitida actual. Si el valor establecido por un usuario corresponde a los requisitos de un corredor, se devuelve este valor. Si es menor que el valor permitido, se utiliza el valor permitido por un intermediario. Los precios de las solicitudes de parada se calculan a partir de la cotización bilateral correspondiente (consulte Requisitos y limitaciones en la realización de transacciones). Una solicitud comercial para abrir una orden se forma utilizando la función OrderSend (). Para el cálculo del precio de apertura de pedidos y los precios de las solicitudes de parada se utilizan los valores de cotización de dos caras correspondientes al tipo de pedido. Si una operación comercial fue exitosa (es decir, un servidor devolvió el número de una orden abierta) después de que se muestre un mensaje sobre una apertura satisfactoria del pedido. Start () finaliza. Si no se abrió una orden y el terminal cliente devolvió un error, el error se procesa de acuerdo con el algoritmo descrito anteriormente. Algunas peculiaridades del código El código del asesor experto analizado está orientado a la implementación de una determinada estrategia. Tenga en cuenta que algunas líneas de programa contienen variables y cálculos que se cambiarían si se cambiaba la estrategia. Por ejemplo, de acuerdo con la estrategia aceptada, el Asesor experto se desarrolla para trabajar sólo con una orden. Esto permitió utilizar la variable Ticket tanto para la identificación de un número de orden de cierre (en bloque de cierre 6-7) como para la identificación de un éxito de ejecución de una operación comercial al abrir un pedido (en el bloque de apertura 8-9 ). En este caso, tal solución es aceptable. Sin embargo, si tomamos el código analizado como base para la implementación de otra estrategia (por ejemplo, permitir órdenes opuestas) tendremos que introducir una o varias variables para poder reconocer el número de pedidos abiertos e identificar el éxito de las operaciones comerciales. En otras modificaciones de la estrategia tendremos que cambiar las líneas de programa que contienen parte de las lógicas contenidas en la estrategia de origen. A saber, en el bloque de contabilidad de pedidos no tendremos que terminar la operación del programa si hay varios pedidos abiertos para una seguridad. Además, las condiciones para abrir y cerrar pedidos también cambiarán. Esto implicará el cambio de código en bloques de órdenes de apertura y cierre. Sobre la base de este análisis podemos concluir fácilmente que el asesor experto descrito Simple no es perfecto. En un caso general, para la implementación de la contabilidad de órdenes se debe usar una función universal basada en el uso de matrices de datos y que no contenga lógicas de una determinada estrategia. The same can be said about the blocks of opening and closing orders. A more complete program must contain a main analytical function, all other user-defined functions must be subordinate to it. This analytical function must contain a program code, in which all conditions for the implementation of any strategy are analyzed all subordinate functions must perform limited actions. The function of accounting orders must only account orders, functions of opening and closing orders must only open and close orders, and the analytical function must quotthinkquot and manage all other functions, i. e. call them when needed. I am currently studying how to code MQL4 though am not a programmer. Mi objetivo es construir un EA simple basado en el cruce de 5 y 8 ajustes EMA. Crossover al alza abre las posiciones de compra, mientras que a la baja cierra las posiciones de compra y abre posiciones de venta automáticamente. Debe ser capaz de abrir al menos 10 posiciones simultáneamente. Tome beneficios, detenga la pérdida y el número de posiciones será ajustable. Si alguien tiene experiencia con EAs y tiene el tiempo para compartir su conocimiento de la misma, por favor, siéntase libre de ayudar a crear esta EA agregando un mensaje o una mensajería privada. Nadie tiene tiempo para la celebración de la mano. Heres el libro y un cierto ejemplo. Buena lectura. Este foro recibe este tipo de pregunta mucho. Su bienvenida a mirar a través de la base de código o ver mi intento de enseñar la codificación de un EA muy similar a lo que está pidiendo. Download MetaTrader 5 Copyright 2000-2016, MQL5 Ltd.

No comments:

Post a Comment