Пытаюсь обновить версию советника и получаю ошибку.
Тот же советник в тестере стратегий.
Паралельно пишу советники и для MT4, там все ОК. Код у советников для 4 и 5 одинаковый, отличаются только include файлом (они разные для 4 и 5).
Последний раз данный советник обновлял в январе - было все ОК.
Версия программы - MetaTrader 5 x64 build 2025 started (MetaQuotes Software Corp.)
- Terminal Windows 10 (build 14393) x64, IE 11, UAC, Intel Celeron N2815 @ 1.86GHz, Memory: 1866 / 3967 Mb, Disk: 5 / 35 Gb, GMT+3
Притворись идиотом и поставьте депозит 1$ или лот 100500 и проверьте будут-ли торговые операции. И будут-ли при этом оповещения что только идиот может поставить такие параметры.
Притворись идиотом и поставьте депозит 1$ или лот 100500 и проверьте будут-ли торговые операции. И будут-ли при этом оповещения что только идиот может поставить такие параметры.
Такая же проблема. Пробовал - не помогает ). С 13 апреля не могу обновиться. Если делать с проверкой всего и вся - выходит одна надпись по всем символам "trehe are no trading operations". Без проверок вылетает ошибка - не достаточно средств для открытия позиции. А версия для МТ4, так же как и у автора ТС обновилась без проблем.
По рисунку видно минимальный лот - 2000, баланс- 10000, явно не хватает открыться, хоть ставь проверку что денег не хватает, хоть не ставь. Все равно проверку не проходит.
И что делать в таких случаях?
Конечно сделок не будет. А какие должны быть оповещения? У меня только в OnInit если размер лота не входит в диапазон SYMBOL_VOLUME_MIN и SYMBOL_VOLUME_MAX, тогда ошибка инициализации INIT_PARAMETERS_INCORRECT
Конечно сделок не будет. А какие должны быть оповещения? У меня только в OnInit если размер лота не входит в диапазон SYMBOL_VOLUME_MIN и SYMBOL_VOLUME_MAX, тогда ошибка инициализации INIT_PARAMETERS_INCORRECT
Помню, у меня примерно так же было тогда еще модераторы проверяли после авто. проверки. В случае некорректных параметров тоже самое OnInit завершал с кодом INIT_PARAMETERS_INCORRECT. И авто. проверка выдавала такую же ошибку, что нет торговых операции. Так вот, тогда модератор мне посоветовал, не завершать OnInit() с этим кодом, а просто выдать Alert.
Наверно раз в месяц, кто-то поднимает этот вопрос. Уже который раз.
Все дело в том, что при торговле ( в реале) не только размер баланса может меняться, но и размер лота.
И во время тестирования размер депозита (от 1 до 10000000) или лота(от 1000000 до 0.01) могут меняться.
И поэтому эти проверки надо делать не один раз в OnInit, а постоянно, в цикле (например в OnTick).
И чтобы не было переполнение журнала, надо предупреждение (Print Message или Alert) выводить только один раз.
Конечно сделок не будет. А какие должны быть оповещения? У меня только в OnInit если размер лота не входит в диапазон SYMBOL_VOLUME_MIN и SYMBOL_VOLUME_MAX, тогда ошибка инициализации INIT_PARAMETERS_INCORRECT
Я понимаю что очень сложно притвориться идиотом, но это умение иногда помогает. Попробуйте ещё раз. Вы поставили советник, на счёте 1$, поставили лот 100500 и ждёте ... Ждёте день, второй, третий... потом начинаете негодовать, "За что-же я заплатил. Почему не работает эта хрень?" и никто ничего не сообщает, никто не хочет сказать типа "Ты идиот... С таким депозитом нельзя работать на рынке форекс. Только идиот может поставить лот 100500"... Вот как-то так.
Наверно раз в месяц, кто-то поднимает этот вопрос. Уже который раз.
Все дело в том, что при торговле ( в реале) не только размер баланса может меняться, но и размер лота.
И во время тестирования размер депозита (от 1 до 10000000) или лота(от 1000000 до 0.01) могут меняться.
И поэтому эти проверки надо делать не один раз в OnInit, а постоянно, в цикле (например в OnTick).
И чтобы не было переполнение журнала, надо предупреждение (Print Message или Alert) выводить только один раз.
Предельно простой код - и тот не может пройти валидацию. Вроде, перечисленным Вами условиям удовлетворяет.
void OnTick() { ENUM_POSITION_TYPE PosType=POSITION_TYPE_SELL; MqlTradeRequest request; MqlTradeResult result; MqlTradeCheckResult check; ZeroMemory(request); ZeroMemory(result); ZeroMemory(check); long digit; double point,Bid; SymbolInfoDouble(_Symbol,SYMBOL_BID,Bid); request.type = ORDER_TYPE_SELL; request.price = Bid; request.action = TRADE_ACTION_DEAL; request.symbol = _Symbol; request.volume = SymbolInfoDouble(_Symbol,SYMBOL_VOLUME_MIN); request.sl=0; request.tp=0; request.deviation=10; request.magic=55555; request.comment=NULL; request.type_filling=0; if(PositionsTotal()==0 &&CheckMoneyForTrade(_Symbol,SymbolInfoDouble(_Symbol,SYMBOL_VOLUME_MIN),ORDER_TYPE_SELL)==true ){ OrderSend(request,result); }else{ ExtExpert.Deinit(); return; } } bool CheckMoneyForTrade(string symb,double lots,ENUM_ORDER_TYPE type) { //--- получим цену открытия MqlTick mqltick; SymbolInfoTick(symb,mqltick); double price=mqltick.ask; if(type==ORDER_TYPE_SELL) price=mqltick.bid; //--- значения необходимой и свободной маржи double margin,free_margin=AccountInfoDouble(ACCOUNT_MARGIN_FREE); //--- вызовем функцию проверки if(!OrderCalcMargin(type,symb,lots,price,margin)) { //--- что-то пошло не так, сообщим и вернем false Print("Error in ",__FUNCTION__," code=",GetLastError()); return(false); } //--- если не хватает средств на проведение операции if(margin>free_margin) { //--- сообщим об ошибке и вернем false Print("Not enough money for ",EnumToString(type)," ",lots," ",symb," Error code=",GetLastError()); return(false); } //--- проверка прошла успешно return(true); }с проверкой на деньги выдает - there are no trading operations, без проверки - not enough money
Наверно раз в месяц, кто-то поднимает этот вопрос. Уже который раз.
Все дело в том, что при торговле ( в реале) не только размер баланса может меняться, но и размер лота.
И во время тестирования размер депозита (от 1 до 10000000) или лота(от 1000000 до 0.01) могут меняться.
И поэтому эти проверки надо делать не один раз в OnInit, а постоянно, в цикле (например в OnTick).
И чтобы не было переполнение журнала, надо предупреждение (Print Message или Alert) выводить только один раз.
Данные проверки (LotMin, LotMax, LotNormalizeStep, check balance, OrderCheck) осуществляются каждый раз при открытий позиций. А в OnInit проверка только лота. Логику проверки баланса в OnInit не представляю.
PS: Alert не спасает от ошибок Валидатора ((((((((((
Данные проверки (LotMin, LotMax, LotNormalizeStep, check balance, OrderCheck) осуществляются каждый раз при открытий позиций. А в OnInit проверка только лота. Логику проверки баланса в OnInit не представляю.
PS: Alert не спасает от ошибок Валидатора ((((((((((
У Валидатора нет ошибок :)
Валидатор как-раз показывает, что в предоставленном коде
- нет полноценных проверок
- нет обработки ошибочных ситуаций
У Валидатора нет ошибок :)
Валидатор как-раз показывает, что в предоставленном коде
- нет полноценных проверок
- нет обработки ошибочных ситуаций
))

- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Пытаюсь обновить версию советника и получаю ошибку.
Тот же советник в тестере стратегий.
Паралельно пишу советники и для MT4, там все ОК. Код у советников для 4 и 5 одинаковый, отличаются только include файлом (они разные для 4 и 5).
Последний раз данный советник обновлял в январе - было все ОК.
Версия программы - MetaTrader 5 x64 build 2025 started (MetaQuotes Software Corp.)
- Terminal Windows 10 (build 14393) x64, IE 11, UAC, Intel Celeron N2815 @ 1.86GHz, Memory: 1866 / 3967 Mb, Disk: 5 / 35 Gb, GMT+3