Quaisquer perguntas de recém-chegados sobre MQL4 e MQL5, ajuda e discussão sobre algoritmos e códigos - página 1264

 
Roman:

Você pode me dizer como medir a taxa mínima de amostragem, uma iteração de um loop de tempo?
Tentando este código, mas não tenho certeza se estou medindo corretamente.


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, entendi o ponto.
Eu o escrevi um pouco diferente.

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

Acontece que é de 0 ou 1 microssegundo.
Abaixo de microssegundos, não pode ser verificado.

 
Roman:

Ah, entendi o ponto.
Eu o escrevi um pouco diferente.

Acontece que é de 0 ou 1 microssegundo.
Abaixo de microssegundos, é impossível verificar.

É melhor contar o número de iterações. É claro que será menos de um microssegundo com as freqüências atuais da CPU. Por exemplo, entre carrapatos)

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:

É melhor contar o número de iterações. É claro que será menos de um microssegundo com as freqüências atuais da CPU. Por exemplo, entre carrapatos)

Provavelmente é melhor, mas não é essa a questão.
Temos que descer para nanossegundos, então acho que devemos escrever um dll com suas próprias funções de verificação de tempo.
Estou apenas curioso sobre a discrição do laço.

 

Como posso determinar qual foi o último pedido fechado?

Ou qual foi o lucro das últimas 5 encomendas fechadas?


OrderHistoryTotal()-1 - retorna a posição do pedido na história com o bilhete máximo.


Se uma negociação com o bilhete 100 fechou, e uma hora depois, uma negociação com o bilhete 99 fechou, entãoa OrderHistoryTotal()-1 apontará para #100, mas como podemos obter informações sobre o pedido #99?

---

A coisa mais estúpida que me vem à mente - salvar a história para uma matriz, classificá-la por pouco tempo e ler o que eu preciso da matriz. Mas isso é super sub-ótimo.

 
Roman:

Provavelmente é melhor, mas não é essa a questão.
Se precisarmos descer para nanossegundos, acho que precisamos escrever uma dll com suas próprias funções de verificação de tempo.
Estou apenas curioso sobre a taxa de amostragem em que o loop cicla.

com a freqüência de um núcleo livre multiplicada pelo número de núcleos livres. 2 - 10 gigahertz devem estar em algum lugar, se não há outras tarefas e o laço só conta. A velocidade depende da carga de CPU e memória, prioridade de ações externas no momento da execução do loop, bem como de ações internas em loop. Além disso, as operações de adição e atribuição são mais rápidas do que ler e escrever de/para array, tanto quanto eu entendo.

 
Valeriy Yastremskiy:

com a freqüência de um núcleo livre multiplicada pelo número de núcleos livres. 2 - 10 gigahertz em algum lugar, se não há outras tarefas e o laço só conta. Além disso, as operações de adição e atribuição são mais rápidas do que a leitura ou escrita de/para a matriz.

Obrigado. Entendi.

 
Quem pode ajudar a escrever um robô comercial?
 
paradisehell1:
Quem pode ajudar a escrever um robô comercial?

desses robôs, tantos já foram escritos - não acredito que não haja um que você queira.

 

Bom dia a todos!


Pergunta: qual é a maneira mais fácil de determinar os tempos altos e baixos de um bar?

Otempo de abertura/fecho do bar não é interessante.

No MT4.

Obrigado!

Razão: