"Ошибка 129" ДЦ Альпари, Демо, и ошибка "zero divide" на Roboforex

 

 Platform: Meta Trader 4. Build 438 (21 Sep 2012)  

Тема уже много раз обсуждалась, просмотрел посты:

https://www.mql5.com/ru/forum/127406/page2

https://www.mql5.com/ru/forum/133518

https://www.mql5.com/ru/forum/99891

https://www.mql5.com/ru/forum/114034 

Там, в основном, либо неправильная цена, либо говорится, что в данном ДЦ пятизнак, а в сове предусмотрено 4 знака.

Возможно, так оно и есть, но в их случае. В моем же, вот код ошибки в ЧИСТОМ виде:

int start ()
  {
  int err;
//---

err=OrderSend ("USDCHF", OP_BUY, 0.1, Ask, 3, NULL, NULL, NULL, 2308, 0, Green);
                           if (err! =0)
                           {
                           err=GetLastError ();
                           Print ("Error", err);
                           }
return (0);
}

Выдает ошибку : " 2012.10.19 18:17:15    AutoTrader GBPUSD, M5: Error 129 ". Если посмотреть внимательнее, я пытаюсь в окне  GBPUSD открыть ордер   USDCHF. И вот как раз это и не получается...

Этот код прекрасно работает на FXOpen ECN Demo (5-ти знак), но не работает на Альпари. На мои письма в поддержку отвечают советниками не занимаемся - пиши на MQL. Вот и спашиваю - что в таком простом участке кода может быть не так?

 И еще одна проблемка. Участок кода "Чистой ошибки" выделен из советника:

 ДЦ Roboforex, демо ECN счет

int start ()
{
double Ask1, Ask2, Bid1, Bid2, ValutWeight;
Ask1=NormalizeDouble (Ask, Digits);
Ask2=NormalizeDouble (MarketInfo (SubSymbol, MODE_ASK), Digits);
Bid1=NormalizeDouble (Bid, Digits);
Bid2=NormalizeDouble (MarketInfo (SubSymbol, MODE_BID), Digits);
ValutWeight=NormalizeDouble ((1/MarketInfo (SubSymbol, MODE_ASK) *Lot1) / (1/Ask), 2);
Comment (Ask2, ValutWeight);
return (0);
}

Появляется ошибка:  2012.10.19 17:41:03    AutoTrader GBPUSD.e, M5: zero divide

 Ошибка в строчке советника, когда пытается разделить 1/MarketInfo (SubSymbol, MODE_ASK). Почему-то функция возвращает 0. Вот и появляется ошибка. Но почему она возвращает 0 - не пойму.

  string SubSymbol =  "USDCHF"   (все та же ситуация с открытием другого символа на текущем графике).

Спасибо за потраченное на чтение время. И за будущую помощь, заранее спасибо...

 

OrderSend выдает на выходе номер тикета или -1 и никогда 0.

 Замените

ValutWeight=NormalizeDouble ((1/MarketInfo (SubSymbol, MODE_ASK) *Lot1) / (1/Ask), 2);

на

if (Ask2!=0) ValutWeight=NormalizeDouble (Lot1*Ask/Ask2), 2);
 
Можно, а может и нужно задать кучу дополнительных вопросов. Начиная с того, какие инструменты активны (есть в обзоре рынка), контролируете ли Вы загрузку истории. Вопросы могут продолжаться. Но хотелось бы получить хотя бы на эти
 
koljanich:

int start ()
  {
  int err;
//---

err=OrderSend ("USDCHF", OP_BUY, 0.1, Ask, 3, NULL, NULL, NULL, 2308, 0, Green);
                           if (err! =0)
                           {
                           err=GetLastError ();
                           Print ("Error", err);
                           }
return (0);
}
Если посмотреть внимательнее, я пытаюсь в окне  GBPUSD открыть ордер   USDCHF. И вот как раз это и не получается...

Вы пытаетесь открыть франк по цене  фунта. Вопросы детские. Непонятно как такой код может работать у любого брокера. Почитайте учебник что-ли.

ЗЫ  1.0/MarketInfo (SubSymbol, MODE_ASK) 

 
Roger:

OrderSend выдает на выходе номер тикета или -1 и никогда 0.

 Замените

на

 

 



Заменил, только там скобку добавил
if (Ask2!=0) ValutWeight=NormalizeDouble (Lot1*(Ask/Ask2), 2);
В результате Comment выводит 00. Ожидаемый резульат, вот только почему он на Alpari и Fxopen нормально считает, а на Roboforex - Ask2=0 ...
 
VladislavVG:

Вы пытаетесь открыть франк по цене  фунта. Вопросы детские. Непонятно как такой код может работать у любого брокера. Почитайте учебник что-ли.

ЗЫ  1.0/MarketInfo (SubSymbol, MODE_ASK) 



Огромное человеческое спасибо. Нашел, исправил. Теперь на Альпари работает!!! Сам удивился, что на Fxopen оно и до этого работало, это вообще нелогично, там разница между курсами более 300 пунктов! Как оно получалось - до сих пор не знаю, ну да ладно...

1.0/MarketInfo (SubSymbol, MODE_ASK)  : единицу хоть int, хоть double разделить на ноль - все равно та же ошибка вылезет. Вопрос только в том, почему  MarketInfo (SubSymbol, MODE_ASK) возвращает "0" и именно на Робофорексе, на Альпари и Fxopen - норма... 

 

koljanich:

Вопрос только в том, почему  MarketInfo (SubSymbol, MODE_ASK) возвращает "0"

потому.

что обычно дают подготовленный скрипт. и просят других запустить у себя и показать результаты.

вы же пытаетесь заставить нас гадать. про ваш код.
 
koljanich:



1.0/MarketInfo (SubSymbol, MODE_ASK)  : единицу хоть int, хоть double разделить на ноль - все равно та же ошибка вылезет. Вопрос только в том, почему  MarketInfo (SubSymbol, MODE_ASK) возвращает "0" и именно на Робофорексе, на Альпари и Fxopen - норма... 

Проверьте значение SubSymbol
 

Вот исходник, кторый показывает 0,0

//+------------------------------------------------------------------+
//|                                                         Test.mq4 |
//|                                        Copyright 2012, NNNN |
//|                                                                  |
//+------------------------------------------------------------------+
#property copyright "Copyright 2012, NNNN"
#property link      ""
extern string SubSymbol = "USDCHF";
extern double  Lot1          =0.1;
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
//----
    
  double Ask1,Ask2,Bid1,Bid2,ValutWeight;
  
  
//----
Ask1=NormalizeDouble(Ask,Digits);
Ask2=NormalizeDouble(MarketInfo(SubSymbol,MODE_ASK),Digits);
Bid1=NormalizeDouble(Bid,Digits);
Bid2=NormalizeDouble(MarketInfo(SubSymbol,MODE_BID),Digits);
if (Ask2!=0) ValutWeight=NormalizeDouble (Lot1*(Ask/Ask2), 2);
//ValutWeight=NormalizeDouble((1/MarketInfo(SubSymbol,MODE_ASK)*Lot1)/(1/Ask),2);

Comment ("Ask2: ",Ask2,"\n","ValutWeight: ", ValutWeight);

//----
   return(0);
  }
//+------------------------------------------------------------------+
 
koljanich:

Вот исходник, кторый показывает 0,0

 


Да не будет тестер работать  на двух разных инструментах. Demo, Real - да. Ваш SubSymbol В тестере никак не пройдет.
 
koljanich:

Вот исходник, кторый показывает 0,0

 

Перенесите код на МТ 5 , там мультивалютники можно тестировать, в мт 4 только демо или реал , для которых нужно много времени ......
Причина обращения: