...
И еще в догонку вопрос: а видал ли кто-то, чтобы шаг лота был больше минимального лота?
Не встречал такого ни разу. Чаще всего шаг равен минимальному объему, иногда шаг меньше. Например, минимум 0.05 с шагом 0.01.
Не встречал такого ни разу. Чаще всего шаг равен минимальному объему, иногда шаг меньше. Например, минимум 0.05 с шагом 0.01.
Ну почему же? Лет 10 назад у Alpari был минлот 0.1, а шаг 0.25. Это нормально. Сейчас, может быть и нет ни у кого, но вовсе не означает, что не будет в будущем.
Поэтому ответ топикстартеру в принципе однозначный - указан некорректный объем, до проверки достаточности средств дело еще не дошло.
Жаль, что никто не смог придумать других причин ошибки 131.
Тогда объясните, в чем разница между:
MarketInfo(NULL,MODE_MINLOT); MarketInfo(NULL,MODE_MAXLOT); MarketInfo(NULL,MODE_LOTSTEP)
и
SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_MIN); SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_MAX); SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_STEP)
Как правильнее?
(В обоих случаях речь идет о текущем символе.)
И рассказали бы знатоки, как можно изменить дефолтную спецификацию символа, для тестирования без подключения к счету?
Жаль, что никто не смог придумать других причин ошибки 131.
Тогда объясните, в чем разница между:
MarketInfo(NULL,MODE_MINLOT); MarketInfo(NULL,MODE_MAXLOT); MarketInfo(NULL,MODE_LOTSTEP)
и
SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_MIN); SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_MAX); SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_STEP)
Как правильнее?
(В обоих случаях речь идет о текущем символе.)
И рассказали бы знатоки, как можно изменить дефолтную спецификацию символа, для тестирования без подключения к счету?
MarketInfo функции старого образца, SymbolInfo... - нового образца, работают как в mql4, так и в mql5
Используйте SymbolInfo..., будет проще переезд на mql5
Жаль, что никто не смог придумать других причин ошибки 131.
Тогда объясните, в чем разница между:
MarketInfo(NULL,MODE_MINLOT); MarketInfo(NULL,MODE_MAXLOT); MarketInfo(NULL,MODE_LOTSTEP)
и
SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_MIN); SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_MAX); SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_STEP)
Как правильнее?
(В обоих случаях речь идет о текущем символе.)
И рассказали бы знатоки, как можно изменить дефолтную спецификацию символа, для тестирования без подключения к счету?
Почитай тут.
![Какие проверки должен пройти торговый робот перед публикацией в Маркете Какие проверки должен пройти торговый робот перед публикацией в Маркете](https://c.mql5.com/36/15/kakie-proverki-dolzhen-proyti-torgoviy.png)
- 2016.07.19
- MetaQuotes Software Corp.
- www.mql5.com
В том то и дело, что "тут" я давно почитал.
Более того, научился вставлять в советники такой код, чтобы объемы сделок не выходили за границы
и были бы кратными шагу. Разве что пользовался я Marketinfo(), а не SymbolInfoDouble().
Понимаете, я признаю, что если у разработчика продукт работает без ошибок, а у модератора - с ошибками,
это значит, что разработчик не умеет тестировать собственный продукт.
Но как проверять продукты не хуже модератора, в "тут" не написано.
Я теперь понял, что для полноценной проверки необходимо иметь возможность задавать произвольные
значения в спецификации символа. А это вовсе не "тут".
В том то и дело, что "тут" я давно почитал.
Более того, научился вставлять в советники такой код, чтобы объемы сделок не выходили за границы
и были бы кратными шагу. Разве что пользовался я Marketinfo(), а не SymbolInfoDouble().
Понимаете, я признаю, что если у разработчика продукт работает без ошибок, а у модератора - с ошибками,
это значит, что разработчик не умеет тестировать собственный продукт.
Но как проверять продукты не хуже модератора, в "тут" не написано.
Я теперь понял, что для полноценной проверки необходимо иметь возможность задавать произвольные
значения в спецификации символа. А это вовсе не "тут".
Там пример функции в которой ясно видно, что простой нормализации недостаточно. И какую-бы функцию не использовали, Marketinfo() или SymbolInfoDouble() результат - ошибка...
Я теперь понял, что для полноценной проверки необходимо иметь возможность задавать произвольные
значения в спецификации символа. А это вовсе не "тут".
Сделайте проще: прогоните в цикле значения от -DBL_MAX до DBL_MAX, передавая их в свою функцию, которая занимается корректированием значения объема. Тогда и увидите, в чем проблема. Ну или покажите эту функцию здесь. Возможно, сможем указать на изъян.
Там пример функции в которой ясно видно, что простой нормализации недостаточно. И какую-бы функцию не использовали, Marketinfo() или SymbolInfoDouble() результат - ошибка...
А разве я говорил о нормализации?
Идем к началу ветки: есть три причины ошибки 131: меньше минимума, больше максимума, нет кратности шагу.
Четвертой причины видимо, нет. Минимум - максимум проверить просто? Ну вроде бы, да.
А кратность что ли трудно проверить? Или Вы думаете, я пишу "кратность", а сам вместо этого делаю нормализацию?
Признаться, я не делаю как в "тут", а делаю вот так:
if (fmod(Lots, Step) == 0) { -- блок кода, выставляющий ордер -- }
Это я как-то неправильно проверяю кратность что ли?
Сделайте проще: прогоните в цикле значения от -DBL_MAX до DBL_MAX, передавая их в свою функцию, которая занимается корректированием значения объема. Тогда и увидите, в чем проблема. Ну или покажите эту функцию здесь. Возможно, сможем указать на изъян.
А еще проще, но главное - надежнее было бы погонять весь советник на различных спецификациях символа.
В MT5 есть такая фишка - можно создать собственный символ, а в MT4 - нет.
Но как-то же программисты MT4 выкручиваются?
![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
До сих пор я мыслил так:
Если 131, значит нехватка средств не при чем, на этот случай есть 134.
Стало быть, "неправильный объем" может быть по трем причинам:
1. Объем сделки меньше минимального лота.
2. Объем сделки больше максимального лота.
3. Объем сделки не соответствует шагу изменения лота.
Вопрос к знатокам: а не ошибался ли я? Не существует ли еще каких-то других причин ошибки 131?
И еще я думал, что если тестирование происходит без подключения к торговому счету,
то Marketinfo() все равно работает, просто возвращает дефаулты.
Но тогда второй вопрос: а откуда эти дефаулты берутся?
Могут ли они оказаться несуразными, типа максимальный лот меньше минимального,
или шаг лота какой-нибудь дикий?
И еще в догонку вопрос: а видал ли кто-то, чтобы шаг лота был больше минимального лота?