新人对MQL4和MQL5的任何问题,对算法和代码的帮助和讨论 - 页 1264

 
Roman:

你能告诉我如何测量最小采样率,一个while循环的迭代?
正在尝试这个代码,但我不确定我的测量是否正确。


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:

啊,我明白你的意思。
我写得有点不同。

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

结果发现是0或1微秒。
低于微秒则无法检查。

 
Roman:

啊,我明白你的意思。
我写得有点不同。

结果发现是0或1微秒。
你不能检查低于微秒的时间。

最好是计算迭代的次数。当然,以今天的CPU频率来说,这将少于一微秒的时间。例如,刻度之间)

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:

最好是计算迭代的次数。当然,以今天的CPU频率来说,这将少于一微秒的时间。例如,在滴水之间)

可能会更好,但这不是重点。
我们必须精确到纳秒,所以我认为我们应该写一个有自己的时间检查功能的dll。
我只是想知道这个循环是以何种谨慎的方式在旋转。

 

我如何确定哪个订单是最后关闭的?

或者说,最后5个关闭的订单的利润是多少?


OrdersHistoryTotal()-1 - 返回具有最大票数的订单在历史中的位置。


如果100号票的交易关闭,一小时后,99号票的交易关闭,那么OrdersHistoryTotal()-1将指向100号,但我们如何获得99号订单的信息?

---

我想到的最愚蠢的事情是--将历史记录保存到一个数组中,按关闭时间 排序,然后从数组中读取我需要的内容。但这是超级次优的做法。

 
Roman:

可能会更好,但这不是重点。
如果我们需要精确到纳秒,我想我们需要写一个有自己的时间检查功能的dll。
我只是对循环周期的采样率感到好奇。

与一个自由核心的频率乘以自由核心的数量。2-10千兆赫应该在某个地方,如果没有其他任务,而且循环只计算在内。速度取决于CPU和内存负载,循环执行时外部操作的优先级,以及循环中的内部操作。 此外,据我所知,加法和赋值操作比读写数组快。

 
Valeriy Yastremskiy:

与自由核心频率乘以自由核心的数量。2 - 10千兆赫的地方,如果没有其他任务,而且循环只计算。此外,加法和赋值操作比向/从数组中读写要快。

谢谢你。明白了。

 
 
paradisehell1:
谁能帮助编写一个交易机器人

这些机器人中,已经有很多人写过了--我不相信没有你想要的。

 

大家早上好!


问题:确定一个条形图的最高和最低时间的最简单方法是什么?

酒吧的开放/关闭时间 并不有趣。

在MT4上。

谢谢你!