Características del lenguaje mql4, sutilezas y técnicas - página 19

 

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

Bibliotecas: Experto

fxsaber, 2019.06.04 16:40

// MT4-советник показывает, в каком режиме Long/Short был запущен.

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

int GetLongShortFlag( const int Chart_ID = 0 )
{
  MqlParam Params[];
  string Names[];
  
  const int Res = EXPERT::Parameters(Chart_ID, Params, Names);
  
  return(((Res & 3) << 1) + (Res & 1));
}

string LongShortToString( const int Chart_ID = 0 )
{
  const int Flag = GetLongShortFlag(Chart_ID);
  string Str = NULL;
  
  if ((bool)(Flag & SYMBOL_TRADE_MODE_LONGONLY) && (bool)(Flag & SYMBOL_TRADE_MODE_SHORTONLY))
    Str = "Long & Short";
  else if ((bool)(Flag & SYMBOL_TRADE_MODE_LONGONLY))
    Str = "Only Long";
  else if ((bool)(Flag & SYMBOL_TRADE_MODE_SHORTONLY))
    Str = "Only Short";
    
  return(Str);
}

int OnInit()
{
  Alert(LongShortToString());
  
  return(INIT_FAILED);
}


Alternativa

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

Cualquier pregunta que los novatos tengan sobre MQL4 y MQL5, ayuda y discusión sobre algoritmos y códigos

fxsaber, 2019.06.04 19:40

string LongShortToString2()
{
  string Str = "Long & Short";

  if (OrderSend(_Symbol, OP_BUY, 1, 0, 0, 0, 0) && (GetLastError() == ERR_LONGS_NOT_ALLOWED))
    Str = "Only Short";
  else if (OrderSend(_Symbol, OP_SELL, 1, 0, 0, 0, 0) && (GetLastError() == ERR_SHORTS_NOT_ALLOWED))
    Str = "Only Long";
    
  return(Str);
}


No siempre funcionará, pero la mayoría de las veces es suficiente.

 
Los comentarios no relacionados con este tema han sido trasladados a "Cualquier pregunta de los novatos en MQL4 y MQL5, ayuda y discusión sobre algoritmos y códigos".
 

La tarea consistía en guardar todos los ticks (sin pérdidas) del Market Watch con el menor esfuerzo.

Escribí un Loader-script, que abre un gráfico para cada símbolo y ejecuta el indicador-colector en él.

Todo el truco consiste en ejecutar el indicador a través de la carga de un archivo tpl de este tipo (dado en su totalidad)

<chart>
<window>
<indicator>
name=Custom Indicator
<expert>
name=HistoryTicks_OnlySave
</expert>
</indicator>
</window>
</chart>

Es bueno porque no hay bares. Por lo tanto, no se gastan recursos en ellos.

Al final del día hay 60 gráficos. La misma cantidad de indicadores. Se escriben ~500Kb de ticks por minuto.

RAM ~450Mb, CPU ~3-8% (8 HyperThreading).


Si quiere hacer algo así, le recomiendo que ejecute el Asesor Experto, que hace un seguimiento de la frecuencia con la que cambian los datos en Market Watch. Mi EA no se actualiza durante más de tres segundos y luego se ve obligado a volver a iniciar sesión. El caso es que MT4 (y MT5 también) en caso de problemas de red puede reiniciarse después de 10-15 segundos, y a veces hasta un minuto. Sólo entonces se produce el reinicio de la sesión. Para no perder ticks en esos 10-15 segundos o incluso un minuto, recomiendo tomar la tarea de reconexión. Lo mismo ocurre con los terminales con CT de combate.

 
fxsaber:

El reto consiste en guardar todos los ticks (sin pérdidas) del Market Watch con el menor esfuerzo posible.

¿Es sin pérdidas? Este mito ya ha sido desmontado.

 
Andrey Khatimlianskii:

¿No hay pérdidas, entonces? Creo que ese mito ya se ha disipado.

No recuerdo exactamente cómo me convencí de ello. Sé que comparé el historial recogido en MT4 con el del broker. Tengo una coincidencia del 100%.

Utilizo la solución HistoryTicks de QB. Cuando comparo el resultado del probador virtual en los ticks recolectados y el resultado del probador MT5 en los ticks descargados - coincide al 100%.

Los problemas sólo pueden deberse a la conectividad. Los asesores expertos, por supuesto, fallan. Los indicadores no lo hacen.

 
fxsaber:

No recuerdo exactamente cómo me convencí de ello. Sé que comparé el historial recogido en MT4 con el del broker. Había una coincidencia del 100%.

Utilizo la solución HistoryTicks de QB. Cuando comparo el resultado del probador virtual en los ticks recolectados y el resultado del probador MT5 en los ticks descargados - coincide al 100%.

Los problemas sólo pueden deberse a la conectividad. Los asesores expertos, por supuesto, fallan. Los indicadores no lo hacen.

Ejem... Estaba hablando de tu exposición:

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

Errores, fallos, preguntas

fxsaber, 2018.02.26 09:05

Si un paquete de tres ticks llegó, el evento Calculate será llamado tres veces, pero SymbolInfoTick devolverá el último tick en cada una de esas tres llamadas. Es decir, la supuesta recogida de ticks sin pasar por indicadores es cuestionable, por decirlo suavemente.


¿Ha cambiado algo?

 
Andrey Khatimlianskii:

Ejem... Estaba hablando de tu exposición:

¿Ha cambiado algo?

Cuando se ha jugado con CopyTicks, se han comparado los resultados de la recogida de garrapatas y de CopyTicks.

No recuerdo exactamente, pero creo que hubo una coincidencia.

Tenemos que usar CustomTicksAdd para añadir un lote de ticks y mirarlo. Pero es MT5.


Para MT4 se puede comprobar de esta manera. Dos garrapatas registradas vecinas deben ser siempre diferentes. Y los volúmenes de ticks de las barras en el servidor deben coincidir con las barras de los ticks recogidos.

En 2018 debía saber algo inteligente. No puedo recordar ahora.

 
fxsaber:

No recuerdo exactamente cómo me convencí de ello. Sé que comparé el historial recogido en MT4 con el del broker. Había una coincidencia del 100%.

Utilizo la solución HistoryTicks de QB. Cuando comparo el resultado del probador virtual en los ticks recolectados y el resultado del probador MT5 en los ticks descargados - coincide al 100%.

Los problemas sólo pueden deberse a la conectividad. Los asesores expertos, por supuesto, fallan. Los indicadores no lo hacen.

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

Dar un asesor para recoger el historial de garrapatas

zenz, 2018.03.07 11:10

Hice la comparación en septiembre. El archivo de Alpari tiene un retraso de publicación de 1 semana, por lo que si hago la comparación actual, no la tendré antes de la semana que viene (y no le veo mucho sentido, ya me he dado cuenta por mí mismo).

Así que aquí hay dos capturas de pantalla del 22.09.2017. El terminal se ejecutaba en un ordenador vacío, con el único indicador que escribía el registro. Sistema operativo XP SP3, versión del terminal MT4 build 1090. Cuenta real Alpari Pro-ECN.



A la izquierda está la imagen del archivo de Alpari, y a la derecha los ticks registrados por el indicador.

Aquí se puede observar que los ticks anteriores a los 17 segundos y los posteriores (16 y 18 segundos) coinciden completamente, es decir, el caso, en este caso, no está en desincronización de tiempo. Repito que no sólo saltan los ticks en un segundo, es decir, no sólo los rápidos, sino que también se tragan los "lentos". No he encontrado ninguna sistematicidad en esto.

Explicación: A la derecha del punto después de los segundos en el archivo de Alpari no hay millas o microsegundos, sino el número de tick - se hace así por alguna razón.

Aquí está el enlace a ese hilo:https://www.mql5.com/ru/forum/229889/page4#comment_6741502 No creo que haya cambiado nada en MT4 desde entonces, aunque ya no lo he comprobado, pero supongo que tanto los indicadores como los EAs en MT4 pierden los ticks.

Дайте советник для сбора тиковой истории
Дайте советник для сбора тиковой истории
  • 2018.03.07
  • www.mql5.com
Дайте готовый советник для записи тиков в csv файл...
 
zenz:

Aquí está el enlace a ese hilo:https://www.mql5.com/ru/forum/229889/page4#comment_6741502. No creo que haya cambiado nada en MT4 desde entonces, aunque ya no lo he comprobado, pero supongo que tanto los indicadores como los EAs en MT4 pierden ticks.

No hay certeza de que en el lado del servidor comercial se hayan enviado estos ticks "perdidos".

 
fxsaber:

No hay certeza de que en el lado del servidor de comercio se hayan enviado estos ticks "perdidos".

Yo también estaba reflexionando sobre esto, estoy de acuerdo. En ese momento estaba investigando y descubrí que las discrepancias no eran aisladas, sino recurrentes, así que lo dejé pasar.