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

 
Alexey Viktorov:

时间减去时间除以PeriodSeconds()。

所以它可能在周五和周一的过渡期有错误的长度(或者如果历史上有遗漏的小节)。

最好是先读出时间点,然后再定义条形图。

datetime time1=(datetime)ObjectGetInteger(ExtChartID,name,OBJPROP_TIME,0);
datetime time2=(datetime)ObjectGetInteger(ExtChartID,name,OBJPROP_TIME,1);

int bar1=iBarShift(_Symbol,_Period,time1);
int bar2=iBarShift(_Symbol,_Period,time2);
 
Taras Slobodyanik:

所以它可能在周五和周一的过渡期有错误的长度(或者如果历史上有遗漏的小节)。

最好是先读出各点的时间,然后再识别条形图。

同意。没有打扰我自己,也没有打扰我的大脑。那么最好的办法是取日期之间的条数

int  Bars( 
   string           symbol_name,     // имя символа 
   ENUM_TIMEFRAMES  timeframe,       // период 
   datetime         start_time,      // с какой даты 
   datetime         stop_time        // по какую дату 
   );
 
int start()
{
  if(Check()==false)
      return;  
      
  int TotalOrders;
  double NewPrice, NewLots, NewTP, NewSL;
  /*****************************************************************************/
  /* Здесь часть кода, которая работает при каждом новом тике                  */ 
  /*****************************************************************************/
  TotalOrders = CountOfOrders(); 
     double sprd = Ask-Bid;
     int tot = CountOfOrders2();
     double spred = spred/Point*(tot-1);

  if(tot > 1)PercCloseDown();


这一部分说的是错误



你能告诉我如何启动机器人吗?


 
Ivan Butko:

这一部分写了一个错误

我怎样才能让机器人启动?

在这里,变量被声明并立即被分割。

double spred = spred/Point*(tot-1); 

这个错误表明,编译器把这个变量(spred)当作未声明的。 这至少也是不好的,因为它(变量)没有被初始化--因为它不是一个全局变量,它可能有一个未定义的值...

试着早点声明它,并给它赋值
 
Yevhenii Levchenko:

这里声明了一个变量,并立即将其共享。

这个错误表明,编译器将这个变量(spred)视为未声明的。 这至少也是不好的,因为它(变量)没有被初始化--因为它不是一个全局变量,可能存在一个未定义的值...

尝试提前声明并为其赋值

尤金,我从心底里感到高兴!
开始了,谢谢你。

 

如果在MQL5中,该怎么做...

if(BarsCalculated(handle) == -1)

...已经过了大约一分钟,问题还是一样。为什么这么久?


错误 4806 - 未找到所需的数据 ...- ...我怎样才能让我的EA找到它?

 
Ivan Butko:
int start()
{
  if(Check()==false)
      return;  
      
  int TotalOrders;
  double NewPrice, NewLots, NewTP, NewSL;
  /*****************************************************************************/
  /* Здесь часть кода, которая работает при каждом новом тике                  */ 
  /*****************************************************************************/
  TotalOrders = CountOfOrders(); 
     double sprd = Ask-Bid;
     int tot = CountOfOrders2();
     double spred = spred/Point*(tot-1);

  if(tot > 1)PercCloseDown();


这一部分说的是错误



你能告诉我如何启动机器人吗?


第61行,是哪一行?
 

我如何捕捉内存不足的错误?


首先是什么原因导致这一信息?


我写了一个 大约2万行的程序。我有很多不同的类、数组和结构。

大约每两三天就会弹出内存不足的信息。

我不知道如何追踪哪个函数是造成内存泄漏的原因。

 
Sergey Likho:

我如何捕捉内存不足的错误?


首先是什么原因导致这一信息?


我写了一个 大约2万行的程序。我有很多不同的类、数组和结构。

大约每两三天就会弹出 "内存不足 "的信息。

我不知道如何抓住它,哪个函数负责内存泄漏。

确保每个新事物都有自己的删除功能

也就是说,只有通过仔细阅读你的代码。为了使阅读更容易、更有趣,你可以把它评论出来 :-)

为每一个类编写测试案例脚本也是一个好主意,这样可以检查类内部的泄漏。

 
Maxim Kuznetsov:

确保每个新事物都有自己的删除功能

也就是说,只要仔细阅读代码就可以了。为了使阅读更容易、更有趣,你也可以发表评论 :-)

为每个类编写测试案例脚本也是一个好主意,这样可以检查类内部的泄漏。

新的,删除不使用。类元素在一开始就被定义了,我没有重新创建它们。

大多数情况下,我都是与数组打交道。


什么是测试用例脚本?