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

 

Foro sobre trading, sistemas de trading automatizados y comprobación de estrategias

Cualquier pregunta de los novatos sobre MQL4 y MQL5, consejos y discusión sobre algoritmos y códigos

Dmitry Custurov, 2020.08.27 13:10

Saludos.

Tengo lo siguiente en MT4:

#import "user32.dll"
   int SendMessageA(int hWnd, int Msg, int wParam, char &lParam[]);
   int RegisterWindowMessageA(uchar &lParam[]);
#import

string IndiName="TestBot";

void OnStart()
  {
   char buf[];
   StringToCharArray("MetaTrader4_Internal_Message", buf);
   int MT4InternalMsg=RegisterWindowMessageA(buf);
   StringToCharArray(IndiName, buf);
   long handle=ChartGetInteger(0, CHART_WINDOW_HANDLE);
   Print(MT4InternalMsg);
   bool res=SendMessageA((int)handle, MT4InternalMsg, 14, buf);
   Print("Функция SendMessageA завершила работу с результатом: ",res);
  }

Este código envía un comando a la ventana del terminal para iniciar un EA específico.

¿Existe una funcionalidad similar para MT5?

Lo intenté así:

#import "user32.dll"
   int SendMessageA(long hWnd, long Msg, uint wParam, uchar &lParam[]);
   int RegisterWindowMessageA(uchar &lParam[]);
#import

string IndiName="TestBot";

void OnStart()
  {
   uchar buf[];
   StringToCharArray("MetaTrader5_Internal_Message", buf);
   long MT5InternalMsg=RegisterWindowMessageA(buf);
   StringToCharArray(IndiName, buf);
   long handle=ChartGetInteger(0, CHART_WINDOW_HANDLE);
   Print("Window handle: ", handle);
   Print("Message: ",MT5InternalMsg);
   for(int i = 0; i<100; i++){
      bool res=SendMessageA(handle, MT5InternalMsg, i , buf);
      printf("Функция SendMessageA завершила работу с результатом: %d, номер: %d ",res, i);
   }
  }

No funciona.

Intenté buscar el spy++, pero no hay mensajes en MT5 a diferencia de MT4.

Necesito exactamente abrir la ventana de configuración del Asesor Experto.


Necesito poder ejecutar el script a través de WinAPI. ¿Hay alguna solución para el 5?

 
¡Eh! ¡Chicos, ayudadme! No se me ocurre ninguna función. El Asesor Experto abre una posición por día (entre las 00:00 y las 23:59), es decir, un día, una orden. La tarea es encontrar la serie de pérdidas continuas y mostrarla en el registro (utilizando el comando Print(), para imprimir una vez). El número de elementos de la serie se introduce desde el teclado (Por ejemplo, si se introduce 5 desde el teclado, y la serie de 4 días perdidos, lo ignoramos --> esperamos a que se produzcan 5 o más días). Se considera una serie si los días de pérdida son consecutivos o las órdenes se cierran el mismo día (se abren una vez al día, y las órdenes de mercado pueden "colgarse" durante más de un día). Por ejemplo, en el registro debería aparecer la siguiente información: "Las series perdedoras en las siguientes fechas: 01.05, 02.05, 03.05, 04.05, 05.05". Condición importante: reconocer las series (y en consecuencia emitirlas al registro), que sean mayores o iguales al valor introducido desde el teclado (externo).
//
Personalmente tengo la siguiente idea:
1. Fiya rellena el array de órdenes perdedoras con sus valores de cierre ( Mass[i] = OrderCloseTime();). Es decir, el array almacena sólo las fechas y horas de cierre de las órdenes perdedoras
2. Comenzamos comparando el elemento en la posición i y en la posición i-1 (2 adyacentes)
2.1 los comparamos convirtiendo los datos de la celda al día del año ( TimeDayOfYear(Mass[i]) y TimeDayOfYear(Mass[i-1])
2.(Supongamos que el primer día perdedor = 178, y el anterior = 176 --> no hay serie, porque no son consecutivos, respectivamente si el primero = 178, y el segundo 177 --> tenemos una serie)
2.3 Con el bucle for recorremos todas las celdas del array y comparamos sus vecinos. Si hay una serie de pérdidas enelementosvecinosde la matriz--> empezamos a comprimir hasta que 1.no hayamos alcanzado elnúmeromínimo requerido de días perdedores para considerarlo como una serie. 2. (si se cumple el punto 1) ANTES de que la serie se detenga.
2.4 EL PARO DE LA SERIE --> recuerda el índice del elemento del array donde terminó y recuerda el número de elementos de la serie (la serie puede ser == O mayor que el valor introducido desde el teclado)
3. ----aquí comienza el problema de la realización---
3.1 Deberíamos "retroceder" de alguna manera a través de la serie de días perdidos, conociendo la fecha de cada elemento, traducir la fecha de datetime --> cadena,
3.11 rellenar la cadena (no sé, ¿tal vez a través de StringAdd()?), y enviarla al archivo LOG (no un millón de veces, sólo una)

El algoritmo del Asesor Experto no es importante, lo importante es la función del usuario en sí

¡Por Dios, ayuda!)
Документация по MQL5: Основы языка / Переменные
Документация по MQL5: Основы языка / Переменные
  • www.mql5.com
Переменные должны быть объявлены перед их использованием. Для идентификации переменных используются уникальные имена. Описания переменных используются для их определения и объявления типов. Описание не является оператором. Индексом массива может быть только целое число. Допускаются не более чем четырехмерные массивы. Нумерация элементов массива...
Archivos adjuntos:
 

Hola.
Se necesita asesoramiento sobre un algoritmo.
Estoy tratando de formar el siguiente requisito antes de procesar el bloque de apertura de la orden:

Si ya hay órdenes de compra/venta y el precio de apertura de la última orden es menor en X puntos que el precio actual, entonces ignora las órdenes de bloqueo/no apertura.

Por favor, aconséjeme: ¿cuáles son las opciones de implementación en el código?

 

¿Alguien ha medido para mt 5 desde que se envía una orden para abrir una posición hasta que realmente aparece, cuánto puede tardar?

Estoy más interesado en que si se envía una orden y se avisa de una operación, desde que se envía la orden hasta que aparecen las operaciones, ¿cuánto tiempo puede pasar?

 
Сергей Таболин:

k = {1,2,4,8,16,......}

cn = k[c]

Solución divertida))))

 
Vladimir Baskakov:
¿Piensa MQ añadir indicadores personalizados a la plataforma móvil?

A juzgar por las respuestas del nuevo terminal móvil, no en un futuro próximo. Sólo bolígrafos.

 
Valeriy Yastremskiy:

Solución divertida))))

Pues bien, si los coeficientes se conocen de antemano, ¿para qué calcularlos? )))

 
Сергей Таболин:

Pues bien, si los coeficientes se conocen de antemano, ¿para qué calcularlos? )))

Es más universal si los calculas.

 

Colegas, buenos días a todos - intuitivamente comprendo la solución, me gustaría saber su opinión.

Cuál es la mejor manera, de asignar partes del lote para su posterior cierre (cierre parcial del lote Total - en partes - 5 unidades de partes).

A mi entender, por ejemplo, el lote 2,58. Divido por 5, el resultado es 0,51 lote para cerrar 4 partes y la quinta parte es 0,54 lote.

¿Cuál es la mejor manera de representar esto en el código? ¿Qué función matemática toma el resto de la división para cerrar 0,54?

 
Roman Shiredchenko:

Colegas, buenos días a todos - intuitivamente comprendo la solución, me gustaría saber su opinión.

Cuál es la mejor manera, de asignar partes del lote para su posterior cierre (cierre parcial del lote Total - en partes - 5 partes unitarias).

A mi entender, por ejemplo, el lote 2,58. Divido por 5, el resultado es 0,51 lote para cerrar 4 partes y la quinta parte es 0,54 lote.

¿Cuál es la mejor manera de representar esto en el código? ¿Qué función lleva el resto de la división a tomar 0,54 para cerrar?

¿Puedo leer la documentación?


Razón de la queja: