Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Мда..все тоже самое в принципе..
В новом билде перестали копироваться простые структуры в цикле. Вот проверочный скрипт:
Результат:
2011.11.13 09:30:44 Test_Copy_Struct (EURUSD,M15) Access violation read to 0x00000000209FFFAC in 'E:\Program Files\Championship_2011\MQL5\Scripts\Test_Copy_Struct.ex5'
2011.11.13 09:30:44 Test_Copy_Struct (EURUSD,M15) i=0
2011.11.13 09:30:44 Test_Copy_Struct (EURUSD,M15) LossToReverse=3000.00 MAPeriod=100 MA_use=1 Lots=0.10 takeprofit=1000
2011.11.13 09:30:44 Test_Copy_Struct (EURUSD,M15) Setting reopened=110 overpos=130 TrailingStop=200 WithoutlossLevel=1300 WithoutlossProfit=1500
2011.11.13 09:30:44 Test_Copy_Struct (EURUSD,M15) ------------------------------
2011.11.13 09:30:44 Test_Copy_Struct (EURUSD,M15) LossToReverse=1000.00 MAPeriod=85 MA_use=0 Lots=0.15 takeprofit=1700
2011.11.13 09:30:44 Test_Copy_Struct (EURUSD,M15) Setting reopened=110 overpos=140 TrailingStop=200 WithoutlossLevel=600 WithoutlossProfit=800
2011.11.13 09:30:44 Test_Copy_Struct (EURUSD,M15) ------------------------------
2011.11.13 09:30:44 Test_Copy_Struct (EURUSD,M15) LossToReverse=2000.00 MAPeriod=105 MA_use=1 Lots=0.13 takeprofit=2700
2011.11.13 09:30:44 Test_Copy_Struct (EURUSD,M15) Setting reopened=60 overpos=90 TrailingStop=1000 WithoutlossLevel=100 WithoutlossProfit=900
2011.11.13 09:30:44 Test_Copy_Struct (EURUSD,M15) ------------------------------
2011.11.13 09:30:44 Test_Copy_Struct (EURUSD,M15) LossToReverse=0.00 MAPeriod=0 MA_use=0 Lots=0.00 takeprofit=0
2011.11.13 09:30:44 Test_Copy_Struct (EURUSD,M15) Setting reopened=0 overpos=0 TrailingStop=0 WithoutlossLevel=0 WithoutlossProfit=0
В https://www.mql5.com/ru/docs/basis/function/events сказано в конце: "Для лучшего понимания будет полезно запустить индикатор, код которого приложен ниже."
Код запустил. На выходных. Лучшего понимания не произошло - оно и так было, как мне думается, в норме, а вот худшие впечатления добавились. Тиков в выходные нет, поэтому prev_calculated = 0 в это время всегда, при переходе с таймфрейма на таймфрейм:
Однако в один прекрасный момент появляется (реконнектов не было, честное благородное!) вот такое значение:
и весёлые линии на графике:
или раза в два менее весёлые, вот так:
Были даже линии в начале истории в виде ZigZag'а (увы, забыл сделать скриншот, а воспроизвести не удалось).
На прочих ТФ линии тоже появляются, но более разреженно. Можете легко убедиться в этом сами.
Авторы точно хотели сказать именно это?
Почему результат prev_calculated по меньшей мере неодинаков в отсутствии тиков, а то и вовсе странный? Что-то сбоит при прыжках с ТФ на ТФ?
Должны ли были эти (или любые другие) линии появиться вне тиков?
Может ли в редких случаях относительно частое перепрыгивание с ТФ на ТФ сгенерировать что-то вроде псевдотика, который и инициирует обсчёт значений баров на истории и т. п.?
Стоит ли ожидать, что непостоянство в поведении терминала будет устранено? Или мне стоит учить матчасть?
Может, я пытаюсь делать то, чего не нужно хотеть? В таком случае обоснуйте свою точку зрения.
Вопросов накопилось немало... впрочем, это только начало...
Продолжение...
По той же ссылке есть фраза: "Примечание: если функция OnCalculate возвращает нулевое значение, то в окне DataWindow клиентского терминала значения индикатора не показываются."
Видите ли в чём дело... Если будет необходимо, охотно соглашусь с любым местопроизрастанием у меня рук и тотчас побегу выпрямлять при необходимости. Но. В простых индикаторах и средней сложности ещё как-то можно выкрутиться из тех или иных ситуаций с затыками. Но по мере возрастания сложности кода любые функции копирования Copy...() (как принимающие в качестве аргумента хэндл другого индикатора, так и без него) начинают изрядно осложнять ситуацию, как кажется лично мне, занимающемуся MQL-программированием без году неделю. Наступает пороговый момент, когда уже не знаешь, что ещё можно было бы изменить в коде, потому что всё, что мог, изменил, а остальное, как тогда кажется, трогать вообще не нужно, ибо с проблемой оно никак не связано. Либо закрадывается совсем обезоруживающая мысль: менять алгоритм полностью, потому что не были заранее учтены особенности жизнедеятельности и капризы терминала. Ведь в процессе изучения MQL по документации приходится сталкиваться с нюансами, которые разработчики замалчивают, скорее всего ненароком. А ведь MQL-программист после полного изучения документации многого так не узнает... И, что самое обидное, средствами MQL многие капризы терминала либо не исправить вовсе, либо можно поставить код на сомнительные костыли и однажды больно грохнуться...
Ладно... разошёлся я что-то сегодня. Выходной всё-таки.
А сообщить-то я вот что хотел с утра пораньше...
https://www.mql5.com/ru/forum/1111/page570#comment_117425 - основную проблему непрорисовки индикатора при первичном запуске терминала решить кое-как удалось (надеюсь, никто не станет спорить с тем, что как минимум индикатору фракталов ничто не должно мешать отрисовываться на всей истории исправно даже при отсутствии тиков?).
Было:
заменил на:
Признаю свою невнимательность и как следствие пагубный формализм.
Но. Это помогло в самом простом случае (специально упрощал исходный индикатор). В более сложном индикаторе такие трюки уже не помогли - в какой-то момент изменения перестали выказывать какую-либо разницу, тем более, что функций копирования там предостаточно. А очень бы хотелось получить вразумительное наставление, куда и как двигаться дальше. Ведь столько времени положено на то, что работает через пень колоду. Пока я даже не понимаю, мой ли это косяк или терминала. И не уверен, что проблема первичной отрисовки кроется лишь в нехватке if и return... кое-где подозрительно выглядит, например, else...
Разработчикам - кину код в личку при необходимости; могу заодно приложить аналогичный по своему назначению, но реализованный иначе и работающий сразу без проблем (правда, он не совсем подходит под осваиваемые задачи и цели).
Есть большие подозрения, что терминал чудит с кэшем (я почти не в теме, так что...). Хуже того - даже MetaEditor как-то влияет на отработку того, что происходит в то время в терминале.
Неоднократно сталкивался с проблемой, когда изменяю код MQL-программы (Print'ующей в лог закладки Эксперта данные отладки), перекомпилирую, перехожу в окно терминала и вижу, как сыпятся повтором предыдущие результаты, хотя точно могу сказать, что это не является чем-то вроде отложенной доотработки предыдущего незавершённого запуска программы. Получается так, что через F7 в MetaEditor'е я вроде как компилирую и отправляю на запуск обновлённый код, а тем временем терминалу отдаётся команда прокрутить повторно старое (из кэша, что ли?.. или похоже на "подтасовку" операционкой страниц памяти). Любопытно то, что отменить/выгрузить "застрявший в зубах" предыдущий вариант .ex5-кода удаётся не только полной выгрузкой процесса terminal.exe, а в некоторых редких случаях - всего-навсего закрытием MetaEditor'а. Вот как хотите, так и понимайте, я просто пересказал то, что наблюдал лично.
Недавно была ситуация, когда конструкция:
выводила только значение от первого Print, но дожидаться следом вывода значений элементов массива было бесполезно. После удаления первого Print и перекомпиляции циклический вывод элементов массива начинался моментально. Тайный заговор Print'ов против MQL5-Community или я один такой невезучий?Дополнительно отмечу, что эти странные случаи поведения терминала наблюдались не на перегруженном окнами чартов, графическими объектами и MQL-программами экземпляре MT5, а всего-навсего при единственном чистом (не считая наброса обкатываемого индикатора) окне чарта.
1. Не работает ArrayInitialize код прилагается если раскоментировать цикл то все нормально.
2. И еще при обьявлении переменных в классе и индикаторе на глобальном уровне с одинаковыми именами - выскакивает предупреждение .
1. Для индикаторных буферов в ините используется PlotIndexSetDouble(z,EMPTY_VALUE).
2. Выскакивает. Значит с этим надо что-то делать, члены класса рекомендуется помечать префиксом "m_".