Дабы помочь тем, кто столкнулся с тем же, оставлю комментарий.
Если у вас в функции подсчета лота есть проверка на минимальный и максимальный лот, то перед отправкой ордера сделайте доп. проверку.
Пример. Вот функция динамичного лота
//+------------------------------------------------------------------------+//+- Расчет лота в зависимости от расстояния до 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");
}
Всем привет, кто-нибудь, пожалуйста, объясните, почему данный код проходит валидацию с ошибками:
Отчет тестирования версии 1.0
Состояние тестирования: Тестирование завершилось с ошибками
Количество ошибок1
Запущен2018.12.03 11:14:37
Завершено2018.12.03 11:17:48
ТипЭксперт
Логически-торговая составляющая - не суть.
Уже подымался вопрос, нельзя делать жесткое отсекание некооректных параметров. Вы пытаетесь открыть 0.01 лота, в то время как в автоматической валидации минимальный лот 0.1 Но ваша проверка просто отсекает такой вариант и не отправляет торговый приказ, в то время как следует отправить торговый приказ обьемом 0.1.
Nikita Chernyshov:
Если она не соответствует ограничениям, пусть сова ее выпрямит.
Что и требовалось доказать.
Так же следует поступать и с остальными проверками.
Уже подымался вопрос, нельзя делать жесткое отсекание некооректных параметров. Вы пытаетесь открыть 0.01 лота, в то время как в автоматической валидации минимальный лот 0.1 Но ваша проверка просто отсекает такой вариант и не отправляет торговый приказ, в то время как следует отправить торговый приказ обьемом 0.1.
Что и требовалось доказать.
Так же следует поступать и с остальными проверками.
Моя проверка отсекает некорректный параметр и выпрямляет согласно требованиям, отправляя уже корректный объем в ордер, который соответствует нормам сервера. При корректном объеме по всем правилам ордер открывается.
Дабы помочь тем, кто столкнулся с тем же, оставлю комментарий.
Если у вас в функции подсчета лота есть проверка на минимальный и максимальный лот, то перед отправкой ордера сделайте доп. проверку.
Пример. Вот функция динамичного лота
В ней есть проверки на минимальный и максимальный лот.
Но у меня помимо динамичного лота есть еще и фиксированный. Пользователь сам выбирает. В любом случае, что динамичный, что фиксированной у меня сводятся в одну переменную, которая передает в OrderSend(). К примеру, "givelot".
Так вот перед отправкой ордера проверьте эту переменную еще раз. Если она не соответствует ограничениям, пусть сова ее выпрямит. В моем примеру она поставила минимально допустимый лот.
Всем привет, кто-нибудь, пожалуйста, объясните, почему данный код проходит валидацию с ошибками:
Состояние тестирования: Тестирование завершилось с ошибками
Логически-торговая составляющая - не суть.
Уже подымался вопрос, нельзя делать жесткое отсекание некооректных параметров.
Вы пытаетесь открыть 0.01 лота, в то время как в автоматической валидации минимальный лот 0.1
Но ваша проверка просто отсекает такой вариант и не отправляет торговый приказ, в то время как следует отправить торговый приказ обьемом 0.1.
Если она не соответствует ограничениям, пусть сова ее выпрямит.
Что и требовалось доказать.
Так же следует поступать и с остальными проверками.
Уже подымался вопрос, нельзя делать жесткое отсекание некооректных параметров.
Вы пытаетесь открыть 0.01 лота, в то время как в автоматической валидации минимальный лот 0.1
Но ваша проверка просто отсекает такой вариант и не отправляет торговый приказ, в то время как следует отправить торговый приказ обьемом 0.1.
Что и требовалось доказать.
Так же следует поступать и с остальными проверками.
Моя проверка отсекает некорректный параметр и выпрямляет согласно требованиям, отправляя уже корректный объем в ордер, который соответствует нормам сервера. При корректном объеме по всем правилам ордер открывается.