Un asesor que abre pedidos cada hora, puntual y en el momento adecuado. Trade Scheduler: limitación del trabajo del asesor. Límite de tiempo del asesor.

Hoy hablaremos de cómo existen asesores auxiliares que colocan órdenes temporales y pendientes, así como de cómo se cierran las transacciones.

Mejor corredor

Un asesor que abre órdenes cada hora o por tiempo es una herramienta que ayuda en diversas situaciones comerciales. En general, hasta donde yo sé, el interés por los asesores que realizan acciones similares existe desde hace mucho tiempo. Y en 2006 existían estos robots, y en 2008, según las solicitudes, se puede rastrear el interés en ellos, y ahora continúan apareciendo solicitudes para producir tales expertos. Al mismo tiempo, los traders experimentados, y no sólo los traders, sino también los que están comprometidos, suelen ayudar a los recién llegados. En general, esta es una buena tradición. Suele basarse en el intercambio mutuo. El novato aporta ideas y el experimentado obtiene el derecho de utilizar la idea y crea un código experto que comparte con su socio.

Cuando surgen las condiciones para utilizar estos expertos

Sin embargo, ¡vamos al grano! Mi historia de hoy es la historia de un experto en realizar pedidos en el momento adecuado. Se utiliza para una variedad de propósitos. Por ejemplo, existen sistemas de negociación que están estrictamente vinculados al inicio de una vela o sesión. Por ejemplo, existe y, según mi modesta investigación, en la realidad existe cierta apariencia de tales ondas, pero aparecen en diferentes períodos de tiempo y hay períodos de diferente duración. Puede encontrarlos, por ejemplo, en USDCAD en Mn.

Hay velas que son muy parecidas entre sí todos los meses. En enero, por ejemplo, por ejemplo, desde hace seis años hay una tendencia alcista o una tendencia a la baja, ese no es el punto. Para recibir ingresos mediante el uso de este método, debe realizar un pedido en la dirección determinada por el método de investigación al comienzo del mes y eliminarlo al final, y hacerlo solo en ciertos meses del año. Precisamente por eso el experto realiza los pedidos por fecha, hora y minuto.

Un experto que da órdenes en el momento adecuado también implementa otras tareas, por ejemplo, se sabe que mañana habrá una tendencia en el mercado y idea comercial estipula que es necesario tomar posiciones en cada vela horaria en la dirección de la tendencia. Y debe cancelar las órdenes al final del día de negociación.

Por lo tanto, los pedidos aparecerán en forma de dicha cuadrícula. Puedes ver cómo se hace esto de manera diferente en la página donde. Al final de la jornada laboral se eliminan las órdenes de compra, venta y mercado, también en el momento adecuado.

¿Por qué es así? Porque este enfoque lo he visto en la siguiente modificación: colocar órdenes en cada vela con una orden de mercado o también en cada vela, pero con stop de compra y venta en direcciones opuestas. En el segundo caso, es posible que ni siquiera sepas en qué dirección se moverá el mercado, sino que simplemente captes el movimiento, como si usaras un cazamariposas. Además, al colocar órdenes stop de compra y venta en ambas direcciones, es posible que hasta el final del día una de ellas no se abra y quede suspendida.

Descargar

Así, queda claro que hoy en día existen tres tipos de peritos auxiliares en este contexto.

  1. El primer tipo es un experto que realiza órdenes en el mercado, teniendo en cuenta determinadas horas y minutos,
  2. El segundo tipo es un experto en órdenes pendientes por horas y minutos.
  3. El tercer tipo puede implementarse dentro de los dos primeros o ser programa separado. Este es exactamente el caso en nuestro ejemplo.

Experto en órdenes de mercado

Cuando sepa que la tendencia alcista comenzará a las 23:50, el precio definitivamente superará los 60 pips, con un stop loss de 30 pips, y tendrá un experto que seguirá el stop loss, por lo que necesitará una orden. Al mismo tiempo, no estarás muy lejos, por lo que el sonido que avisa de la apertura te vendrá muy bien. En tales condiciones, necesitará el primer tipo de experto. En este caso, se trata del experto de e-OpenByTime. Este experto, que se puede descargar mediante botones sociales, tiene los siguientes parámetros:

  • TimeTrade: aquí usted establece el momento exacto en el que se debe abrir la orden. Formato de datos hh:mm.
  • Duración: el período en segundos durante el cual el experto intentará realizar un pedido.
  • Vender: aquí debe especificar el tipo de orden verdadera; esto significa que se abrirá una orden en el mercado para vender el activo. El valor falso corresponde a una orden de compra.
  • Lotes: esta opción limitará su lote comercial a un valor específico.
  • SopLoss: el stop loss está diseñado para corredores de cuatro dígitos, por lo que para determinar su tamaño en 30 puntos es necesario establecer el valor en 300
  • TakeProfit: la misma historia ocurre con la toma de ganancias.
  • MagicNumber – Creo que todo está claro aquí.
  • UseSound: luego viene la configuración de sonido.
  • NameFileSound – aquí seleccionamos un archivo de sonido.
  • Del resto de configuraciones, sólo MaketWatch puede generar dudas. Resulta que esta configuración es necesaria para garantizar que las solicitudes comerciales se envíen de acuerdo con las reglas de Vigilancia del Mercado que exigen algunos corredores.

Experto en pedidos pendientes

El segundo tipo de expertos que trabajan en la apertura de órdenes pendientes son los expertos en varios sistemas de comercio de cajas. Similar

Esta vez describiré a un experto, por así decirlo, auxiliar, que, independientemente de las tendencias y otros signos del gráfico, abrirá dos operaciones de compra y venta en ambas direcciones.

se trata de sobre el experto 37_Exp-TimeOpenBuy. La configuración es bastante sencilla.

  • BuyStopOpen y SellStopOpen: ambos en este caso se definen como verdaderos.
  • Distancia: determina a qué distancia del precio actual se realizarán estas órdenes. Tenga en cuenta que el valor aquí y en la siguiente línea se calcula para un corredor de cuatro dígitos, por lo que para establecer la distancia debe usar un número, por ejemplo, 30 puntos y agregar otro 0 al final.
  • TPBuyStop, SLBuyStop, TPSellStop, SLSellStop: le permiten determinar la distancia para obtener ganancias y detener pérdidas para cada orden. (Aquí también agregamos un cero al número al final).
  • CloseAfterOpen: le permite eliminar una operación que permanece después de que se haya activado una de las órdenes de compra y venta.
  • El deslizamiento es una configuración que, según mi experiencia, debe establecerse en cualquier valor distinto de cero para poder realizar pedidos. Este es el valor máximo de deslizamiento.
  • CloseIfNotOpen: fue concebida como una función que elimina todas las paradas fallidas de compra y venta en un nuevo momento. Sin embargo, por mucho que intenté utilizar esta operación, no salió nada.
  • El resto de opciones son necesarias para determinar el momento de entrada al mercado y salida del mismo.

Eliminador experto de depósitos.

Finalmente, el tercer asesor, que, utilizando el código mql4 que compilé, realiza la eliminación de buy-, a tiempo, con mayor precisión que todos ellos. En general, ahora tendrá un conjunto completo de asesores para colocar órdenes de compra y venta en el mercado y un experto que cerrará las órdenes a tiempo. Para hacer esto, antes del ciclo, que simplemente cierra las órdenes de compra y venta, de hecho, o sería más correcto decir: las elimina, es necesario realizar una verificación si (TimeCurrent()>=BlackTime). En este caso, a la variable se le asigna el tiempo tras el cual se eliminan las órdenes.

Este asesor es ideal para quienes operan por niveles y cualquier estrategia que utilice órdenes de límite pendientes. ¡El asesor realizará pedidos en el momento adecuado y a la distancia adecuada del precio actual! En la configuración del robot, puede establecer límites de pérdidas, tomar ganancias de las órdenes, así como el lote de cada orden. Todo está configurado para cada pedido por separado. ¡Puedes colocar sólo un límite de compra, un límite de venta o ambos pedidos juntos!

El asesor está listo para trabajar en cualquier instrumento comercial, en cualquier terminal comercial Metatrader 4. El robot también está listo para trabajar en varios. pares de divisas inmediatamente. Es decir, puedes abrir cualquier número de pares e instalarles un asesor, dándole a cada uno su propio número mágico y configuración de tiempo. Después de lo cual, cada pareja trabajará estrictamente de forma individual. Si todavía trabajas con órdenes limitadas manualmente, ¡este robot es para ti!

  • Límite_COMPRA- Si se debe establecer una orden de límite de compra.
  • Límite_de_compra_lote- Límite de compra de órdenes de lote.
  • R_límite_compra- Distancia desde el precio actual hasta la orden límite de compra en puntos.
  • Stop_Loss_buy_limit- Órdenes límite de compra de stop loss.
  • Take_Profit_buy_limit - Tomar ganancias comprar órdenes limitadas.
  • VENDER_límite- Si se debe establecer una orden de límite de venta.
  • Límite_de_venta_lote- Límite de venta de órdenes de lote.
  • R_límite_venta- Distancia desde el precio actual hasta la orden límite de venta en puntos.
  • Stop_Loss_sell_limit- Límite de venta de órdenes Stop Loss.
  • Take_Profit_sell_limit- Límite de venta de órdenes de toma de ganancias.
  • deslizamiento- Máximo deslizamiento en puntos.
  • Close_Orders- Cerrar el segundo pedido al abrir el primero.
  • Veces- Vida útil del pedido en minutos.
  • Hora_inicio- ¿Hacer pedidos por tiempo?
  • Hora_hora- Horario de apertura de pedidos 0-23
  • Tiempo_Minuto- Minuto de apertura de órdenes 0 - 59. Por ejemplo, hora = 5, minuto 40, lo que significa que a las 5.40 las órdenes se realizarán en función del precio de ese momento.
  • Experto_I- número mágico para determinar sus órdenes y operaciones multidivisa.

si tu sistema de comercio No se basa en carreras de noticias, puede ser muy útil para la salud financiera y mental detener el trabajo del asesor antes de que se publiquen noticias importantes. Y después de que la volatilidad se calme, después de unas horas, vuelva a encenderlo. Es bueno si tienes acceso a una terminal que funcione a mano. ¿Y si no? Aquí es donde resulta útil la automatización de dichas actividades.

Una de las opciones para solucionar nuestro problema es compilar un archivo con un calendario de eventos importantes. Leyendo este archivo por parte de nuestro experto, y determinando cuando puedes trabajar y cuando no. El libro de texto MQL4 proporciona un ejemplo de cómo trabajar con un archivo de texto CSV, y lo tomaremos como base, eliminando al mismo tiempo un par de errores que los autores cometieron involuntariamente o para poner a prueba nuestra atención (sobre los cuales ellos mismos advierten: No debemos confiar ciegamente en nadie, los errores ocurren siempre).

Entonces, hagamos un calendario de eventos importantes la próxima semana en el siguiente formato:
Fecha y hora del evento; instrumento; descripción del evento;

2016.04.01 14:00;USD;Índice de actividad empresarial ISM en el sector manufacturero 2016.04.01 14:00;USD;Índice de aceleración gradual de la inflación desde ISM 2016.04.04 09:00;EUR;Índice de precios al productor (m/m ) 2016.04.04 09:00;EUR;Índice de precios al productor (interanual) 2016.04.05 04:30;AUD;Decisión Banco de Reserva Australia sobre la tasa de interés 2016.04.05 04:30;AUD;Declaración adjunta del Banco de la Reserva de Australia 2016.04.06 07:00;EUR;Reunión del BCE 2016.04.06 18:00;USD;Acta de la reunión del Banco Federal de EE.UU. Comité de Mercado Abierto 2016.04.07 11 :30;EUR;Información sobre la reunión del BCE sobre política monetaria

Escribámoslo en el archivo ht-news.csv y colóquelo en el directorio requerido \MQL4\Files\ht-news.csv, desde donde nuestro asesor podrá leerlo.

Primero, establezcamos variables externas para la configuración; los comentarios explican su propósito:

Cadena externa startNewsEvent="Restricción del trabajo en noticias"; entrada bool StopOnNewsEvent=true; //Habilitar la cadena de entrada de restricción NewsEventFileName="ht-news.csv"; //Archivo con programación input uint LoadNewsEventTimerInDay=7;//Con qué frecuencia en días recargar el archivo input uint StopPriorEventHours=2; //Detener X horas antes del evento input uint StartAfterEventHours=3; //Comienza X horas después del evento extern string stopNewsEvent="----------------";

La siguiente estructura nos ayudará a acceder a la descripción del evento que se está procesando:

Struct NEWS_EVENT (fecha y hora EventTime; //cadena de hora del evento Instrumento; //cadena de instrumento del evento EventComment; //comentario del evento);

Función personalizada para leer información de un archivo.

Bool LoadNews() ( int handle; // Instrumento de cadena de descriptor de archivo, // Nombre de la moneda del evento firstInstrument, secondInstrument, // Primera y segunda parte del nombre del par actual eventComment, // Texto de la descripción del evento stringDateTime; // Expresión de cadena de la fecha y hora del evento datetime eventDateTime; // Fecha y hora del evento en formato de fecha y hora handle=FileOpen(NewsEventFileName,FILE_CSV|FILE_READ,";");// Abrir un archivo if(handle<0) // Неудача при открытии файла { int lastError=GetLastError(); if(lastError==4103) // Если файла не существует, сообщим Alert("Нет файла с именем ",NewsEventFileName); else // При любой другой ошибке Alert("Ошибка при открытии файла ",NewsEventFileName," :",lastError); PlaySound("Bzrrr.wav"); // Громко ругнемся и вернем фалсе return false; } int cnt=0; while(FileIsEnding(handle)==false) { stringDateTime =FileReadString(handle);// Дата и время события instrument=FileReadString(handle); //Инструмент eventComment =FileReadString(handle);// Текст описания события, может не быть eventDateTime =StrToTime(stringDateTime); // Преобразование типа данных firstInstrument=StringSubstr(Symbol(),0,3);// Извлекаем первые 3 символа secondInstrument=StringSubstr(Symbol(),3,3);// Извлекаем вторые 3 символа if(StringCompare(instrument,firstInstrument,false)!=0 && StringCompare(instrument,secondInstrument,false)!=0) { continue; //не наши инструменты } cnt++; ArrayResize(NewsEvent,cnt,1000); //изменяем размер массива с запасом для ускорения ArrayResize(NewsEventTime,cnt,1000); NewsEvent.EventTime= eventDateTime; NewsEvent.Instrument=instrument; NewsEvent.EventComment=eventComment; NewsEventTime=eventDateTime; //удобнее искать в одномерном массиве } FileClose(handle); // Закрываем файл ArraySort(NewsEventTime,WHOLE_ARRAY,0,MODE_ASCEND); //сортируем массив для последующего поиска return true; }

Buscamos la hora requerida en la matriz NewsEventTime y, si la encontramos, obtenemos la descripción de su matriz de estructura NewsEvent.

Cadena GetEventInfo (fecha y hora) (para (int i = 0; i)

Función auxiliar para determinar si la hora actual cae dentro del tiempo de inactividad

//comprobar si necesitamos desactivar el asesor de noticias True - work False - rest bool CheckEnableNewsWork() ( if (ArraySize(NewsEventTime)==0) return true; //por alguna razón la matriz con la programación estaba vacía, lo que significa estamos trabajando //ahora necesitamos encontrar la fecha más cercana en NewsEventTime antes de la cual debemos dejar de trabajar para StopPriorEventHours horas datetime timeCurrent =TimeCurrent(); datetime timeStopWork=timeCurrent+StopPriorEventHours*3600; eso es menor que timeStopWork, entonces dejamos de trabajar int dateindex= ArrayBsearch(NewsEventTime,timeStopWork,WHOLE_ARRAY,0,MODE_ASCEND); datetime foundEventTime=NewsEventTime timeStopWork=foundEventTime-StopPriorEventHours*3600 //calcula el tiempo de parada a partir de la hora encontrada datetime; timeStartWork=foundEventTime+StartAfterEventHours*3600; / ahora verifiquemos si estamos en timeCurrent entre timeStopWork y timeStartWork. Si es así, entonces no estamos trabajando si (timeCurrent>=timeStopWork && timeCurrent.<=timeStartWork) { DrawLabel("EnableNewsWork","Не работаем, новость: "+GetEventInfo(foundEventTime)+"",5,80,Red); return false; } else { DrawLabel("EnableNewsWork","Нормальная работа, новостей нет",5,80,Green); return true; } }

Para leer periódicamente un archivo con una programación, necesitamos un temporizador que se ejecute, por ejemplo, una vez a la semana, según lo configurado

//Comprueba la presencia de un archivo de noticias usando el temporizador void OnTimer() ( if (StopOnNewsEvent) ( LoadNews(); //lee el archivo ) )

Al inicializar el asesor, debe iniciar el cronómetro y leer las noticias por primera vez.

OnInit() .... if (StopOnNewsEvent) //Si está configurado, carga el archivo con las noticias ( bool tm=EventSetTimer(LoadNewsEventTimerInDay*86400); //inicia el temporizador para cargar el archivo con la programación if (!tm) Alert("Error de EventSetTimer :",GetLastError()); OnTimer();//Primer lanzamiento inmediato)

En cada tick comprobamos si podemos abrir posiciones. Por cierto, esto no debería afectar el seguimiento.

OnTick() .... bool enableNewsWork=true; //puedes trabajar en eventos de noticias if (StopOnNewsEvent) ( enableNewsWork=CheckEnableNewsWork(); //Si hay un límite de noticias, verifica la hora) if (HaveMoney && enableNewsWork) Traiding(Pairs); //verificar condiciones y abrir operación en un par

Eso es todo. Desafortunadamente, todavía no he probado este código en una cuenta real, ya que lo escribí el fin de semana, emulé los ticks con un temporizador y cambié manualmente la hora actual, que se detiene el fin de semana. Pero la próxima semana lo miraré en la vida real, en la nueva versión “Forex Grail 1.11”, donde incrusté el código anterior.

En el futuro, es posible que necesite crear una utilidad conveniente para generar el archivo ht-news.csv, por ejemplo en el mismo

Probablemente haya notado que las operaciones en ciertos días o incluso horas generan pérdidas. Por ejemplo, podrían ser transacciones del viernes por la noche, cuyo resultado, cuando se transfiere durante el fin de semana, suele ser impredecible. ¿Qué tengo que hacer? ¿Activar y desactivar manualmente el asesor? Esto no es muy conveniente y todos somos humanos; simplemente puedes olvidarte de hacerlo.

Resolviendo el problema - asesor auxiliar Programador de Comercio, que permite limitar el tiempo de trabajo de otros expertos según el horario marcado por el comerciante. Por ejemplo, puede limitar el comercio de robots de 7 a 11 a. m. el lunes. Este desarrollo proviene de nuestros amigos de ArgoLab y hoy lo conoceremos en detalle.

Análisis estadístico

Antes de limitar el trabajo del asesor, primero se debe determinar en qué momento la estrategia se debilita. Para hacer esto, puede utilizar uno de los servicios de monitoreo, como myfxbook, que proporciona estadísticas comerciales detalladas a lo largo del tiempo. Para que el análisis sea fiable, es recomendable disponer de estadísticas comerciales de al menos tres meses.

Entonces, primero, debes comenzar a monitorear en myfxbook. Hay información sobre cómo hacer esto en nuestro sitio web. . Tomemos como ejemplo el seguimiento de asesores. Cazador de divisas.

También puede descargar un informe del probador de estrategias al sitio. Esto es principalmente necesario para aquellos que aún no tienen suficiente historial acumulado en una cuenta real, pero tienen un robot que se puede probar en un probador. Cómo hacer esto, nuevamente, leeartículo separado .

A continuación, una vez descargado y procesado el seguimiento, dirígete a la sección de estadísticas avanzadas, a la pestaña “Diario”. Aquí se muestra el número de operaciones rentables y no rentables por día de la semana. Como puede ver, el jueves y viernes el mayor número relativo de operaciones perdedoras es del 73% y el 74%, respectivamente. Esto significa que las condiciones del mercado hoy en día no son las adecuadas para esta estrategia, las previsiones son menos precisas y el asesor está perdiendo dinero. Para mejorar la eficacia de la estrategia automática, es aconsejable eliminar estos días del trading.

Luego miramos las estadísticas por horas. Las flechas en la captura de pantalla indican las horas con la mayor cantidad de operaciones perdedoras. Además, durante el período nocturno (principalmente la sesión asiática) no sólo hay muchas menos transacciones que a mitad del día, sino que la calidad de las entradas también deja mucho que desear.

Esto significa que si bloqueamos el trabajo del asesor los jueves y viernes, dejándolo trabajar el resto de días de 11 a 19 horas, el resultado está garantizado para mejorar.

La configuración del asesor para los cambios en el ejemplo anterior se verá así:


Instalación y configuración

El asesor se instala de forma estándar. Abra el directorio de datos del terminal mediante Archivo - Abrir directorio de datos y vaya al directorio MQL4 - Expertos. Aquí copiamos el archivo EA previamente descargado con la extensión “.ex4”. Para que el asesor aparezca en la ventana del navegador, reinicie el terminal.

En la configuración debe especificar el tiempo de funcionamiento según los días de la semana. Hay tres parámetros de entrada para cada día. El primero es responsable de habilitar/deshabilitar la negociación en un día determinado, el segundo, de la hora de inicio de la negociación, el tercero, de la hora de finalización de la negociación. La hora se puede especificar al minuto más cercano. La hora de inicio puede ser mayor que la hora de finalización, por ejemplo, 19:00 y 9:00. En este caso se permitirá la negociación de 00:00 a 9:00 horas y de 19:00 a 24:00 horas.

El parámetro adicional CloseBeforeSwitchOFF es responsable de cerrar todas las posiciones inmediatamente antes de desactivar el comercio automático. En total, el parámetro puede tomar tres valores: No - las posiciones no están cerradas; CloseAllProfitable: solo se cierran los rentables; CloseAll: sale de todas las posiciones abiertas. El parámetro de deslizamiento es responsable del deslizamiento máximo.


No olvide habilitar el comercio automático y la importación de funciones desde archivos DLL.

La hora debe especificarse en función de la hora del terminal, que se muestra en el encabezado de la ventana de descripción general del mercado. Éste también es el momento de su corredor.

Además, no intente instalar varias instancias del asesor en una cuenta; solo una instancia es suficiente. De lo contrario, ninguno de ellos funcionará correctamente.

Conclusión

Limitar el tiempo de su trabajo es la forma más fácil y eficaz de mejorar su rendimiento comercial. Por ejemplo, si el asesor pierde constantemente de 4 a 8, entonces hay otro patrón en el mercado que el robot no puede procesar. Simplemente no operar durante este período, aumentará su rentabilidad general y liberará su depósito de transacciones innecesarias.

Hilo del foro

Saludos cordiales, Alexey Vergunov
ComercioLikeaPro.ru

Fuente http://tradelikeapro.ru/sovetnik-tradescheduler/