Автоматическая валидация сводит с ума - страница 3

 

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

Если у вас в функции подсчета лота есть проверка на минимальный и максимальный лот, то перед отправкой ордера сделайте доп. проверку.

Пример. Вот функция динамичного лота

//+------------------------------------------------------------------------+
//+- Расчет лота в зависимости от расстояния до StopLoss (c) BeerGod 2015 -+
//+------------------------------------------------------------------------+
double LotSize()// SL-StopLoss MR-MaxRisk
  {
   if(StopL==0) 
     {
     Print("StopLoss = 0,impossible to count the lot");
     return(0); // исключение деления на ноль
     }
     
   double Free    =AccountBalance();
   double LotVal  =MarketInfo(Symbol(),MODE_TICKVALUE);//стоимость 1 пункта 1 лота
   double Min_Lot =MarketInfo(Symbol(),MODE_MINLOT);
   double Max_Lot =MarketInfo(Symbol(),MODE_MAXLOT);
   double Step    =MarketInfo(Symbol(),MODE_LOTSTEP);
   double Lot     =MathFloor((Free*percent/100)/(StopL*LotVal)/Step)*Step;
   if(Lot<Min_Lot)  Lot=Min_Lot;
   if(Lot>Max_Lot)  Lot=Max_Lot;
   return(Lot);
  }

В ней есть проверки на минимальный и максимальный лот.

Но у меня помимо динамичного лота есть еще и фиксированный. Пользователь сам выбирает. В любом случае, что динамичный, что фиксированной у меня сводятся в одну переменную, которая передает в OrderSend(). К примеру, "givelot".

Так вот перед отправкой ордера проверьте эту переменную еще раз. Если она не соответствует ограничениям, пусть сова ее выпрямит. В моем примеру она поставила минимально допустимый лот.


                     double min_lot =MarketInfo(Symbol(),MODE_MINLOT);
                     double max_lot =MarketInfo(Symbol(),MODE_MAXLOT);
                     if(givelot < min_lot || givelot > max_lot)
                       {
                        givelot = min_lot;
                        Alert("Lot exceeded the minimum or maximum allowable");
                       }
 
Nikita Chernyshov:

Всем привет, кто-нибудь, пожалуйста, объясните, почему данный код проходит валидацию с ошибками:


Отчет тестирования версии 1.0

Состояние тестирования: Тестирование завершилось с ошибками

  • Количество ошибок1
  • Запущен2018.12.03 11:14:37
  • Завершено2018.12.03 11:17:48
  • ТипЭксперт

Логически-торговая составляющая - не суть.

Уже подымался вопрос, нельзя делать жесткое отсекание некооректных параметров.
Вы пытаетесь открыть 0.01 лота, в то время как в автоматической валидации минимальный лот 0.1
Но ваша проверка просто отсекает такой вариант и не отправляет торговый приказ, в то время как следует отправить торговый приказ обьемом 0.1.

Nikita Chernyshov:

Если она не соответствует ограничениям, пусть сова ее выпрямит. 

Что и требовалось доказать.

Так же следует поступать и с остальными проверками.

 
Nikolay Khrushchev:

Уже подымался вопрос, нельзя делать жесткое отсекание некооректных параметров.
Вы пытаетесь открыть 0.01 лота, в то время как в автоматической валидации минимальный лот 0.1
Но ваша проверка просто отсекает такой вариант и не отправляет торговый приказ, в то время как следует отправить торговый приказ обьемом 0.1.

Что и требовалось доказать.

Так же следует поступать и с остальными проверками.

Моя проверка отсекает некорректный параметр и выпрямляет согласно требованиям, отправляя уже корректный объем в ордер, который соответствует нормам сервера. При корректном объеме по всем правилам ордер открывается.

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