Cualquier pregunta de los recién llegados sobre MQL4 y MQL5, ayuda y discusión sobre algoritmos y códigos - página 1264

 
Roman:

¿Podríais decirme cómo medir la frecuencia de muestreo mínima, una iteración de un bucle while?
Probando este código, pero no estoy seguro de estar midiendo correctamente.


void OnStart()
{
   ulong time[]; 
   ulong t = 0;  
   int   i = 0;
   ArrayResize(time, 30);      
   ulong startTime=GetTickCount64();
   uint iterations=0;
   while(i < 30 && !_StopFlag )
   {
      //t = GetMicrosecondCount();
      //t = GetMicrosecondCount() - t;      
      iterations++;
      
      ArrayFill(time, i, 1, t);
      i++;   
   }
   if (iterations) {
      ulong endTime=GetTickCount64();
      ulong avgTime=(startTime-endTime)/iterations; // среднее время 1-й итерации
   }
   ArrayPrint(time);
}
 
Maxim Kuznetsov:

Ah, entiendo el punto.
Lo escribí un poco diferente.

void OnStart()
{   
   uint  iterations = 1;   
   ulong startTime  = GetMicrosecondCount();   
   
   while(iterations == 1 && !_StopFlag )
   {            
      iterations++;         
   }
   
   ulong endTime = GetMicrosecondCount() - startTime;
   
   Print(IntegerToString(fabs(endTime)));
}

Resulta ser 0 o 1 microsegundo.
Por debajo de los microsegundos no se puede comprobar.

 
Roman:

Ah, entiendo el punto.
Lo escribí un poco diferente.

Resulta ser 0 o 1 microsegundo.
No se puede comprobar por debajo de los microsegundos.

Es mejor contar el número de iteraciones. Por supuesto, será menos de un microsegundo con las frecuencias actuales de la CPU. Por ejemplo, entre ticks)

void OnStart()                                  // Спец. функция OnStart()
  {
   int i, Count;                             // Объявление переменных
   for (i=1; i<=5; i++)                      // Покажем для 5 тиков
     {
      Count=0;                               // Сброс счётчика
      while(RefreshRates()==false)           // До тех пор, пока..
        {                                   //..придёт новый тик
         Count = Count+1;                    // Счётчик итераций 
        }
      Alert("Тик ",i,", циклов ",Count);     // После каждого тика
     }
   return;                                   // Выход из start()
  }
//--------------------------------------------------------------------
 
Valeriy Yastremskiy:

Es mejor contar el número de iteraciones. Por supuesto, será menos de un microsegundo con las frecuencias actuales de la CPU. Por ejemplo, entre ticks)

Probablemente sea mejor, pero ese no es el punto.
Tenemos que bajar a nanosegundos, por lo que creo que deberíamos escribir una dll con sus propias funciones de comprobación de tiempo.
Sólo tengo curiosidad por la discreción del bucle.

 

¿Cómo puedo determinar qué pedido se cerró en último lugar?

¿O cuál fue el beneficio de los últimos 5 pedidos cerrados?


OrdersHistoryTotal()-1 - devuelve la posición del pedido en el historial con el ticket máximo.


Si una operación con la entrada 100 se cerró, y una hora más tarde, una operación con la entrada 99 se cerró, entoncesOrdersHistoryTotal()-1 apuntará a #100, pero ¿cómo podemos obtener información sobre la orden #99?

---

Lo más estúpido que se me ocurre es guardar el historial en un array, ordenarlo por tiempo de cierre y leer lo que necesito del array. Pero eso es súper sub-óptimo.

 
Roman:

Probablemente sea mejor, pero ese no es el punto.
Si necesitamos bajar a nanosegundos, creo que debemos escribir una dll con sus propias funciones de comprobación de tiempo.
Sólo tengo curiosidad por saber la velocidad de muestreo a la que el bucle cicla.

con la frecuencia de un núcleo libre multiplicada por el número de núcleos libres. 2 - 10 gigahercios deberían estar en algún lugar, si no hay otras tareas y el bucle sólo cuenta. La velocidad depende de la carga de la CPU y de la memoria, de la prioridad de las acciones externas en el momento de la ejecución del bucle, así como de las acciones internas en el bucle. Además, las operaciones de adición y asignación son más rápidas que la lectura y escritura en/desde el array, según tengo entendido.

 
Valeriy Yastremskiy:

con la frecuencia de un núcleo libre multiplicada por el número de núcleos libres. 2 - 10 gigahercios en algún lugar, si no hay otras tareas y el bucle sólo cuenta. Además, las operaciones de adición y asignación son más rápidas que la lectura o escritura en/desde un array.

Gracias. Lo tengo.

 
¿Quién puede ayudar a escribir un robot de trading?
 
paradisehell1:
¿Quién puede ayudar a escribir un robot de trading?

de estos robots, ya se han escrito muchos - no creo que no haya uno que quiera.

 

¡Buenos días a todos!


Pregunta: ¿cuál es la forma más fácil de determinar los tiempos máximos y mínimos de una barra?

Lahora de apertura/cierre del bar no es interesante.

En MT4.

Gracias.