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

 
geratdc:

Hola,


Buscando la siguiente información:

1. En cuanto a la implementación de notificaciones por SMS cuando se procesan eventos clave en el trabajo del Asesor Experto.

Sobre la realización de la apertura y el cierre del comercio de 12-00 PST hasta 18-00 PST (con sms-notificación, por supuesto :) sobre el comienzo y el final de una sesión de negociación semanal).

Sobre la implementación de una notificación por correo electrónico después de la finalización de la negociación (18-00 PTN) - el envío de informe sobre el trabajo del asesor para una sesión de negociación semanal, en el probador, con un gráfico y la indicación de las fechas de apertura, las fechas de cierre, los precios, las ganancias / pérdidas después de cerrar las posiciones. ¿O los informes estarán en formato txt?


Por favor, indíquenos qué funciones o scripts lo implementarán. ¿Cómo puedo hacerlo? Tal vez haya un tema al respecto: notificaciones e informes por SMS y correo electrónico.

https://www.mql5.com/ru/articles/1454

Aquí hay algo como esto, pero para hacerlo más simple)))


https://www.mql5.com/ru/forum/53920

El algoritmo de las notificaciones sms no es malo, nuestro EA nos envía el correo electrónico, y el operador de correo electrónico nos envía el texto de la carta. Todo brillantemente simple. Lo único que necesitamos es registrar nuestro teléfono móvil. Ahora es más fácil.

Voy a leer, he encontrado una función similar - SendMail().Me pregunto qué tan complicado es?

Hace tanto tiempo que tiene todo un estándar. Utiliza mensajes push en lugar de sms, SendMail() ya lo ha encontrado.
 

¡Buenas tardes a todos!

Hecho este código - borrar todos los pedidos a la vez.

//===================================================================
void delete_all_orders()
{
bool err;
int ot;
for(int iss=OrdersTotal()-1; iss>=0; iss--)
   {
    if(OrderSelect(iss, SELECT_BY_POS, MODE_TRADES))
      {
       if(OrderSymbol()==Symbol())
         {
          if(OrderType()==OP_BUYSTOP || OrderType()==OP_SELLSTOP)
           {
            ot=OrderTicket();
            Print("Удаляем ордер тикет - ",OrderTicket());
            err=OrderDelete(OrderTicket(),clrNONE);
            if(err==false) error(GetLastError());
            Print("Удален ордер тикет - ",ot);
           }
          if(OrderType()==OP_BUY)
           {
            ot=OrderTicket();
            Print("Удаляем ордер тикет - ",OrderTicket());
            err=OrderClose(OrderTicket(),OrderLots(),Bid,10,clrNONE);
            if(err==false) error(GetLastError());
            Print("Удален ордер тикет - ",ot);
           }
          if(OrderType()==OP_SELL)
           {
            ot=OrderTicket();
            Print("Удаляем ордер тикет - ",OrderTicket());
            err=OrderClose(OrderTicket(),OrderLots(),Ask,10,clrNONE);
            if(err==false) error(GetLastError());
            Print("Удален ордер тикет - ",ot);
           }
         }
      }
   }
return;
}

El problema es que casi todos los pedidos están cerrados. Pero todavía tenemos 1-2 pedidos que no se borran.

Y no importa cuántas veces acceda a esta función, esta función no cierra las órdenes restantes.

Me da un error mostrando un precio incorrecto.

Pensaba que se trataba de requotes pero si ya solicitamos esta función 500000 veces, ¿qué requotes pueden ser?

¿Qué no puede ser el precio equivocado?

Nunca he tenido una tontería semejante con otros EAs.

 
Valerius:

¡Buenas tardes a todos!

Hecho este código - borrar todos los pedidos a la vez.

El problema es que casi todos los pedidos están cerrados. Pero todavía tenemos 1-2 pedidos que no se borran.

Y no importa cuántas veces acceda a esta función, esta función no cierra las órdenes restantes.

Me da un error mostrando un precio incorrecto.

Pensaba que se trataba de requotes pero si ya solicitamos esta función 500000 veces, ¿qué requotes pueden ser?

¿Qué no puede ser el precio equivocado?

Nunca he tenido una tontería semejante con otros EAs.

Si hay muchos pedidos, el precio tiene tiempo de quedar desfasado. Añade RefreshRates() y debería estar bien.
RefreshRates - Доступ к таймсериям и индикаторам - Справочник MQL4
RefreshRates - Доступ к таймсериям и индикаторам - Справочник MQL4
  • docs.mql4.com
RefreshRates - Доступ к таймсериям и индикаторам - Справочник MQL4
 
Alexey Viktorov:
Si hay muchos pedidos, el precio tiene tiempo de quedar desfasado. Añade RefreshRates() y debería estar bien.

Esa es la cuestión: quedan uno o dos pedidos.

He realizado un ciclo de llamadas a esta función hasta que se borran todos los pedidos.

En idea, si la orden es de compra, debe ser cerrada por Bid, y no importa el precio que tenga ahora.

Debería cerrar por Oferta a cualquier precio.

Y si hemos abordado esta función muchos miles de veces, el precio debería cerrarse de todos modos.

¿O tal vez no entiendo algo?

 
Valerius:

Esa es la cuestión: quedan uno o dos pedidos.

He realizado un ciclo de llamadas a esta función hasta que se borran todos los pedidos.

En teoría, si la orden es de compra, debería estar cerrada por Bid y no importa el precio que tenga ahora.

Debería cerrar por Oferta a cualquier precio.

Y si hemos abordado esta función muchos miles de veces, el precio debería cerrarse de todos modos.

¿O hay algo que no entiendo?

¿Hay errores en el registro al borrar?

El precio puede llegar a ser lo suficientemente alto durante el ciclo. Ask y Bid son constantes que se actualizan de forma forzada (al llamar a RefreshRates()) o al procesar un nuevo tick. Así que, después de cada vuelta de bucle, llame a RefreshRates() y vea lo que sucede.

 
Gracias, lo probaré.
 
Valerius:
Esa es la cuestión, quedan uno o dos pedidos.
He hecho un bucle de llamadas a esta función hasta que se borran todos los pedidos.
En teoría, si la orden es de compra, debe ser cerrada por Bid y no importa el precio que tenga en ese momento.
Debería cerrar por Oferta a cualquier precio.
Y si hemos abordado esta función muchos miles de veces, el precio debería cerrarse de todos modos.
¿O tal vez no entiendo algo?

Pruebe 1) reemplazar Imprimir con Alerta para ver el resultado en la pantalla inmediatamente - es más rápido 2) Usted obtiene el código de error allí. Imprimirlo y ver 3) Obtener e imprimir el código de error de la función OrderSelect e inmediatamente OrderSymbol(), OpderType(), OrderTicket()

if (! OrderSelect(.......))
{
  Alert(GetLastError());
  continue;
}
Alert("OrderSymbol = ",OrderSymbol(), "   OpderType = ", OpderType(), "   OrderTicket = ", OrderTicket());
 
STARIJ:

Pruebe 1) reemplazar Imprimir con Alerta para ver el resultado en la pantalla inmediatamente - es más rápido 2) Usted obtiene el código de error allí. Imprímalo y vea 3) Obtenga e imprima el código de error de la función OrderSelect e inmediatamente OrderSymbol(), OpderType(), OrderTicket().


También he probado RefreshRates(). Nada ha cambiado. Alerta - igual que la impresión, da - parámetros erróneos.

Error 3.

Me levanté por la mañana y vi que el EA se había disparado y mostraba la función de borrar todas las órdenes de toda la noche.

El contador de peticiones muestra varios millones de peticiones. Esto significa que los pedidos no se eliminan.

Este EA también comprueba si todos los pedidos son eliminados, es como un seguro. Si hay pedidos, llamaremos al

Se pide la función de supresión. El programa se atasca. Esto significa que el bucle no se detendrá hasta que se eliminen todos los pedidos.

Estos problemas se producen en 2 pares de divisas. Ya he perdido la cabeza. ¿Qué hacer?

 
Valerius:


He probado RefreshRates(). Nada ha cambiado. Alerta - igual que la impresión, dice - parámetros incorrectos.

Error 3.

Me desperté esta mañana y vi que el EA se había disparado y mostraba una llamada a borrar todas las órdenes de toda la noche.

El contador de peticiones mostraba varios millones de solicitudes. Esto significa que los pedidos no se eliminan.

Este EA también comprueba si todos los pedidos son eliminados, es como un seguro. Si hay pedidos, llamaremos al

Se pide la función de supresión. El programa se atasca. Esto significa que el bucle no se detendrá hasta que se eliminen todos los pedidos.

Estos problemas se producen en 2 pares de divisas. Ya he perdido la cabeza. ¿Qué hacer?

¿Y qué es la función error()?

            if(err==false) error(GetLastError());
            Print("Удален ордер тикет - ",ot);

Puede ser el problema.

 
Alexey Viktorov:

¿Y qué es la función error()?

Es posible que este sea el problema.


La función error() sólo muestra un código de error. No hay ningún problema con esta función, la tengo en muchos EAs y nunca la cambio.

Así que definitivamente no es el caso.

La función en sí está aquí:

//====================================================================
int error(int errr)
{
string descr;
switch(errr)
  {
  // Коды ошибок, возвращаемые торговым сервером или клиентским терминалом:
  case 0:    descr= ""; return(0);
  case 1:    descr= "Нет ошибки, но результат не известен"; break;
  case 2:    descr= "Общая ошибка"; break;
  case 3:    descr= "Неправильные параметры"; break;
  case 4:    descr= "Торговый сервер занят"; break;
  case 5:    descr= "Старая версия клиентского терминала"; break;
  case 6:    descr= "Нет связи с торговым сервером"; break;
  case 7:    descr= "Недостаточно прав"; break;
  case 8:    descr= "Слишком частые запросы"; break;
  case 9:    descr= "Недопустимая операция нарушающая функционирование сервера"; break;
  case 64:   descr= "Счет заблокирован"; break;
  case 65:   descr= "Неправильный номер счета"; break;
  case 128:  descr= "Истек срок ожидания совершения сделки"; break;
  case 129:  descr= "Неправильная цена"; break;
  case 130:  descr= "Неправильные стопы"; break;
  case 131:  descr= "Неправильный объем"; break;
  case 132:  descr= "Рынок закрыт"; break;
  case 133:  descr= "Торговля запрещена"; break;
  case 134:  descr= "Недостаточно денег для совершения операции"; break;
  case 135:  descr= "Цена изменилась"; break;
  case 136:  descr= "Нет цен"; break;
  case 137:  descr= "Брокер занят"; break;
  case 138:  descr= "Новые цены"; break;
  case 139:  descr= "Ордер заблокирован и уже обрабатывается"; break;
  case 140:  descr= "Разрешена только покупка"; break;
  case 141:  descr= "Слишком много запросов"; break;
  case 145:  descr= "Модификация запрещена, так как ордер слишком близок к рынку"; break;
  case 146:  descr= "Подсистема торговли занята"; break;
  case 147:  descr= "Использование даты истечения ордера запрещено брокером"; break;
  case 148:  descr= "Количество открытых и отложенных ордеров достигло предела, установленного брокером"; break;
  case 149:  descr= "Попытка открыть противоположную позицию к уже существующей, если хеджирование запрещено"; break;
  case 150:  descr= "Попытка закрыть позицию по инструменту в противоречии с правилом FIFO"; break;
  case 4000: /*descr= "Нет ошибки";*/ return(0);
  case 4001: descr= "Неправильный указатель функции"; break;
  case 4002: descr= "Индекс массива - вне диапазона"; break;
  case 4003: descr= "Нет памяти для стека функций"; break;
  case 4004: descr= "Переполнение стека после рекурсивного вызова"; break;
  case 4005: descr= "На стеке нет памяти для передачи параметров"; break;
  case 4006: descr= "Нет памяти для строкового параметра"; break;
  case 4007: descr= "Нет памяти для временной строки"; break;
  case 4008: descr= "Неинициализированная строка"; break;
  case 4009: descr= "Неинициализированная строка в массиве"; break;
  case 4010: descr= "Нет памяти для строкового массива"; break;
  case 4011: descr= "Слишком длинная строка"; break;
  case 4012: descr= "Остаток от деления на ноль"; break;
  case 4013: descr= "Деление на ноль"; break;
  case 4014: descr= "Неизвестная команда"; break;
  case 4015: descr= "Неправильный переход"; break;
  case 4016: descr= "Неинициализированный массив"; break;
  case 4017: descr= "Вызовы DLL не разрешены"; break;
  case 4018: descr= "Невозможно загрузить библиотеку"; break;
  case 4019: descr= "Невозможно вызвать функцию"; break;
  case 4020: descr= "Вызовы внешних библиотечных функций не разрешены"; break;
  case 4021: descr= "Недостаточно памяти для строки, возвращаемой из функции"; break;
  case 4022: descr= "Система занята"; break;
  case 4050: descr= "Неправильное количество параметров функции"; break;
  case 4051: descr= "Недопустимое значение параметра функции"; break;
  case 4052: descr= "Внутренняя ошибка строковой функции"; break;
  case 4053: descr= "Ошибка массива"; break;
  case 4054: descr= "Неправильное использование массива-таймсерии"; break;
  case 4055: descr= "Ошибка пользовательского индикатора"; break;
  case 4056: descr= "Массивы несовместимы"; break;
  case 4057: descr= "Ошибка обработки глобальныех переменных"; break;
  case 4058: descr= "Глобальная переменная не обнаружена"; break;
  case 4059: descr= "Функция не разрешена в тестовом режиме"; break;
  case 4060: descr= "Функция не подтверждена"; break;
  case 4061: descr= "Ошибка отправки почты"; break;
  case 4062: descr= "Ожидается параметр типа string"; break;
  case 4063: descr= "Ожидается параметр типа integer"; break;
  case 4064: descr= "Ожидается параметр типа double"; break;
  case 4065: descr= "В качестве параметра ожидается массив"; break;
  case 4066: descr= "Запрошенные исторические данные в состоянии обновления"; break;
  case 4099: descr= "Конец файла"; break;
  case 4100: descr= "Ошибка при работе с файлом"; break;
  case 4101: descr= "Неправильное имя файла"; break;
  case 4102: descr= "Слишком много открытых файлов"; break;
  case 4103: descr= "Невозможно открыть файл"; break;
  case 4104: descr= "Несовместимый режим доступа к файлу"; break;
  case 4105: descr= "Ни один ордер не выбран"; break;
  case 4106: descr= "Неизвестный символ"; break;
  case 4107: descr= "Неправильный параметр цены для торговой функции"; break;
  case 4108: descr= "Неверный номер тикета"; break;
  case 4109: descr= "Торговля не разрешена"; break;
  case 4110: descr= "Длинные позиции не разрешены"; break;
  case 4111: descr= "Короткие позиции не разрешены"; break;
  case 4200: descr= "Объект уже существует"; break;
  case 4201: descr= "Запрошено неизвестное свойство объекта"; break;
  case 4202: descr= "Объект не существует"; break;
  case 4203: descr= "Неизвестный тип объекта"; break;
  case 4204: descr= "Нет имени объекта"; break;
  case 4205: descr= "Ошибка координат объекта"; break;
  case 4206: descr= "Не найдено указанное подокно"; break;
  case 4207: descr= "Ошибка при работе с объектом"; break;
  }
Comment("Ошибка!  ",descr); 
Print("Ошибка!  ",descr);
return(errr);
}     
Razón de la queja: