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

 
Andrey Khatimlianskii:

¡Hola!

El análogo de MT4 de los gráficos fuera de línea son los instrumentos de castum. Puede rellenar cualquier historia, incluso hacer que 1 barra = 1 tick.

Pero, al igual que en MT4, cada barra tiene que ser al menos un minuto diferente en el tiempo de la anterior, por lo que no habrá una escala de tiempo normal.

ps: hay un indicador listo aquí - https://www.mql5.com/en/blogs/post/719145

En MT4 el tiempo de una barra sólo tiene que ser más largo que el de la barra anterior, y entonces MT4 mostrará la barra, es decir, en MT4 se pueden dibujar barras en gráficos offline con una precisión de segundos, he publicado un gráfico de segundos en QB

pero con MT5 esto "no funcionará", si intentas enviar al símbolo personalizado 2 barras con el mismo tiempo de apertura, sin tener en cuenta los segundos, entonces sólo se mostrará una barra, es decir, la precisión de menos de M1 en los gráficos personalizados de MT5 no funcionará

 
fxsaber:

Hay un diagramaaquí. Funciona.

¿Sin mover la AT? ¿Funciona siempre? No más que suerte.


fxsaber:

¿Dónde está el límite de la perfección que se puede/debe tolerar? ¿Qué tienen que ver las regresiones y las recotizaciones que se producen ocasionalmente con el probador?

No tiene nada que ver con las pujas.

Una orden de Límite no necesita ser ejecutada al último precio conocido ni en el probador ni en tiempo real. El precio puede ir a cualquier parte durante su envío.

Otra cuestión es que en el modo de retardo 0 (ejecución ideal), el probador puede fingir que la orden ha sido enviada al broker y ejecutada inmediatamente, pero no le veo ninguna utilidad, porque, de nuevo, no tiene sentido la prueba ideal si en la situación real va a ocurrir lo contrario de todas formas.

 
Igor Makanu:

En MT4 el tiempo de la barra simplemente tiene que ser más largo que el de la barra anterior y entonces MT4 mostrará la barra, es decir, en MT4 puedes dibujar barras en los gráficos offline al segundo más cercano, he publicado un gráfico de segundos en KB

Gracias por la edición, ya lo había olvidado. En su día, sin duda había errores si la hora no era un múltiplo de minutos, entonces parecía que también funcionaba así.

Definitivamente no se puede hacer así en el 5.

 
Andrey Khatimlianskii:

¡Hola!

El análogo de MT4 de los gráficos fuera de línea son los instrumentos de castum. Puede rellenar cualquier historial, incluso hacer que 1 barra = 1 tick.

Pero, al igual que en MT4, cada barra tiene que ser al menos un minuto diferente en el tiempo de la anterior, por lo que no habrá una línea de tiempo normal.

ps: hay un indicador listo aquí - https://www.mql5.com/en/blogs/post/719145

Los símbolos personalizados son lo mejor. Y el tiempo de las garrapatas no me importa. Gracias, es un impulso en la dirección correcta. )))

 
Andrey Khatimlianskii:

¿Sin mover la AT? ¿Funciona bien siempre? No más que suerte.

No, por supuesto que no. Por eso el ciclo.

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

Características del lenguaje mql4, complejidades y trucos

fxsaber, 2019.12.13 00:27

El cierre urgente de una posición se realiza de la siguiente manera
const double ClosePrice = OrderType() ? MathMin(OrderClosePrice(), Bid + MaxSpread * _Point) 
                                      : MathMax(OrderClosePrice(), Ask - MaxSpread * _Point);
    
OrderModify(OrderTicket(), OrderOpenPrice(), OrderStopLoss(), ClosePrice, 0); // StopLoss оставлен для истории
En el bucle, por supuesto. ¿Tiene alguna otra opción?

Los reglamentos no tienen nada que ver.

El limitador no tiene que activarse al último precio conocido ni en el probador ni en la vida real. El precio puede ir a cualquier parte durante el tiempo que se envía.

Otro punto es que en el modo de retardo 0 (ejecución ideal), el probador puede fingir que la orden ha sido enviada al broker y ejecutada al instante, pero no le veo ninguna utilidad, porque, de nuevo, no tiene sentido la prueba ideal si en el mundo real va a ocurrir lo contrario de todas formas.

En realidad, será una ejecución total (o parcial) al precio actual (o mejor), o una refutación. Es decir, la ejecución puede ser perfecta o no.

Así, el Probador siempre funciona perfectamente para un mercado, mientras que siempre falla para una orden limitada.

 
fxsaber:

Esto significa que el probador siempre funciona perfectamente para un mercado, pero no para un limitador.

Prefiero hacer el siguiente tic para un mercado. Sería mejor que el probador mostrara una pérdida que una real. Y es poco probable que el grial se pierda por esto.

 
Andrey Khatimlianskii:

Aquí prefiero hacer la ejecución del siguiente tick para los mercados. Es mejor que un probador muestre una caída en picado que una real. Y es poco probable que el grial se pierda por esto.

El siguiente tic no es correcto, su mercado debe generar un tic, y ser ejecutado a la oferta o demanda más cercana, teniendo en cuenta el volumen de la operación.
El límite también debe llenarse a un precio garantizado basado en el volumen.
Todos los demás algoritmos que se hacen ahora, sólo engañan, obteniendo resultados reales.
Por esta razón, no utilizo el probador en absoluto. No tiene sentido, cuando en lo más básico, hay una sustitución de la ejecución.

 
Roman:

El siguiente tic no es correcto, su mercado debe dar lugar a un tic, y se ejecutará a la oferta o demanda más cercana, teniendo en cuenta el volumen de la operación.
Las órdenes limitadas también deben ser ejecutadas a un precio garantizado basado en el volumen.
Todos los demás algoritmos que se hacen ahora, sólo engañan, obteniendo resultados reales.
Por esta razón, no utilizo el probador en absoluto. No tiene sentido, cuando en lo más básico, hay una sustitución de la ejecución.

Pues bien, para eso se necesita el historial de la copa o, al menos, los volúmenes de la oferta extrema. Y no hay ninguna.

Y un mercado no debe generar un tick en el probador, de lo contrario el historial dependería de la estrategia que se está probando.

 
Andrey Khatimlianskii:

Pues bien, para eso se necesita el historial de la copa o, al menos, los volúmenes de la oferta extrema. Y no hay ninguna.

Y el mercado no debe generar un tick en el probador, de lo contrario el historial dependería de la estrategia que se está probando.

Como uno de los moderadores dijo que mt5 fue desarrollado para los mercados de valores,
pero al observar la implementación del probador, su desarrollo se ha reducido al mismo principio de la ejecución de los tratos, incluso en los ticks reales.

¿Cómo se hace la prueba entonces? ¿Con qué datos históricos?
¿Y entonces confías en las pruebas de tales citas históricas?
:))

Por supuesto, necesitas un historial de garrapatas, y hacer pruebas con garrapatas reales.
Dónde conseguir el historial de garrapatas es problema del usuario, recogerlo uno mismo, comprarlo, cogerlo de alguien que lo tenga, etc.

Sí, estoy de acuerdo en que los volúmenes para la oferta asc no se guardan ahora, pero ¿qué impide a los desarrolladores añadir tres columnas?

  1. Columna de volumen Preguntar
  2. Columna de volumen Oferta
  3. Columna Dirección de la última operación, Comprar o Vender


Entonces, todos los problemas relativos a la corrección de las pruebas sobre ticks reales desaparecerán automáticamente.
La ejecución de las órdenes de cambio en el probador será como debe ser.

Sí, el tick generador, no por lo que me refería a que el mercado en el probador debe ser ejecutado en el Bid Asks más cercano, recogiendo la liquidez en los niveles de precios.
Es decir, si enviamos un BuyMarket con un volumen de 25, el precio de ejecución reunirá dos niveles, 10 y 15, y promediará automáticamente el precio neto de la posición.

182,13 Pregunta1 15
182,12 Pregunta 10
--------------------
182,11 Bid0 5
182,10 Oferta1 8

En el caso de las órdenes limitadas, el volumen de la última operación debe cubrir el volumen de su orden limitada al precio garantizado al que se coloca la orden limitada.
Es decir, su orden limitada debe ser parcialmente cubierta. Si su orden limitada se coloca con un volumen de 25, entonces la última operación con un volumen de 5 tomará 5 de su orden limitada.
Su orden limitada tiene ahora un volumen de 20, la siguiente operación pasó con un volumen de 10, su orden limitada tiene ahora un volumen de 10,
otro La última operación pasó con el volumen 10, su orden limitada se llena completamente.
Si el precio se dio la vuelta y no ejecutó todo el volumen de su orden limitada, esta es la situación real, la ejecución real.
Y el volumen restante de su orden limitada sigue esperando hasta que Last llegue a ella de nuevo, o usted mismo retire esa orden.

Por lo tanto, la forma en que se implementa el algoritmo en el probador, no tiene nada que ver con la realidad.
Es como un juguete para lavar los ojos.


 

No voy a manipular las estructuras de mi POD para abrir un formato. Hay muchos campos en las estructuras. Algunas estructuras se heredan, otras tienen campos privados.


De todos modos, ha surgido la tarea de poner a cero estas estructuras para editar el formato en estudio. Y realmente no sale nada. Como resultado, decidí utilizar esta variante.

#include <TypeToBytes.mqh> // https://www.mql5.com/ru/code/16280

// Обнуление переменной.
template <typename T>
void ToNull( T &Value )
{
  uchar Bytes[sizeof(T)];
  ArrayInitialize(Bytes, 0);
  
  _W(Value) = Bytes;
}


Aplicación.

struct A
{
private:
  int i;
  
public:
  int j;  
};

void OnStart()
{
//  A a = {0};     // 'a' - cannot be initialized with initializer list
//  ZeroMemory(a); // 'a' - not allowed for objects with protected members or inheritance
  
  ToNull(a);
}


Una alternativa es bienvenida.