Помогите. Вопрос к знатокам выполнения OrderSend при расчете с использованием глобальных переменных

 

Уважаемые господа, может кто знает откуда или из-за чего возникает такой эффект (ошибка 130). Есть цикл в советнике по подготовке необходимых данных для отправки отложенного ордера. 


  int perebor;

 
  //-------
int init()
  {
  return(0);
  }
int deinit()
  {
  return(0);
  }
int start()
  {
//----
  static int old_bars = 0; // запомним число известных баров  
  if (old_bars != iBars("EURJPY",PERIOD_M1)) // если получен новый бар 
  {
  Sleep(15000); //-15 сек  
  for(int i = 100; i <= 110; i++) // здесь усьанавливается началное и кончное значения шагов
   
  {  
  perebor=i;
  ord02();
  } //конец цикла
  Print("ордера проверены");

в функции ord02() производится расчет переменных на основе уже полученной perebor(i) и нижеприведенных переменных

string koment = perebor;
int MagName = perebor;


double prof = NormalizeDouble(GlobalVariableGet(perebor+"prof")*100,0); 
  mn=NormalizeDouble(GlobalVariableGet(perebor+"n")*100,0);
  mx=NormalizeDouble(GlobalVariableGet(perebor+"x")*100,0);
  stop=NormalizeDouble(perebor,0);

vvv=0.1;

tip=GlobalVariableGet("tip");


изначально глобальные пеерменные вводятся с 2 мя знаками после запятой 120.08 или 120.80

в меню глобальных переменных выглядят по разному а именно: 120.08 и 120.8

участвуют в расчетах  примерно так

zena=mn+prof-stop;
  sl=NormalizeDouble(zena,0)-stop;
  tp=NormalizeDouble(zena,0)+prof;

отсылается ордер в таком виде 


  OrderSend("EURJPY",tip,vvv,NormalizeDouble(zena*Point,Digits),0,NormalizeDouble(sl*Point,Digits),NormalizeDouble(tp*Point,Digits),koment,MagName,0,CLR_NONE);

Так вот: во время выполнения в течение одного цикла,  то есть подряд ордера одного и того же типа могут  выполнится и не выполнится. 

Поясняю: например при выставлении отложенного ордера BuyLimit (например должны выполнится i= 100, 105, 106, и 109)  ордера с номерами 100,105, и 109 выполнятся а ордер с номером 106 нет или  ордера 105, 106, выполняться а 109 и 100 не выполнятся.



Сам думаю что возможно это как-то связано с нормализацией данных до 2 знаков после запятой, Однако в различных вариантах пробовал использовать как прямое указание на сокращение NormalizeDouble(zena,0) или NormalizeDouble(zena,2) так и через Digits. 

Вот никак не могу понять где я ошибаюсь.  Да, других вычислений для выставления ордера не провожу.

 
https://forum.mql4.com/ru/22157
 
satop >>:
https://forum.mql4.com/ru/22157

Огромное спасибо это все объясняет я теперь буду составлять программы с учетом изложенного. Для начала предполагаю избавиться максимально от использования чисел с плавающей запятой до момента отсылки или модификации ордера (этот вопрос я задавал про выставление, а фактичиски это чудо творится и при выставлении и при модификации ордеров). Будем боротся. Еще раз огромное спасибо.

Причина обращения: