ОШИБКА! ФУНКЦИИ AccountNumber() и AccountInfoInteger(ACCOUNT_LOGIN) ВОЗВРАЩАЮТ НУЛЕВОЙ НОМЕР СЧЕТА!
Забыл добавить главное - такое поведение функций характерно только при запуске терминала, если же индикаторы запускать после того как терминал запущен, то обе функции работают корректно, возвращают действительно текущий номер счета.
Что характерно, подобной проблемы у советников не наблюдается, только у индикаторов.
Забыл добавить главное - такое поведение функций характерно только при запуске терминала, если же индикаторы запускать после того как терминал запущен, то обе функции работают корректно, возвращают действительно текущий номер счета.
Что характерно, подобной проблемы у советников не наблюдается, только у индикаторов.
Во-первых, номер счета (логин) хранится в самом терминале - в конце концов первое, что делает терминал при запуске - это передает номер счета и пароль на торговый сервер для авторизации, получая в ответ успех или неуспех. Скорее всего номер счета не нуждается ни в каком обновлении торговых данных, чтобы быть переданным советнику или индикатору.
Во-вторых, я уже обращал внимание на то, что проблема связана исключительно с индикаторами, при вызове этих функций из советников подобных проблем не возникает. Там все отрабатывает честно. Идет запрос номера счета из функции OnInit() и обе функции возвращают ненулевое значение номера счета. Спрашивается - чем программа, оформленная в виде советника принципиально должна отличаться от программы, оформленной в виде индикатора? Полагаю, что уж точно не этим...
В-третьих, обе функции возвращают нулевое значение номера счета только в момент запуска терминала МТ4 (когда индикаторы уже были установлены на графике перед закрытием терминала). Если индикатор присоединять к графику в уже запущенном терминале, то таких проблем не возникает.
Складывая все вместе, можно сделать вывод, что это явный глюк, ошибка, которая причем легко локализуется и быстро исправляется.
Пока не установится связь с торговым сервером, Вы не получите информации о своём торговом счёте.
Вот это-то как раз и странно, ведь логин-пароль вводятся ещё до установки связи, то есть терминалу эти данные уже доступны.
Ничего странного. Нужно подтверждение идентификации, иначе можно будет ввести любые данные: например, при привязке к номеру счета - вводим любой пароль и индикатор запустится ;)....
Хотя да, верно, так и должно быть.
Нужно подтверждение идентификации, иначе можно будет ввести любые данные:
например, при привязке к номеру счета - вводим любой пароль и индикатор запустится ;)....
Во-первых, не понятно зачем запускать индикаторы до тех пор, пока не получено подтверждение авторизации на этом счете? Советники же не запускаются до тех пор пока не прошла авторизация! И зачем возвращать 0 вместо номера счета, если авторизация прошла успешно?
Во-вторых, предположим, что Метаквоты действительно задумали так, чтобы советникам было запрещено, а индикаторам разрешено запускаться во время загрузки терминала. И что? Вы ввели левый номер счета, но индикатор при запросе номера счета все равно не получит его, т.к. авторизация не состоялась, и терминал возвратит последний известный ему номер счета, прошедший авторизацию.
В общем, как говорится, "чем дальше влез, тем дольше вылезать" :)
В чём главное отличие индикатора от эксперта?
Индикатор рассчитывается на имеющихся ценовых данных и должен так или иначе отобразиться на ценовом графике.
Главная функция эксперта - совершение торговых операций на основе анализа поступающих ценовых данных
Так как индикатор должен быть правильно показан на ценовом графике, то он рассчитывается не только по приходу очередного тика, но и по любому изменению на ценовом графике
Какие могут быть изменения в данных на графике?
- поднятие данных с нуля при старте терминала, при смене счёта, при смене профайла
- смена таймфрейма графика
- обновление данных по нажатию F5, либо после установления соединения
- и, конечно же, приход нового тика
Было бы очень странно требовать от индикатора расчёта исключительно по приходу нового тика. А что тогда делать в выходные? Пялиться на пустой график и ждать расчёта индикатора до понедельника?
А что тогда делать в выходные? Пялиться на пустой график и ждать расчёта индикатора до понедельника?
Вы не правильно меня поняли. Мне без разницы когда и по какому поводу индикатор рассчитывает и отрисовывает данные - по приходу нового тика, чаще или реже. Не об этом речь! Я лишь ожидал, что функция AccountInfoInteger(ACCOUNT_LOGIN),
вызванная из любого места индикатора, в том числе из функции OnInit(), вернет мне номер текущего счета, т.е. сделает ровно то, что написано в справочнике MQL4
// Возвращает значение соответствующего свойства счета.
long AccountInfoInteger( |
Но функция ведет себя неоднозначно, двойственно. В одном случае она возвращает номер текущего счета, в другом - возвращает ноль! Где, скажите, написано в документации, что функция должна или может вернуть ноль во втором случае?
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Обе функции, предназначенные для возврата номера текущего счета, возвращают ноль!
// Получить номер текущего счета
int account_number_1=AccountNumber();
// Возвращает значение соответствующего свойства счетаPrint("account_number_1=", account_number_1); // возвращает account_number_1=0
long account_number_2=AccountInfoInteger(ACCOUNT_LOGIN);
Print("account_number_2=", account_number_2); // возвращает account_number_2=0
...
Вставил обращение к этим функциям из функции OnCalculate(), все равно после первого тика обе функции возвращают ноль!
И только после второго тика функции возвращают ненулевой номер счета!
Кто знает, как получить ненулевой номер текущего счета внутри функции OnInit() в момент запуска терминала МТ4?