28 !!! валютных пар, 1 эксперт. Опять грааль, но такого помоему еще никто не показывал. + ДЕМО СЧЕТ - страница 12
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Я сделал тестирование "по EURUSD в диапазоне с 2007.07.10 по 2007.07.14, и, отдельным тестом, в диапазоне с 2007.07.09 по 2007.07.14" как Вы просили, разницы никакой нет.
Пришлось и мне обновиться до последнего билда. :-) Действительно, проблемы с временем исчезли, это приятно. Однако, как выяснилось, на этом история не кончается.
Прогнал я советника на том же периоде - никаких расхождений High и Low на М1 и на Н1/Д1 нет. Здесь наши с Вами результаты совпадают. Заметьте - я прогнал тест на обычных своих непричесанных данных. Никакой синхронизации и т.п. Так что это не может быть приичной расхождений.
Затем решил на всякий случай (ну плохой у меня характер) попробовать на другом интервале. И оказалось, что дело еще не кончено.
Попробуйте интервал с 2007.08.06 по 2007.08.11, то есть фактически последняя неделя. Причем сравнение не с Д1, а с Н1. В тексте советника надо 4 оператора закомментировать, и 4 раскомментировать. Не то чтобы доказана возможность подсматривания в будущее, нет. Но глюк присутствует.
И, поскольку, как оказалось, отсутствие проблем на недельном интервале еще не дает гарантии отсутствия проблем вообще, может быть стоит прогнать тест на значительно большем интервале ? Например, год или полгода ?
В вашем коде факт наступления новых суток фиксировался слишком поздно, фактически на вторые сутки, в то время как проверка корректности моделироания начиналась сразу после начала тестироания. Чтобы исключить эту несимметричность. я ввел булеву переменную start, с помощью которой сразу в начале тестиорвания фиксировал все проверяемые значения.
Как видите, она отрабатывает только один раз и больше не влияет на работу советника. в дальнейшем все идет согласно Вашего алгоритма. Если первичной инициализации не делать, то проверочные строчки
дают значение curLo=0, в то время как curHi не равно нулю. Это объясняется просто: обе переменные, и curLo, и curHi, изначально равны нулю, так как неинициализированы. При первом же тике условие
срабатывает и curHi уже отличается от нуля, так как текущий Bid больше нуля. В то же время текущий Bid не может быть меньше нуля(curLo не инициализировался и потому равен нулю), и поэтому условие
никак не может изменить curLo. Прогоните мой вариант советника самостоятельно и убедитесь, что файл ошибок Fu.xls будет содержать только одеу строчку - время последней смоделированной котировки в тестере.
Полный код прицеплен к сообщению, лучше скачать его, так как в пост он не влез.
Спасибо, конечно, Rosh за Вашу доработку, но в ней по-моему не было необходимости.
Возможно Вы не обратили внимание, но в моем коде в функции init() стоит следующий блок:
Врезультате выполнения этого блока, в начале исполнения советника не может быть выполнено ни одно из условий
Поэтому с какого бы места истории не стартовал советник, это всегда будет новая минута, новый час и новый день. А первая пара операторов упомянутого блока объясняет почему Ваше утверждение: "Это объясняется просто: обе переменные, и curLo, и curHi, изначально равны нулю, так как неинициализированы." не соответствует действительности. Поскольку Bid на первом же тике больше нуля, но меньше 1000, то оба соответствующих условных оператора срабатывают обязательно и переменные curLo и curHi получают те же самые начальные значения, которые Вы им приписываете в блоке if (start) {...}.
Ваш вариант тоже вполне рабочий, но на алгоритме он не сказывается никак. Поэтому эта переделка не может повлиять на наличие или отсутствие ошибок.
Обратите еще раз внимание на мой предыдущий пост. Проблема возникает не при переходе к новым суткам, и не при старте советника, а при тестировании т/ф Н1. Из предложенного к тестированию интервала проблема возникает только один раз 10.08.2007 и продолжается 3 минуты с 17:00 до 17:03. За это время генерится 28 тиков с расхождениями в значениях High для М1 и Н1. Привожу соответствующую картинку.
Если Вам не трудно, прогоните советник (исправленный Вами код) на том интервале, о котором я просил. Только поправьте использование комментариев. Сейчас в Вашем коде он сравнивает с т/ф Д1 и в этом режиме никаких ошибок нет. Нужно, чтобы он сравнивал с Н1.
Немного изменил код, для сохранения корректности в особо патологических случаях ( у меня для 2007.01.01 всего одна свеча на М1, аналогично и на Н1 и Д1). Прогнал тест с 2007.01.01 по 2007.08.11. Для Д1 получилось 4 ошибочных случая, для Н1 - 2. Все ошибки случаются при переходе на новую свечу на старшем т/ф. Желающие могут убедиться.
Возможностей подсматривать в будущее это не дает. По крайней мере в том варианте подсматривания, который я проверял.
Спасибо, конечно, Rosh за Вашу доработку, но в ней по-моему не было необходимости.
Возможно Вы не обратили внимание, но в моем коде в функции init() стоит следующий блок:
Если Вам не трудно, прогоните советник (исправленный Вами код) на том интервале, о котором я просил. Только поправьте использование комментариев. Сейчас в Вашем коде он сравнивает с т/ф Д1 и в этом режиме никаких ошибок нет. Нужно, чтобы он сравнивал с Н1.
Лучше бы Вам самим выложить код. если Вы обратили внимание, то при тестировании моего кода на H1 значения не будут инициализированы:
То есть, будет именно так как я написал. Если вам сложно выкладывать код , чтобы я не догадывался о чем идет речь, тогда уж сами разбирайтесь, у меня есть и другие дела, кроме упраженений в телепатии.
Право, не понимаю почему Вы раздражаетесь.
Как я и написал на прошлой странице, когда выкладывал советника с результатами, он предназначен для тестирования исключительно на М1. При этом он сравнивает формируемые им самостоятельно High и Low, с High и Low старшего т/ф, которыми могут быть Н1 или Д1, в зависимости от того, как расставлены комментарии в тексте процедуры start().
Признаюсь честно, поставив return(-1); в процедуре init() я полагал, что это вообще остановит работу советника и, таким образом, запустить его удастся только на М1. Однако, теперь, благодаря Вашему посту, я убедился, что его можно запустить на любом т/ф. В связи с этим хочу подчеркнуть: идея этого советника в попытке подсмотреть будущее с младшего т/ф (конкретно - М1) на старшем т/ф (конкретно - Н1 или Д1). Поэтому и запускать его следует только на М1. Что может показать тестирование на Н1 я даже не знаю.
Код советника я выложил непосредственно перед Вашим постом. Этот код можно использовать непосредственно для сравнения данных М1 с данными Н1. В тексте советника есть четкие указания о тех (элементарных) изменениях, которые нужно сделать, чтобы он сравнивал данные М1 с данными Д1. Так что и здесь мне непонятно чем Вы недовольны.
И последнее. Ваш код подходит для прогона в тестере также как и мой. Вопрос только в том, чтобы сделать это.
Если у Вас есть другие дела, то не смею Вам мешать. Я обращался к Вам не с личной просьбой, а как к представителю MQ в связи с возможным обнаружением некоторых глюков в тестере.
Право, не понимаю почему Вы раздражаетесь.
Как я и написал на прошлой странице, когда выкладывал советника с результатами, он предназначен для тестирования исключительно на М1. При этом он сравнивает формируемые им самостоятельно High и Low, с High и Low старшего т/ф, которыми могут быть Н1 или Д1, в зависимости от того, как расставлены комментарии в тексте процедуры start().
Признаюсь честно, поставив return(-1); в процедуре init() я полагал, что это вообще остановит работу советника и, таким образом, запустить его удастся только на М1. Однако, теперь, благодаря Вашему посту, я убедился, что его можно запустить на любом т/ф. В связи с этим хочу подчеркнуть: идея этого советника в попытке подсмотреть будущее с младшего т/ф (конкретно - М1) на старшем т/ф (конкретно - Н1 или Д1). Поэтому и запускать его следует только на М1. Что может показать тестирование на Н1 я даже не знаю.
Код советника я выложил непосредственно перед Вашим постом. Этот код можно использовать непосредственно для сравнения данных М1 с данными Н1. В тексте советника есть четкие указания о тех (элементарных) изменениях, которые нужно сделать, чтобы он сравнивал данные М1 с данными Д1. Так что и здесь мне непонятно чем Вы недовольны.
И последнее. Ваш код подходит для прогона в тестере также как и мой. Вопрос только в том, чтобы сделать это.
Если у Вас есть другие дела, то не смею Вам мешать. Я обращался к Вам не с личной просьбой, а как к представителю MQ в связи с возможным обнаружением некоторых глюков в тестере.
2007.08.14 16:29:03 2007.08.10 23:59 future-2h EURUSD,Daily: 2007.08. 10 23:59:59, curHi=1.3693, HiH1=1.3702, curLo=1.3693, LoH1=1.3689
2007.08.14 16:29:02 2007.08.03 23:59 future-2h EURUSD,Daily: 2007.08. 03 23:59:59, curHi=1.3773, HiH1=1.3787, curLo=1.3773, LoH1=1.3772
2007.08.14 16:29:02 2007.07.27 23:59 future-2h EURUSD,Daily: 2007.07. 27 23:59:59, curHi=1.3635, HiH1=1.3641, curLo=1.3635, LoH1=1.3627
2007.08.14 16:29:02 2007.07.20 23:59 future-2h EURUSD,Daily: 2007.07. 20 23:59:59, curHi=1.3826, HiH1=1.3827, curLo=1.3826, LoH1=1.3821
2007.08.14 16:29:01 2007.07.16 23:59 future-2h EURUSD,Daily: 2007.07. 16 23:59:59, curHi=1.3772, HiH1=1.3773, curLo=1.3772, LoH1=1.3772
2007.08.14 16:29:01 2007.07.13 23:59 future-2h EURUSD,Daily: 2007.07. 13 23:59:59, curHi=1.3782, HiH1=1.3787, curLo=1.3782, LoH1=1.3780
2007.08.14 16:29:01 2007.07.06 23:59 future-2h EURUSD,Daily: 2007.07. 06 23:59:59, curHi=1.3625, HiH1=1.3630, curLo=1.3625, LoH1=1.3623
2007.08.14 16:29:01 2007.07.02 00:00 future-2h EURUSD,Daily: Период тестирования не соответствует задаче
2007.08.14 16:29:01 future-2h started for testing
2007.08.14 16:28:34 2007.08.10 22:59 future-2h EURUSD,H1: Работа закончена
2007.08.14 16:28:32 2007.07.02 00:00 future-2h EURUSD,H1: Период тестирования не соответствует задаче
2007.08.14 16:28:32 future-2h started for testing
2007.08.14 16:28:22 2007.08.10 22:59 future-2h EURUSD,M1: Работа закончена
2007.08.14 16:28:19 2007.07.02 00:00 future-2h EURUSD,M1: Период тестирования 1 минут
2007.08.14 16:28:19 future-2h started for testing
2007.08.14 16:24:28 2007.08.10 22:59 future-2h EURUSD,M1: Работа закончена
2007.08.14 16:24:28 2007.08.06 00:00 future-2h EURUSD,M1: Период тестирования 1 минут
на
и прогнал опять на трейх периодах на том же интервале с 2007.07.01 по 2007.08.11 :
2007.08.14 16:32:03 2007.08.10 23:59 future-2h EURUSD,Daily: Работа закончена
2007.08.14 16:32:03 2007.07.27 23:59 future-2h EURUSD,Daily: 2007.07. 27 23:59:59, curHi=1.3753, HiH1=1.3753, curLo=1.3627, LoH1=1.3626
2007.08.14 16:32:01 2007.07.02 00:00 future-2h EURUSD,Daily: Период тестирования не соответствует задаче
2007.08.14 16:32:01 future-2h started for testing
2007.08.14 16:31:56 2007.08.10 22:59 future-2h EURUSD,H1: Работа закончена
2007.08.14 16:31:54 2007.07.02 00:00 future-2h EURUSD,H1: Период тестирования не соответствует задаче
2007.08.14 16:31:54 future-2h started for testing
2007.08.14 16:31:48 2007.08.10 22:59 future-2h EURUSD,M1: Работа закончена
2007.08.14 16:31:46 2007.07.02 00:00 future-2h EURUSD,M1: Период тестирования 1 минут
2007.08.14 16:31:46 future-2h started for testing
Понятно. Вы все сделали правильно. А запускать этот советник надо только на М1. По-моему я написал это вполне определенно. Запускается советник на М1, а тестирует при этом совпадение данных по High и Low периода М1 с периодом Н1 или Д1. Если бы была возможность подглядывания в будущее, то данные старшего т/ф позволяли бы узнать High и Low раньше, чем эти High и Low достигаются на М1. Вот и все.
Результат Вашего теста Д1 соответствует моему, на этом интервале для Д1 я тоже получил отсутствие ошибок. Но тест Н1 не подтверждает того, что было получено мною и выложено чуть раньше. Анализировать код незачем. Как видите он подтверждает нормальную работу тестера.
Если Вы считаете, что этого достаточно, то на этом можно и остановиться. Если же хотите убедиться, что это не случайно, не благодаря тому, что период слишком мал, то прогоните эти же два теста на периоде подлиннее. За год, например, или с начала 2007.
PS
На всякий случай повторюсь. Тестировать только на периоде М1. Только в режиме все тики.
Спасибо за участие.
Эти тесты реально помогают улучшить тестер в MetaTrader 4. Особенно с исходниками.