грабли в init() - страница 3

 
Renat писал (а) >>

...Функция init() у эксперта вызывается не в момент прикрепления эксперта к графику, а после прихода первого ценового тика.

1. Надеюсь, Renat, видит разницу между тем, что сверху, и тем, что снизу и прокомментирует.

Выполнение программ

Сразу же после присоединения к графику программа начинает работу с функции init(). Функция init() присоединенного к графику советника или пользовательского индикатора запускается также сразу после старта клиентского терминала и подгрузки (это касается только советников и не касается индикаторов) исторических данных...

Пока Renat не ответил, я попытаюсь обобщить то, что сверху, и то, что снизу.

Если внимательно прочитать нижнее, получится:

- в первом предложении говорится о программе, начинающей работу с функции init();
- во втором - о самОй функции init()

Если понимать использованное "...запускается также ..." в общепринятом смысле и
если подразумевать тождественность используемых понятий "начинает работу" и "запускается",
то можно догадаться, что:

- речь идет о дополнительных ситуациях, при которых запускается функция init(). Ситуациях, не описанных в первом предложении;
- озвученное в первом предложении, справедливо и для функции init().

Но... Все таки, формально, первое предложение относится к программе, а не к функции init(). То, что "программа начинает работу с функции init()" следует и из других официальных источников. А то, что функция init() получает добро на выполнение только по приходу первого тика мы узнаЕм только сегодня...

2. Renat, если верить тому, что сверху, как последней поступившей вводной, то означает ли это, что реально функция Start() начинает работу только со второго тика, т.к. первый отработан ф-цией init()?

3. Может быть Metaquotes наймут все-таки нормального автора технических текстов с нормальным знанием русского языка (прочие мануалы не изучал)? Автора, понимающего, что при создании мануалов к языку программирования не надо разнообразить изложение синонимами, а использовать единообразные формализованные понятия. Как и в самОм языке.

А то получается, что про одно и то же пишется и "вызывается", и "запускается", и "начинает работу"...

 
У меня создалось такое впечатление, что документация переведена с английского, т.е. английский - язык первоисточника. Возможно, я ошибаюсь. Но некоторые предложения на русском действительно очень похожи на кальку (подстрочник) с английского - хотя, конечно, не буквальный, а вполне грамотный с точки зрения нормального русского.
 

Но... Все таки, формально, первое предложение относится к программе, а не к функции init(). То, что "программа начинает работу с функции init()" следует и из других официальных источников. А то, что функция init() получает добро на выполнение только по приходу первого тика мы узнаЕм только сегодня...

Извините, тут я некорректно выразился. Функция init() эксперта вызывается не с приходом первого тика, а после загрузки рыночного окружения (списка символов и последних цен bid/ask, но без гарантии полной подгрузки исторических данных).

если верить тому, что сверху, как последней поступившей вводной, то означает ли это, что реально функция Start() начинает работу только со второго тика, т.к. первый отработан ф-цией init()?

Нет. start() вызовется на первом тике. Это легко проверить самостоятельно.


Может быть Metaquotes наймут все-таки нормального автора технических текстов с нормальным знанием русского языка (прочие мануалы не изучал)?

Вообще-то мы очень серьезно подходим к документации. У нас есть выделенный отдел документации и переводов, который занимается написанием документации на разных языках. В терминале (как и во всем комплексе наших программ) есть встроенная помощь на нескольких языках. В редакторе есть документация на MQL4 тоже на нескольких языках. Кроме того, есть сайт MQL4.community, где есть масса материалов и возможность обсудить любые вопросы по терминалу и языку MQL4.


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


Такова реальность.

 
Mathemat писал (а) >>
У меня создалось такое впечатление, что документация переведена с английского, т.е. английский - язык первоисточника. Возможно, я ошибаюсь. Но некоторые предложения на русском действительно очень похожи на кальку (подстрочник) с английского - хотя, конечно, не буквальный, а вполне грамотный с точки зрения нормального русского.

Мы готовим документацию на русском и потом переводим ее на другие языки.

 

Из помощи к OrderSend(). Русский:

Минимальное расстояние стопов в пунктах можно получить, используя функцию MarketInfo() с параметром MODE_STOPLEVEL...

Минимальное расстояние отложенной цены от текущей рыночной цены в пунктах также можно получить, используя функцию MarketInfo() с параметром MODE_STOPLEVEL.

Английский:

The minimal distance of stop levels in points can be obtained using the MarketInfo() function with MODE_STOPLEVEL parameter...

The minimal distance of the pending price from the current market one in points can be obtained using the MarketInfo() function with the MODE_STOPLEVEL parameter.

У меня все равно остается устойчивое впечатление, что оригиналом был английский - по крайней мере в начале работы с документацией. Выделенные красным фразы в русскоязычном варианте, мягко говоря, слегка кривые, а в англоязычном - вполне ничего. Можно утверждать, что именно русскоязычные - кальки с англоязычных, а не наоборот. Кто-нибудь говорит по-русски "расстояние столбов в метрах" или "расстояние Питера от Москвы в километрах"?

P.S. Остаются две версии: либо составлявший русскоязычную документацию не слишком хорошо владеет русским (зато переводчик, несмотря ни на что, выполнил перевод на правильный английский!), либо переводчик с английского честно выполнил указание "жертвовать стилем в угоду точности". Вероятнее второй вариант.

 
Renat писал (а) >>

... Функция init() эксперта вызывается не с приходом первого тика, а после загрузки рыночного окружения (списка символов и последних цен bid/ask, но без гарантии полной подгрузки исторических данных).

...start() вызовется на первом тике

Renat, благодарю за оперативный ответ. Некоторая ясность наступила.

Для себя я сделал следующий вывод. Для того, чтобы не заморачиваться оценкой степени готовности окружения к использованию:

- или вводить в функцию init() принудительную задержку Sleep() на заведомо достаточную величину;
- или все инициализации и вычисления, критичные для коррекной реализации алгоритма, производить из функции start() на втором тике.

 
Mathemat писал (а) >>

Из помощи к OrderSend(). Русский: ...

Английский: ...


+1

Я не могу привести конкретный пример, но описанные ощущения возникали и у меня неоднократно.

 
Renat писал (а) >>

Вообще-то мы очень серьезно подходим к документации. У нас есть выделенный отдел документации и переводов, который занимается написанием документации на разных языках. В терминале (как и во всем комплексе наших программ) есть встроенная помощь на нескольких языках. В редакторе есть документация на MQL4 тоже на нескольких языках.

Renat, я и не пытаюсь умалить заслуги команды MQ. Я неоднократно на разных площадках высказывался с лестными отзывами о продукте. Я прекрасно понимаю ревностное отношение отцов к своему отпрыску. Но при всех положительных свойствах продукта в комплексе, есть огромное количество режущих глаз и руку недочетов, несуразностей и просто ляпов. Простые пользователи принимают MT на ура и в таком виде. Но более искушенная их часть, соответственно, и более требовательна и постоянно повышает планку своих требований.

Говоря о продукте, о документации к нему, я могу сделать следующий вывод. Пусть он и покажется крамольным.

Гордая поступь MT по планете зиждется на поппулизме, на простоте и доступности продукта и трейдинга большинству прикоснувшихся к нему. Более того, широкие массы посажены на иглу псевдолегкости реализации торговых идей (читай: граалей) средствами MQL. Соответственно, и документация написана доступным, литературно-газетным языком. Все шероховатости, исключения, особенности использования завуалированны, сглажены, рассеяны по тексту.

Renat писал (а) >>

...Кстати, а Вы прочли все материалы с этого сайта? ...

Все материалы с сайта я, конечно, не мог прочесть. Пользуюсь им регулярно. Но, поверьте, с каждым годом все сложнее и сложнее отделить зерна от плевел в силу огромного, ну просто давящего массой, количества последних.

Renat писал (а) >>

...Дело-то не в "плохом знании языка", ...

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

Renat писал (а) >>

... а в том, что люди хотят в одном параграфе получить "абсолютно точное и финальное знание" без необходимости читать что-либо дополнительное. Это абсолютно понятное желание, но оно не реализуемо. Нужно самостоятельно потратить свое время, прочесть массу дополнительной информации, а затем на практике ее проверить.


Такова реальность.

+1. Что еще скажешь?

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

--- Оффтоп ---

Renat, у меня накопилось много вопросов по поддержке и обратной связи. Вы или иной представитель MQ готовы обсудить это в отдельной ветке или любым другим удобным для Вас способом? Я спрашиваю, поскольку не хочу, чтобы мои вопросы постигла участь многих предыдущих, проигнорированных и оставленных без ответа.

 

У меня тоже проблема с init-ом написал индикатор, который собирает параметры с других индикаторов и выводит данные в подокно графика. На этапе инициализации индикатора создаются объекты типа label. Самое интересное что данные появляются только либо после смены таймфрейма, либо при добавлении какого-нибудь (любого) индикатора на график после данного. В журнале никаких ошибок нет. При выключении и включении терминала индикатор нормально инициализируется и работает. Инициализация не происходит, только когда индикатор добавляется на график. Еще интересно то, что если написать отображение индикатора в окне чарта, то при подключении он нормально работает, не хочет работать именно в подокне.

 
StSpirit писал (а) >>

У меня тоже проблема с init-ом написал индикатор, который собирает параметры с других индикаторов и выводит данные в подокно графика. На этапе инициализации индикатора создаются объекты типа label. Самое интересное что данные появляются только либо после смены таймфрейма, либо при добавлении какого-нибудь (любого) индикатора на график после данного. В журнале никаких ошибок нет. При выключении и включении терминала индикатор нормально инициализируется и работает. Инициализация не происходит, только когда индикатор добавляется на график. Еще интересно то, что если написать отображение индикатора в окне чарта, то при подключении он нормально работает, не хочет работать именно в подокне.

Посмотрите как пример индикатор Specification. Если вопросы останутся, то не могли бы Вы приложить код своего индикатора или выслать его по почте на rosh AT metaquotes DOT ru.

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