Librerías: Expert - página 8

 
Stanislav Korotky:

Sigo sin entender por qué es más "práctico" (¿práctico?) el nombre constante Experto.mqh.tpl que las plantillas con el nombre del programa que las genera. Digamos que hay un programa A.mq5 y B.mq5 que utilizan bibla. Si generaran plantillas con sus propios nombres sería más práctico, en primer lugar, tener la última "huella" de acciones de _cada_ programa, en lugar de sobrescribir una por la otra. En segundo lugar, se podría saber inmediatamente quién es el generador por su nombre (especialmente útil si los programas son extranjeros). Ahora no puedes saberlo por el archivo Expert.mqh.tpl hasta que entras dentro. La solución universal que he dado es tomar el nombre del programa MQL+timestamp+random. Y no veo la necesidad de dejar el archivo en sync=true. Creo que ya está todo probado y depurado hace tiempo. En caso de errores y necesidad de depuración, existe la opción sync=false. Entonces el archivo debe ser dejado. Creo que todo es lógico. Y las ediciones son simples.

Estoy de acuerdo en que en la práctica la colisión puede ocurrir raramente, a menos que alguien utilice la biblio en paralelo en varios programas. No lo tengo, pero acabo de echar un vistazo rápido en el código, y me llamó la atención Expert.mqh.tpl en la carpeta Files. Todo es puramente imho.

Yo no quería borrar archivos, así que pensé que un nombre común era suficiente, teniendo en cuenta la fiabilidad de trabajo en la práctica.

Yo no quería ver un zoológico de tpl-archivos en la carpeta Archivos. Para eliminar algo a propósito - de manera similar. He eliminado sólo aquí.

Возможность вызова DLL в Маркет-продуктах.
Возможность вызова DLL в Маркет-продуктах.
  • 2019.07.20
  • www.mql5.com
Возможно написание EX5 с вызовом DLL, который пройдет все проверки Маркета и будет там опубликован.В прицепе такой EX5-скрипт. Он запускает указанные приложения/документы.В прицепе еще один вариант
 
Vitaly Muzichenko:

¿Cómo es posible ejecutar un Asesor Experto en formato .ex4 conectándolo en un Asesor Experto con un nombre diferente, y es necesario mostrar los parámetros de entrada, es decir, para poder trabajar plenamente con él.

Tenemos un Asesor Experto compilado con el nombre "Trade.ex4".

Cree un nuevo Asesor Experto con el nombre "Hand.ex4".

Cómo combinarlos para que cuando se lance "Hand.ex4", "Trade.ex4" funcione completamente y "Trade.ex4" esté incrustado en "Hand.ex4".

Es decir, sólo tenemos el archivo Hand.ex4 en la máquina, pero usamos Trade.ex4 en el trabajo

Gracias.

¿Ha encontrado una solución?

 
Vitaly Muzichenko:

Cómo combinarlo para que cuando se inicie "Hand.ex4", "Trade.ex4" sea totalmente funcional, y "Trade.ex4" esté incrustado en "Hand.ex4".

Es decir, sólo tenemos el archivo Hand.ex4 en la máquina, pero usamos Trade.ex4 en el trabajo

Debería funcionar con indicadores. Parece que los Asesores Expertos no se cosen a otros Asesores Expertos.

 
fxsaber:

Debería funcionar con indicadores. Parece que los Asesores Expertos no se cosen a otros Asesores Expertos.

Sí, el Asesor Experto no se pudo incrustar, no se encontró ninguna solución

 
Gracias, chicos.
 
Vitaly Muzichenko:

Sí, no se pudo coser el consejero, no se encontró solución

Es muy probable que haya una solución, y parece que la utilicé aquí una vez en una de las variantes. Pero he olvidado completamente cómo lo hice.

Возможность вызова DLL в Маркет-продуктах.
Возможность вызова DLL в Маркет-продуктах.
  • 2019.07.20
  • www.mql5.com
Возможно написание EX5 с вызовом DLL, который пройдет все проверки Маркета и будет там опубликован.В прицепе такой EX5-скрипт. Он запускает указанные приложения/документы.В прицепе еще один вариант
 
fxsaber:

Probablemente haya una solución, y me parece haberla utilizado aquí una vez en una de las variantes. Pero he olvidado distraídamente cómo lo hice.

Aquí estoy cuando lo intenté, no encontré ninguna manera. Era para el 4, no lo he probado en el 5.

 

Foro sobre negociación, sistemas automatizados de negociación y ensayo de estrategias de negociación

Peculiaridades del lenguaje mql5, sutilezas y técnicas de trabajo

fxsaber, 2020.05.21 09:13

#include <fxsaber\Expert.mqh> // https://www.mql5.com/es/code/19003

// Se descarga si no hay ningún símbolo después del cambio de cuenta.
void OnDeinit( const int Reason )
{
  if (Reason == REASON_ACCOUNT)
  {
    MqlTick Tick;
    
    if (!SymbolInfoInteger(_Symbol, SYMBOL_CUSTOM) && !SymbolInfoTick(_Symbol, Tick))
    {
      Alert("Account is changed!");
      
      if (EXPERT::Remove())
        Alert("Expert is removed!");
      
      // ExpertRemove(); // No servirá de nada.
      // ChartClose(); // No es la mejor solución.
    }
// si no
      // Para casos personalizados y otros, aumente el código con la siguiente solución.
      // https://www.mql5.com/ru/forum/170952/page175#comment_16365819 
  }  
}
 
fxsaber:
Genial la librería, no se me habría ocurrido implementar la apertura del Expert Advisor de esta manera. Me podrías decir como definir un gráfico activo usando mql sin usar dll. He hecho algún trabajo con winapi, pero resultó ser demasiado engorroso:
long                          Agent::ChartGetActiveID()
  {
   static long                terminal_wnd = ChartGetInteger(0,CHART_IS_DOCKED) ?
                              GetAncestor(ChartGetInteger(0, CHART_WINDOW_HANDLE), 2) :
                              GetParent(GetAncestor(ChartGetInteger(0, CHART_WINDOW_HANDLE), 2));

   static uint                process_id = 0;
   static uint                thread_id = GetWindowThreadProcessId(terminal_wnd, process_id);
   static long                mdi_wnd = GetDlgItem(terminal_wnd, 0xE900);
   static GUITHREADINFO       thread_info;


   thread_info.cbSize = sizeof(GUITHREADINFO);
   if(!GetGUIThreadInfo(thread_id, thread_info))
      return -1;

   long wnd_on_focus = 0, chart_id = -1;
   if(GetDlgItem(thread_info.hwndActive, 0xE900)== mdi_wnd)
      wnd_on_focus = GetWindow(SendMessageW(mdi_wnd, 0x0229, 0, 0), 5);
   else
      wnd_on_focus = GetWindow(thread_info.hwndActive, 5);

   for(long ch_id = ChartFirst(); ch_id != -1; ch_id = ChartNext(ch_id))
      if(ChartGetInteger(ch_id, CHART_WINDOW_HANDLE)==wnd_on_focus)
        {
         chart_id = ch_id;
         break;
        }
   return chart_id;
  }

¿Quizás sepas como implementar este caso en mql o al menos con dll, pero más simple?

 
vek_y4icb:
como definir un grafico activo usando mql tools sin usar dll.

No recuerdo exactamente. Creo que este problema fue resuelto. Tal vez una búsqueda le ayudará.