Обсуждение статьи "Какие проверки должен пройти торговый робот перед публикацией в Маркете"
Вот эта часть вызывает вопросы:
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,equity=AccountInfoDouble(ACCOUNT_EQUITY); //--- вызовем функцию проверки if(!OrderCalcMargin(type,symb,lots,price,margin)) { //--- что-то пошло не так, сообщим и вернем false Print("Error in ",__FUNCTION__," code=",GetLastError()); return(false); } //--- если не хватает средств на проведение операции if(margin>equity) { //--- сообщим об ошибке и вернем false Print("Not enough money for ",EnumToString(type)," ",lots," ",symb," Error code=",GetLastError()); return(false); } //--- проверка прошла успешно return(true); }
Почему необходимая маржа сравнивается с Equity а не с FreeMargin?
Вот эта часть вызывает вопросы:
Почему необходимая маржа сравнивается с Equity а не с FreeMargin?
Благодарю за статью, но пока так и не смог получить рабочего результата с
bool CheckMoneyForTrade(string symb, double lots,int type) { double free_margin=AccountFreeMarginCheck(symb,lots,type); //-- если денег не хватает if(free_margin<0) { string oper=(type==OP_BUY)? "Buy":"Sell"; Print("Not enough money for ", oper," ",lots, " ", symb, " Error code=",GetLastError()); return(false); } //-- проверка прошла успешно return(true); }
Любые вариации AccountFreeMarginCheck выдают ошибки, советник не возможно вообще для маркета настроить, пытался у пользователей узнать, потом статья появилась, нифига, что так, что сяк
что добавляй в условие GetLastError()!=134 что используй выше приведенную функцию, просто заваливает ошибками
выше приведенная функция умудряется заваливать вот таким
2016.07.25 15:15:54.200 2016.01.04 19:59 RSI_Grabber.1.1 XAUUSD,H1: invalid lots amount for FreeMarginCheck function 2016.07.25 15:15:54.200 2016.01.04 19:59 RSI_Grabber.1.1 XAUUSD,H1: Not enough money for Buy 0.1 XAUUSD Error code=4051
могу ошибаться но 0.1 это нормальный лот указанный руками. MODE_MINLOT по валютной паре 0.01
Но если честно чем дальше ковыряюсь, тем меньше понимаю в чем проблема(-ы).
возможно лот нужно нормализовать в данной функции, чтоб не было Инвалида.
ну а дальше функция пишет о том, что собственно нет денег, при этом она не посылает запрос на сервер для открытия позиций.Что удовлетворяет правилам маркета.
с недавних времен года 2 назад стал использовать такую инструкцию:
double margin=EMPTY_VALUE; margin=AccountFreeMarginCheck(sy,op,ll); if(margin>0) { ticket=OrderSend(sy,op,ll,NormalizeDouble(pp,MarketInfo(sy,MODE_DIGITS)),Slippage,NormalizeDouble(sl,MarketInfo(sy,MODE_DIGITS)),NormalizeDouble(tp,MarketInfo(sy,MODE_DIGITS)), coomment,mn,0,clOpen); } else Print("Not Enought Money Margin Required"+(string)margin);
Собственно все работает.
при открытии сделки - советник просто возвращает строку Print("Not Enought Money Margin Required"+(string)margin);
Советник проходит проверку в маркете, все довольны
Я использую такой вариант для точного расчета, только он мне помог решить данную проблему. Дальше уже можно свободно сравнивать.
Laverage = AccountInfoInteger(ACCOUNT_LEVERAGE); //Плече RazmerKontrakta=LotSize*MarketInfo(Symbol(),MODE_LOTSIZE); //TradeVol*1 lot MargaB=(RazmerKontrakta/Laverage)*NormalizeDouble(MarketInfo(Symbol(),MODE_BID),Digits()); MargaS=(RazmerKontrakta/Laverage)*NormalizeDouble(MarketInfo(Symbol(),MODE_ASK),Digits()); FreeMargin = AccountInfoDouble(ACCOUNT_MARGIN_FREE);
Пол-года назад тестировал один советник из Маркета, он в тестере валился на вторые-третьи сутки с ошибкой деления на ноль. Советник с несколькими десятками отзывов, то есть его покупают. И несколько сотен комментов.
Причем многие пишут, что есть эта проблема и советуют друг другу перезапускать раз в сутки!!!
Это получается, что строгость правил в Маркете компенсируется необязательностью их выполнения?
ЗЫ: название советника не помню, но топовый и недешевый. Какой-то скальпер.
Уважаемый автор спасибо за статью.
Есть маленькая ошибочка в коде для MQL4, если позволите. Для функции CheckMoneyForTrade:
double free_margin=AccountFreeMarginCheck(symb,lots,type);
нужно:
double free_margin=AccountFreeMarginCheck(symb,type,lots);
Спасибо, статья очень нужная.
Мне не очень понятно в подтеме "Ограничение на количество лотов по одному символу" приведен дважды код функции PositionVolume().
Чуть ниже описание функции NewOrderAllowedVolume() и в ней вызов:
double orders_volume_on_symbol=PendingsVolume(symbol);
Только описания функции PendingsVolume() нигде в статье не видно.
Если вместо функции PendingsVolume() приведена по ошибке повторно функция PositionVolume(), исправьте, пожалуйста.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Опубликована статья Какие проверки должен пройти торговый робот перед публикацией в Маркете:
Все продукты Маркета перед публикацией проходят обязательную предварительную проверку для обеспечения единого стандарта качества. В этой статье мы расскажем о наиболее частых ошибках, которые допускают разработчики в своих технических индикаторах и торговых роботах. А также покажем как самостоятельно проверить свой продукт перед отправкой в Маркет.
Как быстро выловить и исправить ошибки в торговом роботе
Встроенный в платформу тестер стратегий позволяет не только проверять на истории торговые системы, но также и выявлять логические и алгоритмические ошибки, допущенные при написании торгового робота. Во время тестирования все сообщения о торговых операциях и выявленных ошибках выводятся в Журнал тестера. Эти сообщения для анализа удобно изучать в специальном Просмотрщике логов, который вызывается командой контекстного меню.
Откройте после тестирования советника Просмотрщик и включите режим "Только ошибки", как показано на рисунке. Если в вашем торговом роботе есть ошибки, вы сразу же их увидите. Если же ошибки не были обнаружены с первого раза, проведите серию тестирований со сменой инструментов/таймфреймов/входных параметров и разными значениями начального депозита. 99% процентов ошибок вывляются этими простыми приемами, и о них мы расскажем вам в этой статье.
Для детального изучения выявленной ошибки используйте в MetaEditor Отладку на истории — так в режиме визуального тестирования вы сможете наблюдать не только графики цен и значения используемых индикаторов, но и проследить на каждом тике значения каждой переменной программы. Это позволит вам отладить вашу торговую стратегию без необходимости тратить недели в режиме реального времени.Автор: MetaQuotes Software Corp.