Cualquier pregunta de los recién llegados sobre MQL4 y MQL5, ayuda y discusión sobre algoritmos y códigos - página 1284

 
Igor Makanu:

utilicehttps://www.mql5.com/ru/docs/dateandtime/timecurrent

segunda versión de la llamada a la función

en general eshttps://www.mql5.com/ru/docs/dateandtime/timetostruct

Muchas gracias por la valiosa información.

Entiendo cuál es la estructura y cómo funciona, pero aún no he comprendido todos los detalles.

Todavía no he comprendido del todo las sutilezas asociadas a ella. Estoy aprendiendo el nuevo material mucho mejor con la ayuda de ejemplos claros.
Les agradecería mucho que me mostraran cómo escribir el código de la siguiente condición en mql5
He aprendido a abrir una orden utilizando la estructura


if(Hora()==10)

para abrir un pedido.

No es necesario escribir el patrón para abrir la orden.... sólo la escritura de la condición.

Gracias de nuevo por su ayuda.

 
Igor Makanu:

debe ser la forma de determinar el precio y la hora de la barra:

O más bien son las coordenadas del clic del ratón en los valores de tiempo + precio en el gráfico, la barra necesita ser definida a través de iBarShift()

Sí, eso es, como se entiende más adelante. Gracias)

 
ANDREY:

Muchas gracias por la valiosa información.

Entiendo cuál es la estructura y cómo funciona, pero aún no he comprendido los entresijos

Aprendo mejor el material nuevo con ejemplos. Estoy aprendiendo material nuevo mucho mejor con la ayuda de ejemplos claros.
Les agradecería mucho que me mostraran cómo escribir el código de la siguiente condición en mql5
He aprendido a abrir una orden utilizando la estructura


if(Hora()==10)

para abrir un pedido.

No es necesario escribir el patrón para abrir la orden.... Sólo un registro de la condición.

Gracias de nuevo por su ayuda.

MqlDateTime time_now;
TimeCurrent(time_now);
if(time_now.hour==10)
{
//открыть ордер
}
 
Igor Makanu:

Muchas gracias por su ayuda. Ahora todo es claro y comprensible.

 

Buenos días a todos!
Estoy tratando de mql4 a mql5. He creado un código simple que abre órdenes para probar. En el probador, el EA abre órdenes. He colocado la función Print() al principio de la función void OnTick() y mi Asesor Experto entraría en esta función en cada tick y la imprimiría en cada tick del diario. Y en el quinto tick el Asesor Experto no entra en ninguna de las funciones Print() y no imprime nada en el Diario de Registro de Vehículos. La visualización y la optimización están desactivadas en el Asesor Experto.
Por favor, indíquenos cómo cambiar el código para que Print() se imprima en el diario en cada tic, como en el 4.
Muchas gracias de antemano a los que me ayuden.

Este es mi código

input int      StopLoss=30;      // Stop Loss
input int      TakeProfit=100;   // Take Profit
input double   Lot=0.1;          // Количество лотов для торговли
int A;    //

//+------------------------------------------------------------------+
void OnTick()
  {
Print( "====================================================",  TimeCurrent() )   ;
//--- Объявляем структуры, которые будут использоваться для торговли
   MqlTick latest_price;       // Будет использоваться для текущих котировок
   MqlTradeRequest mrequest;   // Будет использоваться для отсылки торговых запросов
   MqlTradeResult mresult;     // Будет использоваться для получения результатов выполнения торговых запросов
 if(!SymbolInfoTick(_Symbol,latest_price))
   {
         mrequest.action = TRADE_ACTION_DEAL;                                  // немедленное исполнение
         mrequest.price = NormalizeDouble(latest_price.bid,_Digits);           // последняя цена Bid
         mrequest.sl = NormalizeDouble(latest_price.ask + StopLoss*_Point,_Digits); // Stop Loss
         mrequest.tp = NormalizeDouble(latest_price.ask - TakeProfit*_Point,_Digits); // Take Profit
         mrequest.symbol = _Symbol;                                            // символ
         mrequest.volume = Lot;                                                // количество лотов для торговли
         mrequest.type= ORDER_TYPE_SELL;                                       // ордер на продажу
         mrequest.type_filling = ORDER_FILLING_FOK;                            // тип исполнения ордера - все или ничего
         mrequest.deviation=100;                                               // проскальзывание от текущей цены
         //--- отсылаем ордер
     OrderSend(mrequest,mresult);
    }   
     return;
  }

He aumentado el depósito de EA hasta 100 000. Como resultado, en cada tick se imprime Print() en el diario.... Pero no se ha abierto ni una sola operación.

Pero necesito que se abran los tratos y se imprima Print().

Совершение сделок - Торговые операции - Справка по MetaTrader 5
Совершение сделок - Торговые операции - Справка по MetaTrader 5
  • www.metatrader5.com
Торговая деятельность в платформе связана с формированием и отсылкой рыночных и отложенных ордеров для исполнения брокером, а также с управлением текущими позициями путем их модификации или закрытия. Платформа позволяет удобно просматривать торговую историю на счете, настраивать оповещения о событиях на рынке и многое другое. Открытие позиций...
 
ANDREY:

Buenos días a todos!
Estoy tratando de mql4 a mql5. He creado un código simple que abre órdenes para probar. En el probador, mi EA abre órdenes. He colocado la función Print() al principio de la función void OnTick() y mi Asesor Experto entraría en esta función en cada tick y la imprimiría en cada tick del diario. Y en el quinto tick el Asesor Experto no entra en ninguna de las funciones Print() y no imprime nada en el Diario de Registro de Vehículos. La visualización y la optimización están desactivadas en el Asesor Experto.
Por favor, indíquenos cómo cambiar el código para que Print() se imprima en el diario en cada tick, como en el 4.
Muchas gracias de antemano a los que me ayuden.

Este es mi código

He aumentado el depósito de EA hasta 100 000. Como resultado, en cada tick se imprime Print() en el diario.... Pero no se ha abierto ni una sola operación.

Pero necesito que las operaciones se abran y se imprima Print().

Mira los registros, mira lo que se imprime, la información se introduce allí en cada paso. Lo más probable es que algo esté mal con la apertura de las órdenes y que el EA no funcione.

C:\Users\....\AppData\Roaming\MetaQuotes\Terminal\99193835FC75DE8874B99F9A3B93F15E\MQL5\Logs

 
Igor Makanu:

Ya hemos discutido si es necesario acceder repetidamente a los datos del terminal desde MQL4, entonces OrderSelecthttps://www.mql5.com/ru/forum/342989#comment_16743716

creo que también es posible utilizarlo 100500 veces por tick, porque la salida se incrementará millones de veces por segundo


cuantos más símbolos haya en la ventana de observación del mercado, mayor será la carga en el propio terminal, y respectivamente, si llama a los datos de un montón de símbolos diferentes, entonces también obtendrá retrasos

es decir, si se utiliza el terminal con sensatez, nada se congelará - en la ventana de vigilancia del mercado hay diez símbolos que se utilizan


No he comprobadocuántos gráficos puedes abrir al mismo tiempo, pero creo que si limitas el historial a 1000 barras, entonces creo que el terminal probablemente abrirá un par de docenas de ventanas de gráficos sin ningún problema

100

 
Valeriy Yastremskiy:

Mira los registros para ver lo que imprime, hay información registrada en cada paso. Lo más probable es que haya algún problema con la apertura de órdenes y que el EA no funcione.

C:\Users\....\AppData\Roaming\MetaQuotes\Terminal\99193835FC75DE8874B99F9A3B93F15E\MQL5\Logs

Gracias por el consejo.

Realmente no funciona. Dice.

2020.10.27 06:40:45.311 Tester EURUSD: los datos del historial comienzan a partir de 2018.01.02 00:00

2020.10.27 06:40:45.312 Core 1 conectándose a 127.0.0.1:3000

2020.10.27 06:40:45.312 Core 1 conectado

2020.10.27 06:40:45.320 Core 1 autorizado (agente build 2650)

2020.10.27 06:40:45.323 Tester EURUSD,M1 (Alpari-MT5-Demo): prueba de experts\GRAAL.ex5 desde 2020.09.01 00:00 hasta 2020.09.03 00:00

2020.10.27 06:40:45.327 Core 1 sincronización común completada

2020.10.27 06:40:45.328 Probador la calidad del historial analizado es del 100%.

2020.10.27 06:40:45.348 Core 1 test experts\GRAAL.ex5 on EURUSD,M1 thread finished

2020.10.27 06:40:45.348 Core 1

2020.10.27 06:40:45.348 Core 1 login (build 2650)

2020.10.27 06:40:45.348 Core 1 información de la cuenta encontrada con la moneda USD

2020.10.27 06:40:45.348 Core 1 1482 bytes de parámetros de comprobación cargados

2020.10.27 06:40:45.348 Core 1 1724 bytes de parámetros de entrada cargados

2020.10.27 06:40:45.348 Core 1 calcular el beneficio en pips, depósito inicial 10000, apalancamiento 1:100

2020.10.27 06:40:45.348 Core 1 inicializado con éxito

2020.10.27 06:40:45.348 Core 1 731 bytes de datos de inicialización totales recibidos

2020.10.27 06:40:45.348 Core 1 Intel Core i5-6400 @ 2.70GHz, 7883 MB

2020.10.27 06:40:45.348 Core 1 EURUSD: símbolo a sincronizar

2020.10.27 06:40:45.348 Core 1 EURUSD: símbolo sincronizado ya, 18 bytes recibidos

2020.10.27 06:40:45.348 Core 1 EURUSD,M1: historial almacenado en caché desde 2019.01.02 06:00

2020.10.27 06:40:45.348 Core 1 EURUSD,M1 (Alpari-MT5-Demo): cada tick genera

2020.10.27 06:40:45.348 Core 1 EURUSD,M1: prueba de experts\GRAAL.ex5 desde 2020.09.01 00:00 hasta 2020.09.03 00:00 iniciada con entradas:

2020.10.27 06:40:45.348 Core 1 StopLoss=30

2020.10.27 06:40:45.348 Core 1 TakeProfit=100

2020.10.27 06:40:45.348 Core 1 Lot=0.1

2020.10.27 06:40:45.348 Core 1 saldo final 10000.00 pips

2020.10.27 06:40:45.348 Core 1 EURUSD,M1: 111967 ticks, 2880 barras generadas. Prueba superada en 0:00:00.019.

2020.10.27 06:40:45.348 Núcleo 1 270 Mb de memoria utilizada incluyendo 35 Mb de datos históricos, 64 Mb de datos de tick

2020.10.27 06:40:45.348 Core 1 archivo de registro "C:\sers\a1960\AppData\Roaming\MetaQuotes\Tester36A64B8C79A6163D85E6173B54096685\Agent-127.0.0.1-3000\logs\201027.log" escrito

2020.10.27 06:40:45.371 Core 1 conexión cerrada

Lo estoy probando durante un periodo de un día. Significa que el Asesor Experto debe abrir 1440 órdenes. Puede que sea un problema. Tal vez, hay algunas limitaciones en el número de órdenes abiertas al mismo tiempo.
Si lo he comprobado, puede ser porque cuando tenía 10 000 en el depósito de mi EA, sólo abría 300 órdenes y se perdía el resto por alguna razón relacionada con el dinero (según entendí en los asientos). Más tarde, aumenté el depósito de EA a 100 000 y ya no tenía derecho a saltar. Y dejó de abrir pedidos por completo.

Pero luego volví a disminuir el depósito del EA a 10 000. Sin embargo, mi Asesor Experto sigue sin abrir nada y siempre escribe los valores que he indicado anteriormente.

He creado otro EA. He descargado el mismo código en él. Tengo un depósito de 10 000. Tengo el mismo problema: no he abierto pedidos.
Por favor, aconseja cómo hacer que mi EA funcione correctamente. Envía el mismo mensaje, sólo que mi línea amarilla resaltada tiene 271 en lugar de 270 mb
Tengo Windows 10. Tengo un sistema operativo de 64 bits y 8 GB de RAM.
Gracias.

 
ANDREY:

Gracias por el consejo.

Realmente no funciona. Dice.


2020.10.27 06:40:45.348 Core 1 EURUSD,M1: 111967 ticks, 2880 barras generadas. Prueba superada a las 0:00:00.019.

2020.10.27 06:40:45.348 Núcleo 1 270 Mb de memoria utilizada incluyendo 35 Mb de datos históricos, 64 Mb de datos de tick

2020.10.27 06:40:45.348 Core 1 archivo de registro "C:\sers\a1960\AppData\Roaming\MetaQuotes\Tester36A64B8C79A6163D85E6173B54096685\Agent-127.0.0.1-3000\logs\201027.log" escrito

2020.10.27 06:40:45.371 Core 1 conexión cerrada

Lo estoy probando durante un periodo de un día. Significa que el Asesor Experto debe abrir 1440 órdenes. Puede que sea un problema. Tal vez, hay algunas limitaciones en el número de órdenes abiertas simultáneamente.
Si lo he comprobado, puede ser porque cuando tenía 10 000 en el depósito de mi EA, sólo abría 300 órdenes y se perdía el resto por alguna razón relacionada con el dinero (según entendí en los asientos). Más tarde, aumenté el depósito de EA a 100 000 y ya no tenía derecho a saltar. Y dejó de abrir pedidos por completo.

Pero entonces volví a reducir el depósito del EA a 10.000. El Asesor Experto sigue sin abrir nada y siempre escribe lo que señalé en la parte superior.
Por favor, aconseja cómo hacer que mi EA funcione normalmente.
Siempre intentaré que funcione como antes.

Si hay 1440 órdenes por día, el Asesor Experto debe comprobar el comienzo del minuto o, más fácilmente, la aparición de la barra de un minuto. Y se abre en este momento. No lo tiene y por lo tanto el EA abre una posición en cada tick, lo cual es una condición dura en sí misma según nuestro símbolo en la cotización actual. Esta condición puede no cumplirse, y las garrapatas se perderán. Y en algún momento, se producirá un error crítico.

También el tipo de ejecución de la orden (orden de realizar una operación para crear una posición) Todo o nada.

input int      StopLoss=30;      // Stop Loss
input int      TakeProfit=100;   // Take Profit
input double   Lot=0.1;          // Количество лотов для торговли
int A;    //

//+------------------------------------------------------------------+
void OnTick()
  {
Print( "====================================================",  TimeCurrent() )   ;
//--- Объявляем структуры, которые будут использоваться для торговли
   MqlTick latest_price;       // Будет использоваться для текущих котировок
   MqlTradeRequest mrequest;   // Будет использоваться для отсылки торговых запросов
   MqlTradeResult mresult;     // Будет использоваться для получения результатов выполнения торговых запросов
 if(!SymbolInfoTick(_Symbol,latest_price))
   {
         mrequest.action = TRADE_ACTION_DEAL;                                  // немедленное исполнение
         mrequest.price = NormalizeDouble(latest_price.bid,_Digits);           // последняя цена Bid
         mrequest.sl = NormalizeDouble(latest_price.ask + StopLoss*_Point,_Digits); // Stop Loss
         mrequest.tp = NormalizeDouble(latest_price.ask - TakeProfit*_Point,_Digits); // Take Profit
         mrequest.symbol = _Symbol;                                            // символ
         mrequest.volume = Lot;                                                // количество лотов для торговли
         mrequest.type= ORDER_TYPE_SELL;                                       // ордер на продажу
         mrequest.type_filling = ORDER_FILLING_FOK;                            // тип исполнения ордера - все или ничего
         mrequest.deviation=100;                                               // проскальзывание от текущей цены
         //--- отсылаем ордер
     OrderSend(mrequest,mresult); // получите (запросите) результаты исполнения / сделки и распечатайте, будет понятней
    }   
     return;
  }
 
int M = TimeMinute(TimeCurrent());
int TimeServer()                                                  
{  
   Print(M, " - Tекущее время сервера");
}

Por favor, aconséjeme.

¿Por qué no se actualiza la hora del servidor cuando llegan nuevos ticks?

En el momento en que el EA se inicia, todo funciona como debería, pero luego el tiempo pasa, pero el nuevo valor del minuto actual no entra en la variable.

Es decir, el Asesor Experto trabaja en función del número obtenido en la variable int M = TimeMinute(TimeCurrent());

En realidad esta línea de código es de la referencia y no funciona.

Por ejemplo, lo pongo en marcha a las 12-la horaactual devuelta por el servidor corresponde a la hora de la variable, pero entonces la variable permanece en las 12, aunque ya son 15-20 minutos en el reloj

Документация по MQL5: Дата и время / TimeCurrent
Документация по MQL5: Дата и время / TimeCurrent
  • www.mql5.com
Возвращает последнее известное время сервера, время прихода последней котировки по одному из выбранных в "Обзоре рынка" символов. В обработчике OnTick() данная функция вернет время пришедшего обрабатываемого тика. В других случаях (например, вызов в обработчиках OnInit(), OnDeinit(), OnTimer() и так далее) это –...
Razón de la queja: