Вопрос по openbuy.mq4 из учебника по MQL4

 
Добрый день. При перелистывании учебника по MQL4 наткнулся на код (в конце страницы):
//--------------------------------------------------------------------
// openbuy.mq4 
// Предназначен для использования в качестве примера в учебнике MQL4.
//--------------------------------------------------------------- 1 --
int start()                                     // Спец.функция start
  {
   int Dist_SL =10;                             // Заданный SL (pt)
   int Dist_TP =3;                              // Заданный TP (pt)
   double Prots=0.35;                           // Процент своб. ср.
   string Symb=Symbol();                        // Финанс. инструмент
//--------------------------------------------------------------- 2 --
   while(true)                                  // Цикл открытия орд.
     {
      int Min_Dist=MarketInfo(Symb,MODE_STOPLEVEL);// Мин. дистанция
      double Min_Lot=MarketInfo(Symb,MODE_MINLOT);// Мин. размер лота
      double Step   =MarketInfo(Symb,MODE_LOTSTEP);//Шаг изменен лотов
      double Free   =AccountFreeMargin();       // Свободн средства
      double One_Lot=MarketInfo(Symb,MODE_MARGINREQUIRED);//Стоим.1 лота   <------------ Считаем стоимость одного лота, используя текущую цену
      //--------------------------------------------------------- 3 --
      double Lot=MathFloor(Free*Prots/One_Lot/Step)*Step;// Лоты
      if (Lot < Min_Lot)                        // Если меньше допуст
        {
         Alert(" Не хватает денег на ", Min_Lot," лотов");
         break;                                 // Выход из цикла
        }
      //--------------------------------------------------------- 4 --
      if (Dist_SL < Min_Dist)                   // Если меньше допуст.
        {
         Dist_SL=Min_Dist;                      // Установим допуст.
         Alert(" Увеличена дистанция SL = ",Dist_SL," pt");
        }
      double SL=Bid - Dist_SL*Point;            // Заявленная цена SL
      //--------------------------------------------------------- 5 --
      if (Dist_TP < Min_Dist)                   // Если меньше допуст.
        {
         Dist_TP=Min_Dist;                      // Установим допуст.
         Alert(" Увеличена дистанция TP = ",Dist_TP," pt");
        }
      double TP=Bid + Dist_TP*Point;            // Заявленная цена ТР
      //--------------------------------------------------------- 6 --
      Alert("Торговый приказ отправлен на сервер. Ожидание ответа..");
      int ticket=OrderSend(Symb, OP_BUY, Lot, Ask, 2, SL, TP);               // <---- покупаем насчитанный объём уже _по другой_ цене. 
      //--------------------------------------------------------- 7 --
      if (ticket>0)                             // Получилось :)
        {
         Alert ("Открыт ордер Buy ",ticket);
         break;                                 // Выход из цикла
        }
      //--------------------------------------------------------- 8 --
      int Error=GetLastError();                 // Не получилось :(
      switch(Error)                             // Преодолимые ошибки
        {
         case 135:Alert("Цена изменилась. Пробуем ещё раз..");
            RefreshRates();                     // Обновим данные
            continue;                           // На след. итерацию
         case 136:Alert("Нет цен. Ждём новый тик..");
            while(RefreshRates()==false)        // До нового тика
               Sleep(1);                        // Задержка в цикле
            continue;                           // На след. итерацию
         case 146:Alert("Подсистема торговли занята. Пробуем ещё..");
            Sleep(500);                         // Простое решение
            RefreshRates();                     // Обновим данные
            continue;                           // На след. итерацию
        }
      switch(Error)                             // Критические ошибки
        {
         case 2 : Alert("Общая ошибка.");
            break;                              // Выход из switch
         case 5 : Alert("Старая версия клиентского терминала.");
            break;                              // Выход из switch
         case 64: Alert("Счет заблокирован.");
            break;                              // Выход из switch
         case 133:Alert("Торговля запрещена");
            break;                              // Выход из switch
         default: Alert("Возникла ошибка ",Error);// Другие варианты   
        }
      break;                                    // Выход из цикла
     }
//--------------------------------------------------------------- 9 --
   Alert ("Скрипт закончил работу -----------------------------");
   return;                                      // Выход из start()
  }
//-------------------------------------------------------------- 10 --

В конце _второго блока_ мы подсчитываем стоимость одного лота для покупки.
В начале _третьего блока_ мы считаем объем покупки, чтобы потратить 35 процентов свободной наличности, по одной цене (текущей).
А при создании отложенного ордера в _шестом блоке_ мы же используем уже другую цену для покупки объёма, который мы получили ранее.
Получается, что при срабатывании ордера, мы потратим не 35 процентов, а больше.

Верно ли я рассуждаю? Верно ли, что в данном коде зарыта некорректность? Если я ошибаюсь, то укажите, пожалуйста, на изъян в моих рассуждениях.
Причина обращения: