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

 

大家好!

我花了半个晚上的时间试图弄清楚为什么一个简单的条件不起作用,请帮助我弄清楚它。

      macd1 = iMACD (_Symbol,PERIOD_CURRENT,5,34,5,0,1,0);
      macd2 = iMACD (_Symbol,PERIOD_CURRENT,5,34,5,0,1,1);
      highprice1 = High [0];
      highprice2 = High [1];
      lowprice1 = Low [0];
      lowprice2 = Low [1];
              if (macd1 > 0 && macd1 > macd2 && highprice1 > highprice2) 
                 {
                 maxprice1 = highprice1;
                 macdMAXSell = macd1;
                 Print("maxprice1 = highprice1",maxprice1);
                 }
              if (macd1 < 0 && macd1 < macd2 && lowprice1 < lowprice2)
                 {
                 minprice1 = lowprice1;
                 macdMAXBuy = macd1;
                 Print("minprice1 = lowprice1",minprice1);
          	 } 

我在历史数据上运行,变量macd1,2,lowprice,highprice都被赋值了,但条件却不想运行,我打破了头也不明白该往哪里挖...(((

 
Nikolay Gaylis:

也许1和1?/即真和错误代码 1

拒绝接受1没有错误,但结果不明

完全混乱,不了解你在做什么

bool takelimit;   // Здесь переменная равна false

//--- Здесь вот что: сначала выбирается ордер по тикету (MODE_TRADES здесь не нужно от слова "совсем", что говорит о том, что вы не представляете что вы делаете), 
//--- далее переменной takelimit присваивается результат работы функции выбора ордера, 
//--- и если ордер есть с таким тикетом, или был когда-то, то функция вернёт true, и takelimit будет присвоено true, соответственно, будет выведен код последней ошибки,
//--- что вовсе не говорит, что ошибка здесь была при выборе ордера по тикету - вы же переменную, хранящую код последней ошибки, не сбросили при помощи ResetLastError()
//--- И далее вообще не понятно к чему у вас фигурные скобки - они висят в пустоте, а это составной оператор, который должен после условия идти.

if(takelimit=OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
   Print(string(takelimit)+"   :",GetLastError());//здесь возвращает число 11, получается ошибка код 11, но не нашел расшифровку нигде?
  {
   if(iBarShift(Symbol(),0,OrderOpenTime())==1)
      deletelimit=OrderDelete(ticket);
   if(!deletelimit)
      Comment(GetLastError());
  }
//+------------------------------------------------------------------+
//--- А нужно примерно так (фигурные скобки специально оставил для понимания где какой блок кода):
   ResetLastError();
   if(OrderSelect(ticket,SELECT_BY_TICKET) && OrderCloseTime()==0)
     {
      if(iBarShift(Symbol(),PERIOD_CURRENT,OrderOpenTime())==1)
        {
         if(!OrderDelete(ticket))
            Print("Ошибка удаления ордера #",(string)ticket,": ",GetLastError());
        }
     }
   else
     {
      Print("Ошибка выбора ордера #",(string)ticket,": ",GetLastError());
     }
 
Вадим Мотеюнас:

Print(takelimit,GetLastError())返回两个值,因为第1个变量是bool类型,不需要GetLastError,由于有一个逗号,GetLastError返回调用GetLastError时代码中的最后一个错误?

是的......有两个值,打印.....

这几乎正是你所写的内容。

int ticket;

void Fn()
  {
   ResetLastError();//Сбрасываем код предыдущей ошибки
   if(!OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)){Print(GetLastError());}//Если не выбран ордер по указанному тикету-принтим код ошибки
   else//иначе(если ордер нашёлся)
     {
      if(iBarShift(Symbol(),0,OrderOpenTime())==1 && !OrderDelete(ticket)){Comment(GetLastError());}//Если выбранный ордер открылся на предыдущем баре и не удалось его удалить(надеюсь Вы работаете с отложенниками)-тогда выводим комент ошибки
     }
  }
 
Nikolay Gaylis:

是的......有两个值可以打印.....

这几乎正是你所写的内容。

你也是如此...
如果订单已经被删除了,那该怎么办?
 
Artyom Trishkin:

完全是一团糟,对自己的工作有误解......

我实际上没有做什么,我只是假设这个人将打印1和1而不是11))

而这一切...

 
Artyom Trishkin:

完全是一团糟,对自己的工作有误解...

啊......所以你回应的是错误的人......我明白了)

 
Nikolay Gaylis:

我实际上没有做什么,我只是假设这个人不会打印11,而是1和1)。

像这里的这句话。

Print(string(takelimit)+"   :",GetLastError());

我应该打印 "11 "吗?

那么它将打印 "1:1"。

错误代码 1是没有错误,但结果是未知的。

 
Artyom Trishkin:

像这里的这句话。

它可以打印 "11 "吗?

那么它将打印 "1:1"。

错误代码 1是没有错误,但结果是未知的。

是的,我已经改过了!

 
Nikolay Gaylis:

啊......所以你回应的是错误的人......我明白了)

是的,我是在回复你所回复的同一个人。但你也告诉了他错误的事情--阅读什么时候需要MODE_TRADES,什么时候不需要。以及在票据上应 如何选择订单

 
Artyom Trishkin:

嗯,是的,我是在回答你所回答的同一个人。但你也没有正确地告诉他一切--阅读什么时候需要MODE_TRADES,什么时候不需要。以及在票据上应 如何选择订单

MODE_TRADES还没有看,只看了11日打印的那篇...

原因: