Пожелания к MQL5 - страница 117

 
HideYourRichess писал(а) >>
Торговать на айподе?! - извините ради бога, надо было сразу предупредить. Пожалуйста, пишите, излагайте любые глупости - слова не скажу. Теперь, когда всё прояснилось - отнесусь с пониманием и терпением. Торговать на айподе! - ааааафигеть....

Спасибо за сочувствие и Вам не хворать, хотя бы не прогрессировать

 

Только что столкнулся с проблемой в МТ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);


и продажи и покупки стали компелироваться как положено и переключения таймфреймов стали быстрыми.

Вот только ошибка должна была всплыть еще во время компелирования. Найти причину в подобных случаях

совсем непросто (можно было и не знать о наличии проблемы).

И еще не ясно почему в модуле продаж все бежало без проблем.

 
chief2000 писал(а) >>

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

Компилятор не может и не должен отслеживать Значения переменной по определению.

И еще не ясно почему в модуле продаж все бежало без проблем.

Потому что одна ошибка быстрее обрабатывается, чем две и более.

 
fwiq >>:

Компилятор не может и не должен отслеживать Значения переменной по определению.

Плохо если это действительно так.

Ведь это практически равносильно обращению к переменной, которая не была предварительно определена.

fwiq писал(а) >>

Потому что одна ошибка быстрее обрабатывается, чем две и более.

Нет, дело в чем-то другом - я же говорил что когда оставался только модуль продаж проблем не наблюдалось,

а когда удалял продажи и оставлял только покупки - проблема была. Разница была очень заметна, при том что оба модуля

абсолютно идентичны, за исключением некоторых операций, замененных на обратные (>/<, High[]/Low[] и т.п.).

 
chief2000 писал(а) >>

Нет, дело в чем-то другом - я же говорил что когда оставался только модуль продаж проблем не наблюдалось, а когда удалял продажи и оставлял только покупки - проблема была. Разница была очень заметна, при том что оба модуля абсолютно идентичны, за исключением некоторых операций, замененных на обратные (>/<, High[]/Low[] и т.п.).

Возможно здесь дело не определении переменных или массивов. В индикаторах МТ4 надо очень внимательно и аккуратно отслеживать моменты, когда начинаешь добавлять программно линии и меняешь имена отражаемых массивов. Там иногда возникает путаница и может линия не отражаться или зависать расчет как в этом случае. Здесь только одно лекарство, как в анекдоте "Надо просто выйти и зайти, и все заработает".

 

Если в буквальном смысле то перегрузка тоже не помогала.

Так или иначе, мне это различие между продажами и покупками помогло узнать о наличии проблемы..

Не было бы счастья, да несчастье помогло :)

 
У меня другой вопрос. Не получается запустить отладчик MQL5 на индикаторах. На скриптах и экспертах все работает, а на любом индюке не останавливается и по шагам не пройти. Может есть какие-то недокументированные особенности, кто в курсе, сообщите плиз.
 
fwiq >>:
У меня другой вопрос. Не получается запустить отладчик MQL5 на индикаторах. На скриптах и экспертах все работает, а на любом индюке не останавливается и по шагам не пройти. Может есть какие-то недокументированные особенности, кто в курсе, сообщите плиз.

Неделю назад обработчики писали что так и задуманно и отладка на индюках дебугер будет работать позже

 

В МТ4 всегда появлялись ошибки из-за того что Аск или Бид или еще (Close, Open, и т.д.) собирали после запятой

огромное количество чисел ( типа 1.4323111111111111). В результате приходилось добавлять "NormalizeDouble(Bid,Digits);"..

А ведь это можно решить один раз на уровне МТ.

 

Прошу дополнить функии ObjectFind и ObjectDelete возможностью работать с масками типа : *,?

В принципе можно обойтись конечно только ObjectFind. Если необходимо сохранить обратную совместимость то прежнюю функцию оставить неизменной, а дополнить набор, например, ObjectFindM (множественный поиск).

Пример: нужно найти текстовые метки, которые начинаются с "Signal". 

Реализация: возвращает имя первого найденного объекта (или хэндл, но для этого нужны остальные функции, которые умели бы с ним работать соотв-но)

Нотация: ObjectFindM("Signal*");

Пример: нужно удалить с "0"-го окна только те текстовые метки, которые начинаются с "Signal"

Нотация: ObjectDelete(0,"Signal*");