Errores, fallos, preguntas - página 1126

 

Estoy escribiendo un ToR para un EA de MT4 con prioridad en el procesamiento de datos acelerado.

Por favor, indique si la secuencia de cálculos o el muestreo (¿cuál es el nombre correcto - representativo?) es importante para acelerar.

Adjunto dos variantes en forma de imágenes que muestran diagramas de bloques.

Si puede, por favor escriba cómo debería ser el código si la ejecución selectiva de los bloques será - una disposición puramente primitiva, y ¿dará esto un aumento significativo de la velocidad?

Archivos adjuntos:
Logic_V_01.png  26 kb
Logic_V_02.png  30 kb
 
void OnStart()
{
        uchar max=0;
        for(int t=0;t<LONG_MAX;t++)   {max++;}    //так получаем предупреждение expression is always true, цикл работает
        for(int t=0;t<LONG_MAX+1;t++) {max++;}    //так предупреждение есть, но цикл не работает
        for(int t=0;t<ULONG_MAX;t++)  {max++;}    //так нет предупреждения и цикл не пашет
        Print("Done!");
}
 

¿Cómo se explica este cierre de una posición en el probador? ¿Se debe a la ampliación de la extensión?

Capturas de pantalla de la plataforma comercial MetaTrader

EURUSD, M20, 2014.04.12

Alfa-Forex, MetaTrader 5, Real

temp_file_screenshot_63279.png

EURUSD, M20, 2014.04.12, Alfa-Forex, MetaTrader 5, Real


 
Crucian:

¿Cómo se explica este cierre de una posición en el probador? ¿Es la ampliación del margen?

[img]https://charts.mql5.com/4/434/eurusd-m20-alfa-foreks-temp-file-screenshot-63279-png.png[/img]

Si el diferencial se ha ampliado (y, a juzgar por la captura de pantalla, en 720 puntos), entonces todo es correcto.

La posición de venta se ha cerrado al precio Ask. Esto es si se colocan los topes.

Por cierto, su brokerAlfa-Forex tieneunos spreads simplemente gigantescos al final de la semana y al principio.

Probablemente se registraron en el historial de cotizaciones y el probador simuló operar con ellas.

Las paradas para el fin de semana son peligrosas: no se salvarán de la brecha de todos modos, y el ensanchamiento puede atraparte fácilmente.

 
Fleder:
for(int t=0;t<LONG_MAX+1;t++) {max++;}    //так предупреждение есть, но цикл не работает

No hay error aquí porqueLONG_MAX+1< 0

for(int t=0;t<LONG_MAX;t++)   {max++;}    //так получаем предупреждение expression is always true, цикл работает
Aquí la advertencia es válida (t<LONG_MAX siempre verdadera si t int ) bucle infinito
 
void OnStart()
{
  uchar max=0;
  for(int t=0;t<ULONG_MAX-1 e0;t++)  {max++;}      //так цикл работает, предупреждения нет так как ULONG_MAX-1e0 имеет тип double
  for(int t=0;t<ULONG_MAX-1;t++)    {max++;}      //а так нет и предупреждения тоже нет
  Print("Done!");
}
 
Fleder:
for(int t=0;t<ULONG_MAX-1;t++)    {max++;}      //а так нет и предупреждения тоже нет
Aquí no hay error, porque ULONG_MAX-1< 0, es decir, la operación de comparación se convierte en int o long - más precisamente hay una comparación bitwise
 
A100:
No hay error porque ULONG_MAX-1< 0, porque la operación de comparación se reduce a int

Entonces, cómo explicar esto:

void OnStart()
{
  long t=0;
  bool comp=(ULONG_MAX-1>t);
  Print("comp = ",comp);   //comp = true
  Print(ULONG_MAX-1);      //18446744073709551614
  Print(ULONG_MAX);        //18446744073709551615
}
 
A100:
No hay ningún error aquí porque ULONG_MAX-1< 0, es decir, la operación de comparación se convierte en int o long

¿Te refieres a la comparación en la expresión probada en el bucle?

Porque no lo parece en una simple comparación.

 
A100:

Sólo hay que cambiarlos :)

¿Qué hace este reordenamiento? t era menor que ULONG_MAX-1 y sigue siéndolo.

void OnStart()
{
  long t=0;
  Print( (t < ULONG_MAX-1) == (ULONG_MAX-1 < t)); //false
}