Características del lenguaje mql5, sutilezas y técnicas - página 186

 
HistorySelect.

Foro sobre trading, sistemas de trading automatizados y pruebas de estrategias de trading

MT5 y Speed en acción

fxsaber, 2020.09.02 00:32

Si alguien intenta utilizar bibliotecas compartidas en las que el parámetro from-input no coincide, se producirá una ralentización.


El otro HistorySelect.

Foro sobre comercio, sistemas de comercio automatizados y pruebas de estrategias

MT5 y Speed en acción

fxsaber, 2020.09.02 00:52

HistoryDealSelect y HistoryOrderSelect deben escribirse necesariamente así.

  static bool HistorySelectOrder( const ulong Ticket )
  {
    return((::HistoryOrderGetInteger(Ticket, ORDER_TICKET) == Ticket) || ::HistoryOrderSelect(Ticket));
  }

  static bool HistorySelectDeal( const ulong &Ticket )
  {
    return((::HistoryDealGetInteger(Ticket, DEAL_TICKET) == Ticket) || ::HistoryDealSelect(Ticket));
  }

De lo contrario, está garantizado que se encontrará con ralentizaciones.

Foro sobre comercio, sistemas de comercio automatizados y pruebas de estrategias de comercio

MT5 y Speed en acción

Renat Fatkhullin, 2020.09.02 00:40

Cuando se trabaja con volúmenes enormes (y por algo se mostraron miles y decenas de miles de operaciones en el historial), que requieren un acceso atómico/de instantáneas, es necesario comprender su coste.

 
Si el EA tiene MessageBox en OnInit, hay una serie de cosas que se pueden hacer para evitar el problema potencial de re-registro.
 
Es conveniente minimizar el número de llamadas a las funciones internas para reducir la probabilidad de encontrar sus no infrecuentes retrasos.
 

No se puede ganar

2020.04.01 11:49:34 falló la venta instantánea de 0,32 EURUSD a 1,09539 [Volumen no válido]

Tengo un control sobre el límite de volumen total en el mercado.

No sé por qué me da ese error

En el validador del mercado
 
Vladimir Pastushak:

No se puede ganar

2020.04.01 11:49:34 falló la venta instantánea de 0,32 EURUSD a 1,09539 [Volumen no válido]

Tengo un control sobre el límite de volumen total en el mercado.

No entiendo por qué me da ese error.

En el validador del mercado

¿No pudo alcanzar el límite de la orden? Creo que fue así.

 
Edgar Akhmadeev:

¿Podría haberse encontrado con un límite en las órdenes de detención? Creo que sí.

Se dice que el volumen es incorrecto, se comprueba la disponibilidad de fondos, también se comprueba que se sobrepasa el límite del lote. Sigue cavando...

 
Vladimir Pastushak:

No dice el volumen correcto.

Edgar Akhmadeev:

Parece que lo he tenido.

...que un pequeño volumen no abrió con un gran depósito. No recuerdo los detalles, pero uno de los corredores del céntimo tenía un límite de orden muy pequeño en el instrumento.

 

Existe el siguiente problema en MT5. Necesito probar el funcionamiento del panel de operaciones en el probador de estrategias en modo visual. El panel de operaciones tiene campos de entrada (OBJ_EDIT). Cuando se cambia el texto en el campo de entrada y se pulsa ENTER, no aparece el nuevo texto, sino que aparece el texto original que se estableció cuando se creó el campo de entrada. Es decir, no es posible cambiar el texto del campo de entrada durante la prueba visual del panel.

¿Cómo se puede resolver esto?

Ejemplo de código:

void OnTick()
  {
   string name="EDIT";
   if(ObjectFind(0,name)==-1)
     {
      ObjectCreate(0,name,OBJ_EDIT,0,0,0);
      ObjectSetString(0,name,OBJPROP_TEXT,"EURUSD");
      ObjectSetInteger(0,name,OBJPROP_XDISTANCE,50);
      ObjectSetInteger(0,name,OBJPROP_YDISTANCE,50);
      ObjectSetInteger(0,name,OBJPROP_XSIZE,50);
      ObjectSetInteger(0,name,OBJPROP_YSIZE,20);
      ObjectSetInteger(0,name,OBJPROP_READONLY,false);
      ObjectSetInteger(0,name,OBJPROP_COLOR,clrBlack);
      ObjectSetInteger(0,name,OBJPROP_BGCOLOR,clrWhite);
     }
  }
 

He creado este script auto-hotkey para ocultar las barras de título mientras se codifica. Funciona para todas las ventanas en Windows. No estoy seguro de otras plataformas.



; 
Hide borders, title bar 









#IfWinNotActive ahk_class Progman 









#IfWinNotActive ahk_class Shell_TrayWnd 









^] :: 









WinGet Style, Style, A 









if (Style & 0xC40000) { 









WinSet, Style, -0xC40000, A 









WinMaximize, A 













} 









else { 









WinSet, Style, + 0xC40000, A 









WinRestore, A 









} 









return 

El resultado es una pantalla de escritorio perfectamente rellena.

Sólo tienes que guardar el archivo como nombre_de_archivo.ahk. Guárdelo en su directorio preferido, y luego descargue e instale https://www.autohotkey.com.

Cree un acceso directo del script y córtelo. Pulse win + r

Escribe shell: startup y pega el acceso directo en la ventana emergente.

De esta manera, el script se iniciará con las ventanas después de reiniciar. Para lanzar el script ahora, haz doble clic en él, luego puedes ocultar las barras de título de las ventanas con ctrl +].

Asegúrese de que la ventana no está maximizada mientras utiliza el acceso directo. No tiene sentido maximizar una ventana maximizada, y no manejé para ese caso.

Disfrute de

editar:

El formador de código se comporta de forma extraña. Sigue ampliando el código a un espacio de línea enorme. ¡Lol!

AutoHotkey
  • www.autohotkey.com
AutoHotkey provides a simple, flexible syntax allowing you to focus more on the task at hand rather than every single little technicality. It supports not only the popular imperative-procedural paradigm, but also...
Archivos adjuntos:
 

Foro sobre comercio, sistemas de comercio automatizados y pruebas de estrategias

Bibliotecas: Punto de referencia

fxsaber, 2020.10.01 23:49

// Возвращает true в некоторых ситуациях, когда чарт не виден.
bool IsInvisible( long chartID = 0 )
{
  bool Res = ::ChartGetInteger(chartID, CHART_IS_MINIMIZED);
  
  if (!Res && !::ChartGetInteger(chartID, CHART_IS_MAXIMIZED) && ::ChartGetInteger(chartID, CHART_IS_DOCKED))
  {
    if (!chartID)
      chartID = ::ChartID();

    for (long Chart = ::ChartFirst(); (Chart != -1) && !Res; Chart = ::ChartNext(Chart))
      Res = (Chart != chartID) && ::ChartGetInteger(Chart, CHART_IS_MAXIMIZED);
  }
  
  return(Res);
}

Los paneles de negociación y otra información en los gráficos no se actualizan si se devuelve true.