Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Торговать на айподе?! - извините ради бога, надо было сразу предупредить. Пожалуйста, пишите, излагайте любые глупости - слова не скажу. Теперь, когда всё прояснилось - отнесусь с пониманием и терпением. Торговать на айподе! - ааааафигеть....
Спасибо за сочувствие и Вам не хворать, хотя бы не прогрессировать
Только что столкнулся с проблемой в МТ4, пожалуйста, убедитесь что этого не будет в МТ5 (не проверял).
В самом начале (до init) были заданы массивы:
xsell[3];
xbuy[3];
Перед этим внешняя переменная:
extern int Max_Array_Size = 13;
В цикле start():
ArrayResize(xsell, Max_Array_Size);
ArrayResize(xbuy, Max_Array_Size);
А затем цикл for():
for(int kss= Max_Array_Size; kss>0; kss--) {
xbuy[kss] = . . . ;
. . .
}
Одна и та же схема была использована и в модуле продаж (Пользовательский Индикатор) и покупок - т.е. переменные разные,
но принцип тот же самый. Вначале написал все для продаж, откомпеллировал - все классно, без проблем. Потом скопировал
этот модуль, заменил переменные, знаки и т.п. для покупок - компиляция заняла уже гораздо больше времени и переключение
между таймфреймами также стало занимать гораздо больше времени. Отключил продажи - ничего не изменилось, торможение.
Оставил только продажи - бежит быстро. Компилятор не жаловался, только работал гораздо дольше.
Пересмотрел все что казалось подозрительным, переписал некоторые части в покупках - тормозит!..
Оказалось что проблема в размерности массива: 13 => 0-12, а в for-цикле я пытался скормить ему еще и 13!
После исправления:
ArrayResize(xsell, Max_Array_Size+1);
ArrayResize(xbuy, Max_Array_Size+1);
и продажи и покупки стали компелироваться как положено и переключения таймфреймов стали быстрыми.
Вот только ошибка должна была всплыть еще во время компелирования. Найти причину в подобных случаях
совсем непросто (можно было и не знать о наличии проблемы).
И еще не ясно почему в модуле продаж все бежало без проблем.
Вот только ошибка должна была всплыть еще во время компелирования. Найти причину в подобных случаях совсем непросто (можно было и не знать о наличии проблемы).
Компилятор не может и не должен отслеживать Значения переменной по определению.
И еще не ясно почему в модуле продаж все бежало без проблем.
Потому что одна ошибка быстрее обрабатывается, чем две и более.
Компилятор не может и не должен отслеживать Значения переменной по определению.
Плохо если это действительно так.
Ведь это практически равносильно обращению к переменной, которая не была предварительно определена.
Потому что одна ошибка быстрее обрабатывается, чем две и более.
Нет, дело в чем-то другом - я же говорил что когда оставался только модуль продаж проблем не наблюдалось,
а когда удалял продажи и оставлял только покупки - проблема была. Разница была очень заметна, при том что оба модуля
абсолютно идентичны, за исключением некоторых операций, замененных на обратные (>/<, High[]/Low[] и т.п.).
Нет, дело в чем-то другом - я же говорил что когда оставался только модуль продаж проблем не наблюдалось, а когда удалял продажи и оставлял только покупки - проблема была. Разница была очень заметна, при том что оба модуля абсолютно идентичны, за исключением некоторых операций, замененных на обратные (>/<, High[]/Low[] и т.п.).
Возможно здесь дело не определении переменных или массивов. В индикаторах МТ4 надо очень внимательно и аккуратно отслеживать моменты, когда начинаешь добавлять программно линии и меняешь имена отражаемых массивов. Там иногда возникает путаница и может линия не отражаться или зависать расчет как в этом случае. Здесь только одно лекарство, как в анекдоте "Надо просто выйти и зайти, и все заработает".
Если в буквальном смысле то перегрузка тоже не помогала.
Так или иначе, мне это различие между продажами и покупками помогло узнать о наличии проблемы..
Не было бы счастья, да несчастье помогло :)
У меня другой вопрос. Не получается запустить отладчик MQL5 на индикаторах. На скриптах и экспертах все работает, а на любом индюке не останавливается и по шагам не пройти. Может есть какие-то недокументированные особенности, кто в курсе, сообщите плиз.
Неделю назад обработчики писали что так и задуманно и отладка на индюках дебугер будет работать позже
В МТ4 всегда появлялись ошибки из-за того что Аск или Бид или еще (Close, Open, и т.д.) собирали после запятой
огромное количество чисел ( типа 1.4323111111111111). В результате приходилось добавлять "NormalizeDouble(Bid,Digits);"..
А ведь это можно решить один раз на уровне МТ.
Прошу дополнить функии ObjectFind и ObjectDelete возможностью работать с масками типа : *,?
В принципе можно обойтись конечно только ObjectFind. Если необходимо сохранить обратную совместимость то прежнюю функцию оставить неизменной, а дополнить набор, например, ObjectFindM (множественный поиск).
Пример: нужно найти текстовые метки, которые начинаются с "Signal".
Реализация: возвращает имя первого найденного объекта (или хэндл, но для этого нужны остальные функции, которые умели бы с ним работать соотв-но)
Нотация: ObjectFindM("Signal*");
Пример: нужно удалить с "0"-го окна только те текстовые метки, которые начинаются с "Signal"
Нотация: ObjectDelete(0,"Signal*");