Сарказм ошибки 131

 

Сегодня один из советников, запущенных на демо-счете одного известного ДЦ (исправлено Artyom Trishkin), стал приводить к ошибке 131 (неправильный объем). В ходе выяснения причины (сначала я грешил на ошибку округления к шагу, хотя функция проверки объема безупречно работала много лет), оказалось, что советник пытается выставить достаточно большой объем - 672.08. Тогда проверил, что возвращает 

SymbolInfoDouble(Symbol(), SYMBOL_VOLUME_MAX);

Итог - 1000.0. То есть максимум не превышен. Попытался вручную открыть рыночный ордер с объемом 672.08 и получил ошибку "Неправильный объем". Эмпирическим путем выяснил, что максимальный объем, который позволяет открыт сервер, 50.0.

Напрашивается неприятный вывод: появилась очередная константа, значению которой верить нельзя (до этого такой константой была SYMBOL_TRADE_STOPS_LEVEL). То есть и для максимального объема придется вводить настроечный параметр, при помощи которого пользователь должен (подчеркиваю: не может, а должен) регулировать  правильность максимального объема. 

Да, это демо-счет, и вроде бы на это и можно все списать. Но гарантии того, что подобное не случится на реальном счете, нет. Оказывается в клиентском терминале и сервере вполне допускаются расхождения в настроечных параметрах. Все это очень грустно...

 
Ihor Herasko:

Сегодня один из советников, запущенных на демо-счете одного известного ДЦ (исправлено Artyom Trishkin),

у этого брокера давно уже некие динамические лоты и маржа по ним сложно считается, да кстати и этот брокер со настройкой  SYMBOL_TRADE_STOPS_LEVEL был первый кого я заметил 

тут в общем проблема больше  в брокере чем повсеместно, хотя может быть и остальные переймут этот плохой опыт - сбивать самонастраивающиеся эксперты

 
Igor Makanu:

хотя может быть и остальные переймут этот плохой опыт - сбивать самонастраивающиеся эксперты

Я к тому же и веду. Раз один нашел лазейку, то и другой вполне может найти. А пока разберешься, можно много средств потерять.

 
Ihor Herasko:

Напрашивается неприятный вывод: появилась очередная константа, значению которой верить нельзя (до этого такой константой была SYMBOL_TRADE_STOPS_LEVEL).

Таких констант много. Я например часто получал MODE_MARGINREQUIRED = 0, и MODE_TICKVALUE = 0.

Приходится обкладывать это костылями.

 
secret:

Таких констант много. Я например часто получал MODE_MARGINREQUIRED = 0, и MODE_TICKVALUE = 0.

Это наверное на старте работы советника, пока терминал не подключен к серверу. Я не запускаю советник до тех пор, пока имеются нули в параметрах, которые являются критичными. Для меня это: TickSize, Point и TickValue.

 
Ihor Herasko:

Это наверное на старте работы советника, пока терминал не подключен к серверу. Я не запускаю советник до тех пор, пока имеются нули в параметрах, которые являются критичными. Для меня это: TickSize, Point и TickValue.

По MODE_MARGINREQUIRED и MODE_TICKVALUE - это ДЦ не транслирует. Причем как от ДЦ зависит так и внутри одного ДЦ, по разным инструментам тоже может где быть, где нет.

 
Кухни могут отдавать в конфиге символа полную ерунду. Такие штуки лучше в настройки эксперта выводить.
 
SeriousRacoon:
Кухни могут отдавать в конфиге символа полную ерунду. Такие штуки лучше в настройки эксперта выводить.

Это уже не автоторговля, а какая-то полуручная торговля))

Смысл ветки не в том, что кухни вытворяют, а в том, почему вообще возможно сделать так, что в параметрах, отдаваемым эксперту (индикатору, скрипту), указано одно, а на сервере совсем другое? То есть вопрос как раз к самому терминалу.

Представьте себе ситуацию, когда в настроечных параметрах эксперта пользователь указал торговать лотом 0.5, а он торгует лотом 1.5. Кухонный эксперт что ли получается?

Второй момент, на который я, возможно не слишком акцентировал внимание, это тот факт, что в запрашиваемом параметре указано ненулевое значение. С другими параметрами хотя бы можно догадываться о том, что они неправильные, раз 0 получаешь. А тут - вполне нормальное значение.

 
Ihor Herasko:

Это уже не автоторговля, а какая-то полуручная торговля))

Смысл ветки не в том, что кухни вытворяют, а в том, почему вообще возможно сделать так, что в параметрах, отдаваемым эксперту (индикатору, скрипту), указано одно, а на сервере совсем другое? То есть вопрос как раз к самому терминалу.

Представьте себе ситуацию, когда в настроечных параметрах эксперта пользователь указал торговать лотом 0.5, а он торгует лотом 1.5. Кухонный эксперт что ли получается?

Второй момент, на который я, возможно не слишком акцентировал внимание, это тот факт, что в запрашиваемом параметре указано ненулевое значение. С другими параметрами хотя бы можно догадываться о том, что они неправильные, раз 0 получаешь. А тут - вполне нормальное значение.

А чего удивляться? В Инсте например лоты отличаются в 10 раз. 
Размер залоговой маржи может отличаться. У одних брокеров 1 лот - 100000 долларов, у других - в зависимости от базовой валюты

 
Ihor Herasko:

Это уже не автоторговля, а какая-то полуручная торговля))

Смысл ветки не в том, что кухни вытворяют, а в том, почему вообще возможно сделать так, что в параметрах, отдаваемым эксперту (индикатору, скрипту), указано одно, а на сервере совсем другое? То есть вопрос как раз к самому терминалу.

Представьте себе ситуацию, когда в настроечных параметрах эксперта пользователь указал торговать лотом 0.5, а он торгует лотом 1.5. Кухонный эксперт что ли получается?

Второй момент, на который я, возможно не слишком акцентировал внимание, это тот факт, что в запрашиваемом параметре указано ненулевое значение. С другими параметрами хотя бы можно догадываться о том, что они неправильные, раз 0 получаешь. А тут - вполне нормальное значение.

Так терминал же эти значения получает с сервера кухни, не с потолка берёт.

 
SeriousRacoon:

Так терминал же эти значения получает с сервера кухни, не с потолка берёт.

В этом и заключается вопрос: почему в терминал поступает значение максимального объема, отличающееся от того значения, которое используется сервером фактически?

Причина обращения: