Проверка робота для Маркета

 

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

При проверки робота получаю ошибку "not enough money" и рекомендацию по исправлению. Так вот, в коде проверка на FreeMargin имеется, как говорит документация.
Но робот все-равно спотыкается на этот момент.

Кто знает, как исправить? Вот скрин ошибки и часть кода


 
Roman Starinskij:

Кто знает, как исправить? Вот скрин ошибки и часть кода

Проверка попросту не сделана. Функция вызвана и на том все. В документации все описано и пример использования есть.

AccountFreeMarginCheck

Возвращает размер свободных средств, которые останутся после открытия указанного ордера по текущей цене на текущем счете.

double  AccountFreeMarginCheck(
   string  symbol,     // символ
   int     cmd,        // торговая операция
   double  volume      // количество лотов
   );

 
Ihor Herasko:

Проверка попросту не сделана. Функция вызвана и на том все. В документации все описано и пример использования есть.

AccountFreeMarginCheck

Возвращает размер свободных средств, которые останутся после открытия указанного ордера по текущей цене на текущем счете.

double  AccountFreeMarginCheck(
   string  symbol,     // символ
   int     cmd,        // торговая операция
   double  volume      // количество лотов
   );

Благодарю за помощь, действительно упустил это из документации.
Доработал код

 if (AccountFreeMarginCheck(Symbol(), OP_BUY, lot) && GetLastError() != 134)
   result = OrderSend(Symbol(), OP_BUY, lot, price, orderSlippage(), sl, tp, systemGetName(), SystemMagic, 0, clrBlue);

Жду результата от тестера :)

 
Roman Starinskij:

Благодарю за помощь, действительно упустил это из документации.
Доработал код

 if (AccountFreeMarginCheck(Symbol(), OP_BUY, lot) && GetLastError() != 134)
   result = OrderSend(Symbol(), OP_BUY, lot, price, orderSlippage(), sl, tp, systemGetName(), SystemMagic, 0, clrBlue);

Жду результата от тестера :)

Код лучше не стал, всё так же функция только вызывается, а с результатом вызова ничего не делается. Хоть сравните возвращаемое значение с какой-то суммой, чтоли...

 
Roman Starinskij:

Благодарю за помощь, действительно упустил это из документации.
Доработал код

Жду результата от тестера :)

AccountFreeMarginCheck возвращает не булево значение, а double. Вы же результат работы функции используете в операторе if.  При любом значении функции AccountFreeMarginCheck отличном от нуля результат при неявном преобразовании типов будет true. 

Более правильным будет написать:

if ((AccountFreeMarginCheck(Symbol(), OP_BUY, lot)>0) && GetLastError() != 134)

....

Теперь понятно почему многие на сервис маркет жалуются.

 
Vitalii Ananev:

AccountFreeMarginCheck возвращает не булево значение, а double. Вы же результат работы функции используете в операторе if.  При любом значении функции AccountFreeMarginCheck отличном от нуля результат при неявном преобразовании типов будет true. 

Более правильным будет написать:

....

Теперь понятно почему многие на сервис маркет жалуются.

Жалуются не только те, кто не может пройти проверку из-за невнимательности. Жалуются также и те, кто сделал код 2 недели назад, он прошел проверку, с тех пор реально мало что изменилось, но новая версия проверку пройти уже не может. И все изменения в новой версии касаются 2 строк и не касаются определения объема!! Со вчерашнего дня вижу ошибку no trading operations, может праздники, и проверка пока отключена?!
 
Evgeniy Scherbina:
Жалуются не только те, кто не может пройти проверку из-за невнимательности. Жалуются также и те, кто сделал код 2 недели назад, он прошел проверку, с тех пор реально мало что изменилось, но новая версия проверку пройти уже не может. И все изменения в новой версии касаются 2 строк и не касаются определения объема!! Со вчерашнего дня вижу ошибку no trading operations, может праздники, и проверка пока отключена?!

Я имел в виду жалобы покупателей. Покупают продукты написанные в "индусском стиле" содержащие вот такие глупые логические ошибки (пример которой можно увидеть выше) из за того что автор или вообще не умеет программировать и не видит разницы между процедурой и функцией или еще только начал изучать язык. Потом на форуме пишут, что маркет превратился в помойку.