Сегодня было 2 бага.
...
Вопрос: в чём причина?
Сегодня было 2 бага.
...
Вопрос: в чём причина?
А вот вопрос про перекомпиляцию (или, точнее говоря, изменение даты последнего изменения файла, посколько перекомпиляцию я не могу точно проверить) вполне можно и узнать (зачем она нужна).
Поищите по форуму про перекомпиляцию. О багах: детально и точно, иначе художественная проза.
Так я и описал детально и точно. Один и тот же советник в разных копиях терминала работает по-разному, куда уж точнее.
Первый: советник выставил стоп-лосс туда куда не надо.
Второй: советники неверно отобразили первую строку комментария.
Баги советников я исключаю.
А почему? Как раз их-то и не надо исключать...
Есть терминал №1, в котором я пишу советник. Есть еще несколько рабочих терминалов, которые торгуют на счетах. Каждую новую версию советника я копирую из терминала №1 во все остальные терминалы, где они потом работают (копирую ex4 и mq4).
Я в торговые терминалы копирую только mq4. Затем их все по очереди перезагружаю. Они сами делают ex4.
В первом баге только в одном терминале советник отработал как надо, в остальных терминалах та же копия советника выставляла стоп-лосс неверно, пока я не заменил файлы советников.
Ну вот видите, Вы сами нашли отличное решение. Баг был связан со старыми файлами советников. При обновлении советников удаляйте старые ex4 и кэш-файл mqlcache.dat. Копируйте только mq4 и обязательно пререзагружайте терминалы. Пусть они сами создадут ex4.
Во втором баге после копирования советника из терминала №1 во все остальные, на одном из терминалов верхняя строка комментария стала отображаться неправльно (у остальных терминалов с тем же советником всё работало нормально). Замена файла советника на тот же самый решила проблему.
Такое ощущуние, что Вы просто копировали файлы советников в торовые терминалы и не перезагружали их. По крайней мере, Вы этого не говорите.
Еще я заметил что каждый терминал перекомпилирует скопированный в него советник. Зачем?
Чтобы он работал. Не компилированный не будет работать
Первый: советник выставил стоп-лосс туда куда не надо.
Второй: советники неверно отобразили первую строку комментария.
Баги советников я исключаю.
А почему? Как раз их-то и не надо исключать...
Описываю второй баг (первый баг - аналогичен).
Есть, условно говоря, "терминал №1" (в нём же метаедитор, всё в отдельной папке). В нём я пишу код советника. Компилирую в нём же. Советник (mq4 и ex4) находится в его подпапке experts.
Также есть, условно говоря, "терминал №2", и "другие терминалы" ("другие терминалы" - это несколько терминалов, они отработали одинаково, поэтому объединил их в одну группу). Все они каждый в отдельной папке.
Все терминалы выключены (не открыты как приложения).
1. Открываю Метаедитор "терминала №1" (в котором я пишу советник).
2. Модифицирую исходный код советника.
3. Компилирую советник в открытом метаедиторе (нажимаю F5).
4. Закрываю метаедитор.
5. Копирую советник (оба файла - mq4 и ex4) из "терминала №1" в "терминал №2" и в "другие терминалы" (в их папки experts). Везде там уже есть файлы с такими же именами, поэтому копирование происходит с заменой файлов.
6. Запускаю "терминал №2" и "другие терминалы".
7. Советник в "других терминалах" работает верно, а советник в "терминале №2" работает неверно.
8. Закрываю все терминалы.
9. Запускаю "терминал №2".
10. Баг повторяется (советник работает неверно).
11. Закрываю "терминал №2".
12. Запускаю "терминал №2".
13. Баг повторяется (советник работает неверно).
14. Закрываю "терминал №2".
15. Запускаю один из "других терминалов".
16. Советник в нём работает правильно.
17. Закрываю этот терминал (открытых терминалов больше нет).
18. Копирую советник (mq4 и ex4) из "терминала №1" в "терминал №2" (т.е. это уже повторное копирование, которое уже было совершено в пункте 5. Файлы советника те же самые и за это время не модифицировались).
19. Запускаю "терминал №2".
20. Советник работает в нём правильно.
Таким образом, один и тот же код советника работал в разных терминалах по-разному. Отсюда вывод - баг не в коде советника. Более того, советник даже в одном терминале работал по-разному. Сам код советника настолько прост и понятен, что не понятно как он мог выдавать баги, и как они могли исчезнуть заменой советника на тот же самый.
Есть терминал №1, в котором я пишу советник. Есть еще несколько рабочих терминалов, которые торгуют на счетах. Каждую новую версию советника я копирую из терминала №1 во все остальные терминалы, где они потом работают (копирую ex4 и mq4).
Я в торговые терминалы копирую только mq4. Затем их все по очереди перезагружаю. Они сами делают ex4.
В первом баге только в одном терминале советник отработал как надо, в остальных терминалах та же копия советника выставляла стоп-лосс неверно, пока я не заменил файлы советников.
Ну вот видите, Вы сами нашли отличное решение. Баг был связан со старыми файлами советников. При обновлении советников удаляйте старые ex4 и кэш-файл mqlcache.dat. Копируйте только mq4 и обязательно пререзагружайте терминалы. Пусть они сами создадут ex4.
ex4 был заменён. А вот mqlcache.dat я не удалял. Копирую советники всегда при выключенных терминалах (иначе там сбиваются настройки советника).
Такое ощущуние, что Вы просто копировали файлы советников в торовые терминалы и не перезагружали их. По крайней мере, Вы этого не говорите.
Еще я заметил что каждый терминал перекомпилирует скопированный в него советник. Зачем?
Чтобы он работал. Не компилированный не будет работать
Из терминала №1 копирую mq4 и ex4 в терминал №2.
Запускаю терминал №2.
Сразу после запуска файл ex4 изменяется (меняется дата его последнего изменения), хотя изменяться ему незачем, он и так является компилированным кодом и может сам работать безо всяких изменений. Подтверждение тому в следующем: достаточно скопировать только ex4 (без mq4), и всё будет работать. В этом случае при запуске терминала никакой перекомпиляции не будет, дата модификации ex4 не изменится.
Таким образом, один и тот же код советника работал в разных терминалах по-разному. Отсюда вывод - баг не в коде советника. Более того, советник даже в одном терминале работал по-разному. Сам код советника настолько прост и понятен, что не понятно как он мог выдавать баги, и как они могли исчезнуть заменой советника на тот же самый.
Да, теперь понятно, что и как Вы делали...
Я считаю, что в файле mqlcache.dat что-то есть. Может быть он как-то некорректно переформируется для новых версий mq4. Попробуйте его удалять при обновлении советников. Я всегда удаляю. И начал это делать после того как обнаружил, что один из терминалов продолжает работать на старой версии советника после обновления файла mq4. Ex4 я не обновлял, т.к. никогда не видел смысла это делать. Предпочитаю работать с первоисточниками, в данном случае с mq4. Ex4 - это посредник, меняющийся от версии к версии МТ4. Не люблю посредников :-)
Вряд-ли... Это всего-лишь видимое действо... причём однозначное. Компиляция по определению не может выполниться сейчас так, а через 5 секунд по-другому. Результат компиляции всегда один и тот же. В этом процессе нет нечёткой логики и неоднозначных факторов. Поэтому для одного и того же mq4 всегда будет ставится в соответствие один и тот же ex4. Это аксиома. Нет смысла подвергать её сомнению.
Я считаю, что в файле mqlcache.dat что-то есть. Может быть он как-то некорректно переформируется для новых версий mq4. Попробуйте его удалять при обновлении советников. Я всегда удаляю. И начал это делать после того как обнаружил, что один из терминалов продолжает работать на старой версии советника после обновления файла mq4. Ex4 я не обновлял, т.к. никогда не видел смысла это делать. Предпочитаю работать с первоисточниками, в данном случае с mq4. Ex4 - это посредник, меняющийся от версии к версии МТ4. Не люблю посредников :-)
Если не обновить ex4, то обновление mq4 не приведет к перекомпиляции, и ex4 останется прежним несмотря на новый mq4. Поэтому то, что Вы обнаружили работу старого советника, - нормальное дело, так и должно быть.
Можете провести такой эксперимент.
Пусть условно есть 2 терминала: Т1 и Т2.
Пишем советник в Т1.
Копируем его mq4 и ex4 из Т1 в Т2.
Открываем папку experts терминала Т2.
Запускаем Т2, и в это время смотрим в его папку experts на файл ex4.
Смотрим, что время последнего изменения файла ex4 и mqlcache.dat изменилось в момент старта терминала Т2.
Закрываем Т2.
Запускаем снова.
Видим, что время последнего изменения ex4 не изменилось при очередном старте Т2. Таким образом, оно меняется только однажды.
Потом сделайте еще один эксперимент (если Вам это интересно, разумеется).
Измените исходный код советника в терминале Т1.
Скопируйте mq4 (без ex4) в терминал Т2 (там останется старый ex4)
Запустите Т2. Результат будет такой: файл ex4 не будет изменен терминалом (перекомпиляции не произойдет).
Если подвести итог, то получается:
Изменение (вероятно, перекомпиляция) существующего файла ex4 происходит только в одном случае:
если он соответствует имеющемуся mq4 по своему содержанию и был скомпилирован другим терминалом. Если код mq4 не соответствует ex4, либо этот ex4 уже был компилирован этим терминалом, то изменения ex4 не происходит.
Предположительный механизм таков.
Терминал Т1 при компиляции ex4 записывает в него какие-то свои уникальные данные.
Потом мы копируем ex4 и mq4 в терминал Т2.
Запускаем Т2.
Т2 при запуске компилирует mq4 и сравнивает с ex4. Если обнаруживается совпадение, то проверяется был ли ex4 компилирован собой
или другим терминалом. Если выясняется, что ex4 компилирован другим терминалом, то происходит его перезапись и в ex4 вносятся данные о себе (терминале Т2) (чтобы этот же терминал не
компилировал этот файл повторно).
Если содержимое ex4 не совпадает с mq4, или если ex4 компилирован собой (терминалом Т2), то перезаписи ex4 не происходит.
Так что одна и та же программа может работать по-разному в разных запусках.
Если не обновить ex4, то обновление mq4 не приведет к перекомпиляции, и ex4 останется прежним несмотря на новый mq4. Поэтому то, что Вы обнаружили работу старого советника, - нормальное дело, так и должно быть.
Если не обновить ex4, то обновление mq4 не приведет к перекомпиляции, и ex4 останется прежним несмотря на новый mq4. Поэтому то, что Вы обнаружили работу старого советника, - нормальное дело, так и должно быть.
Ошибок с перекопиляциям нет - все работает как задумано.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Первый: советник выставил стоп-лосс туда куда не надо.
Второй: советники неверно отобразили первую строку комментария.
Баги советников я исключаю.
Подробнее.
Есть терминал №1, в котором я пишу советник. Есть еще несколько рабочих терминалов, которые торгуют на счетах. Каждую новую версию советника я копирую из терминала №1 во все остальные терминалы, где они потом работают (копирую ex4 и mq4).
В первом баге только в одном терминале советник отработал как надо, в остальных терминалах та же копия советника выставляла стоп-лосс неверно, пока я не заменил файлы советников.
Во втором баге после копирования советника из терминала №1 во все остальные, на одном из терминалов верхняя строка комментария стала отображаться неправльно (у остальных терминалов с тем же советником всё работало нормально). Замена файла советника на тот же самый решила проблему.
Вопрос: в чём причина?
Еще я заметил что каждый терминал перекомпилирует скопированный в него советник. Зачем?