![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
спасибо.
Билд 200, демо Альпари, инструмент USDJPY.
Суть проблемы: как-то кривовато советник работал.
Стал ииследовать проблему. На третий день, текст программы советника свёлся к бесконечному циклу, в котором с задержками в 5 секунд открывается и закрывается позиция. Этот "советник" может час работать нормально, а потом минут 10-15 лезут ошибки 129 и 138. Потом снова всё впорядке.
Ошибка 129 - invalid price
Ошибка 138 - requote
В общем, в конце концов вывел в коммент значения цен:
Comment(DoubleToStr(Ask,Digits)," ",DoubleToStr(MarketInfo(Symbol(),MODE_ASK),Digits));
И оказалось, что значения Ask и MarketInfo(Symbol(),MODE_ASK) отличаются от 1 до 4 пунктов. При этом линии Ask на графике соответсвует только MarketInfo(Symbol(),MODE_ASK). А, поскольку, в операторе OrderSend() используется именно Ask, вот советник и глючит. С Bid'ом та же ерунда. И поэтому при закрытии позиции тоже лезет ошибка 129.
Но, ещё раз обращаю внимание, Ask и MarketInfo() в равных условиях выдают разные значения.
За эксперта, который бездумно открывает и закрывает сделки каждые 5 секунд в зацикленном состоянии любой брокер будет применять максимально жесткие действия. И никакие обоснования "я же тестировал эксперта! это мое право, да как вы смеете?" не пройдут.
Сколько раз повторять - думайте над тем, что творите. Вы же внаглую плюете на брокера.
Соответственно, отношение к вам будет аналогичным.
Вставил в двух местах RefreshRates()
За эксперта, который бездумно открывает и закрывает сделки каждые 5 секунд в зацикленном состоянии любой брокер будет применять максимально жесткие действия. И никакие обоснования "я же тестировал эксперта! это мое право, да как вы смеете?" не пройдут.
Сколько раз повторять - думайте над тем, что творите. Вы же внаглую плюете на брокера.
Соответственно, отношение к вам будет аналогичным.
Ренат, а Вы вообще-то посты выше текста программы смотрели? В моем советнике (который, кстати, и стоит-то на демо) никаких циклов нет. Он как-то на днях позицию не открыл и выдал сообщение об ошибке 129. А приведённый выше пример нужен всего лишь для того (и сделан исключительно только для этого), чтобы Вы же и увидели побыстрее своими глазами эту же ситуацию, описанную ещё выше. А за брокеров Вы можете быть спокойны. Я все правила знаю. И чаще нескольких раз в месяц я их не беспокою.
Вставил в двух местах RefreshRates()
Да в том-то и шило. RefreshRates() вставлял, не помогло. Но скорее всего, решил бы проблему с помощью этого же RefreshRates(), если бы MarketInfo() тоже врал. Ведь не врёт. Цена во время цикла дёргается. Значение Аск стоит, как припаянное, а значение из MarketInfo() меняется. Вот, собственно, поэтому и родился вопрос. Кстати, проверил ещё Close[0] и получилось, что Bid = Close[0], и Ask = Close[0]+spread. И значения Close[0] (только значение; сам Close на ценовом графике меняется) тоже не меняются вместе с Аском и Бидом. А MarketInfo() меняется.
Ну да ладно. Я же писал в самом начале, что проблема не для обсуждения. Я на неё натолкнулся, я её описал. Вот и всё. Если такое явление имеет место быть, вы это поправите. Если это явление наблюдается только у меня, я с этим проживу. И, специально для Рената, столкнулся я с этой ситуацией в обычном советнике. Без каких-либо циклов. И "частота" работы этого советника не более одного раза в день. А согласитесь, обидна да(?), ситауциа на рынке "сложилась" один раз в сутки, а советник вместо позы выдал "инвалид прайс".