Уважаемые, предлагаю создать тут архив версий МТ. А то, иногда, с обновлением могут выскакивать неожиданные ошибки и нужно откатиться на предыдущую версию...
Мне вот сейчас нужен билд 2007. Есть у кого? Поделитесь, пожалуйста.
Есть тут человек, который коллекцию собирает. Но насколько помню, его посты со ссылками на архивы версий MT иногда удаляют, чтобы прогресс не тормозил. ))
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Andrey Khatimlianskii, 2019.03.15 23:03
Я переехал на другой гугл-аккаунт. Новая ссылка вот.
Если нужны другие билды, говорите, есть много.
ссылку убили мою тут,
разработчики предлагают скачивать только из проверенных источников
если хочешь рискнуть мой билд испытать пиши в личку
самому надо сохранять рабочие стабилки в портабле или архив и вообще с осознанием обновляться на тестовые билды
в ДЦ сейчас 2007 билд может
ссылку убили мою тут,
разработчики предлагают скачивать только из проверенных источников
если хочешь рискнуть мой билд испытать пиши в личку
самому надо сохранять рабочие стабилки в портабле или архив и вообще с осознанием обновляться на тестовые билды
в ДЦ сейчас 2007 билд может
Правильно делают, что убирают старые версии.
Писать надо нормально программы. Не игнорировать предупреждения. Инициализировать переменные, и по максимуму не использовать глобальные. Избегать потенциально опасных моментов в коде.
У меня на десятки тысяч строк кода - ни одного предупреждения на strict-режиме. Половина поделок из КодоБазы - даже без strict'a выдают предупреждения, хотя в них нет даже тысячи строк. А потом начинаются разговоры про то, что "в старом билде все работало, а в новом - перестало"...
Правильно делают, что убирают старые версии.
Писать надо нормально программы. Не игнорировать предупреждения. Инициализировать переменные, и по максимуму не использовать глобальные. Избегать потенциально опасных моментов в коде.
У меня на десятки тысяч строк кода - ни одного предупреждения на strict-режиме. Половина поделок из КодоБазы - даже без strict'a выдают предупреждения, хотя в них нет даже тысячи строк. А потом начинаются разговоры про то, что "в старом билде все работало, а в новом - перестало"...
Это программа марсохода? Что можно описывать в таком количестве строк???
Есть тут человек, который коллекцию собирает. Но насколько помню, его посты со ссылками на архивы версий MT иногда удаляют, чтобы прогресс не тормозил. ))
Спасибо. Скачал.
ссылку убили мою тут,
разработчики предлагают скачивать только из проверенных источников
если хочешь рискнуть мой билд испытать пиши в личку
самому надо сохранять рабочие стабилки в портабле или архив и вообще с осознанием обновляться на тестовые билды
в ДЦ сейчас 2007 билд может
На тестовые не обновляюсь. А сохранять теперь буду )))
Правильно делают, что убирают старые версии.
Писать надо нормально программы. Не игнорировать предупреждения. Инициализировать переменные, и по максимуму не использовать глобальные. Избегать потенциально опасных моментов в коде.
У меня на десятки тысяч строк кода - ни одного предупреждения на strict-режиме. Половина поделок из КодоБазы - даже без strict'a выдают предупреждения, хотя в них нет даже тысячи строк. А потом начинаются разговоры про то, что "в старом билде все работало, а в новом - перестало"...
Георгий, почитай мой последний пост в теме. Я нашёл источник проблемы. Он не в моём коде.
Спасибо. Скачал.
На тестовые не обновляюсь. А сохранять теперь буду )))
Георгий, почитай мой последний пост в теме. Я нашёл источник проблемы. Он не в моём коде.
Я прочитал.
Источник проблемы в том, что разработчики и ты - подошли к ситуации несколько по-разному. Грубо говоря, "не поняли друг друга". И именно поэтому я и настаиваю на том, что код всегда должен быть предельно простой и ясный, с исключением любых мест, где могут быть двусмысленности.
Помню, еще во времена, когда МТ5 лишь пробивал себе дорогу - все удивлялся, народ массово использует переменные без инициализации, считая, что в них будет нуль.
Как тут не вспомнить анекдот:
Мальвина дала Буратине три яблока. Два он съел. Сколько яблок осталось у Буратины?
Программист N1:
- Неизвестно сколько. Никто ж не знает, сколько яблок было у него до этого !
Мораль: обнуляйте начальные переменные.
Программист N2
- Неизвестно сколько. Может быть, пока Мальвина отдавала яблоки, их ел еще и Пьеро ?
Мораль: не используйте глобальные переменные.
Программист N3
- Неизвестно сколько. Там не сказано, что Буратино ел именно яблоки, сказано, что съел два, а чего - неясно. Кроме того, с учетом того что имя "Буратино" не склоняется - Буратине и Буратины - это разные переменные.
Мораль: следите за синтаксисом
Спасибо. Скачал.
На тестовые не обновляюсь. А сохранять теперь буду )))
Георгий, почитай мой последний пост в теме. Я нашёл источник проблемы. Он не в моём коде.
А ведь источником проблемы было "не почитал документацию", а не новый билд. Поэтому вы лукавите, говоря о не вашем коде.
1:
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Ну и что прикажете делать дальше?
Сергей Таболин, 2019.06.16 00:17
Нашёл я причину этого безобразия.
Дело вот в этом:
//--- пропустить бесполезные проходы оптимизации //* if(!check_init && (MQLInfoInteger(MQL_OPTIMIZATION) || MQLInfoInteger(MQL_TESTER))) { if(period_HMA7C == 0 && move_profit) TesterStop(); if(period_HMA7C == 0 && move_stop) TesterStop(); if(period_HMA7C == 0 && shift_correction_HMA7C != 5) TesterStop(); if(indent_channel_line_a0 == 0.0 && indent_channel_line_a4 != 0.0) TesterStop(); if(indent_channel_line_a4 == 0.0 && indent_channel_line_a0 != 0.0) TesterStop(); if((stop_loss_buy > 0 && stop_loss_buy < 700) || (stop_loss_sell > 0 && stop_loss_sell < 700)) TesterStop(); check_init = true; } //*/
Оказывается в новом релизе после TesterStop() запускается ещё и OnTester(), хотя, по уму, запускаться не должен.
Естественно, никакие данные не подготавливаются, вот и получается чёрте что.
Косяк МТ 2085.
2:
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Ну и что прикажете делать дальше?
Сергей Таболин, 2019.06.16 09:02
Извиняюсь. В описании как раз и написано, что после вызывается OnTester(). (((
Приходится ещё и там делать проверки. Попробую заменить на ExpertRemove()...
И ведь далее опять "попробую"... А потом, если ваши пробы не увенчаются успехом, то виноваты опять MQ ?
Не помню, но по-моему есть специальная функция для пропуска "плохих" проходов. И как раз то, что вы хотите попробовать, разработчики не рекомендовали использовать - опять-таки - если мне память не изменяет.
Но что важно в моём посыле - прежде, чем взваливать вину на разработчиков, необходимо сначала ознакомиться с документацией, спросить на форуме решение, и лишь затем, и только в случае реально найденной ошибки - отписать багрепорт с воспроизводящим его минимальным кодом. Вот это будет серьёзно, а так...
А ведь источником проблемы было "не почитал документацию", а не новый билд. Поэтому вы лукавите, говоря о не вашем коде.
1:
2:
И ведь далее опять "попробую"... А потом, если ваши пробы не увенчаются успехом, то виноваты опять MQ ?
Не помню, но по-моему есть специальная функция для пропуска "плохих" проходов. И как раз то, что вы хотите попробовать, разработчики не рекомендовали использовать - опять-таки - если мне память не изменяет.
Но что важно в моём посыле - прежде, чем взваливать вину на разработчиков, необходимо сначала ознакомиться с документацией, спросить на форуме решение, и лишь затем, и только в случае реально найденной ошибки - отписать багрепорт с воспроизводящим его минимальным кодом. Вот это будет серьёзно, а так...
Артём, проблема в новом билде!
Скажите, вот Вы написали код, который работает без ошибок. Долго работает. И вдруг, после нового релиза МТ он валиться с кучей ошибок. Кто виноват? Тем более, если учесть, что документация, как многие знают, далеко не всегда поспевает описывать новшества.
Так вот, мой код работал без ошибок.
Я использовал вот это:
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Чем заменить INIT_PARAMETERS_INCORRECT ? Найдено решение )))
Сергей Таболин, 2019.04.24 08:48
Нашёл ответ на свой же вопрос в теме:
Всё оказалось довольно просто. Достаточно перенести проверку на недопустимые параметры из OnInit() в OnTick()
bool check_init = false; // флаг проверки входных параметров .......... //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { //--- пропустить бесполезные проходы оптимизации //* if(!check_init && (MQLInfoInteger(MQL_OPTIMIZATION) || MQLInfoInteger(MQL_TESTER))) { if(period_HMA7C == 0 && move_profit) ExpertRemove(); if(period_HMA7C == 0 && move_stop) ExpertRemove(); if(period_HMA7C == 0 && shift_correction_HMA7C != 5) ExpertRemove(); check_init = true; } //*/ //+------------------------------------------------------------------+
Проверено! Работает. Генетика не валится )))
Теперь, после возникших проблем, я добавил ещё пару строк:
bool check_init = false; // флаг проверки входных параметров bool tester_stop = true; // флаг проверки выхода по TesterStop ............. void OnTick() { //--- пропустить бесполезные проходы оптимизации //* if(!check_init && (MQLInfoInteger(MQL_OPTIMIZATION) || MQLInfoInteger(MQL_TESTER))) { if(period_HMA7C == 0 && move_profit) TesterStop(); if(period_HMA7C == 0 && move_stop) TesterStop(); if(period_HMA7C == 0 && shift_correction_HMA7C != 5) TesterStop(); if(indent_channel_line_a0 == 0.0 && indent_channel_line_a4 != 0.0) TesterStop(); if(indent_channel_line_a4 == 0.0 && indent_channel_line_a0 != 0.0) TesterStop(); if((stop_loss_buy > 0 && stop_loss_buy < 700) || (stop_loss_sell > 0 && stop_loss_sell < 700)) { Print("Результат в OnTester() должен быть -99999999999.99"); TesterStop(); } check_init = true; tester_stop = false; } //*/ ......... }
Вызов TesterStop() считается нормальным завершением тестирования, и поэтому будет вызвана функция OnTester() с отдачей тестеру стратегий всей накопленной торговой статистики и значения критерия оптимизации.
Предполагается, по уму, что передача должна быть выполнена немедленно, без выполнения остального кода. Так?
А на деле TesterStop() Вовсе не останавливает тест!
double OnTester() { if(tester_stop) return(-99999999999.99); double equity_dd_percent = TesterStatistics(STAT_EQUITY_DDREL_PERCENT); if(equity_dd_percent > 0.0) { equity_dd_percent = 100.0 / equity_dd_percent; } else equity_dd_percent = 1.0; double param = 0.0; double profit = TesterStatistics(STAT_PROFIT); double stability = 0.0; int balance_arr_size = ArraySize(balance_arr) - 1; int alpha_size = balance_arr_size - 1; int beta_size = alpha_size - 1; double trade2time = ratioTrades2Time(TesterStatistics(STAT_TRADES)); double max_balance = balance_arr[0]; //+------------------- if(balance_arr[balance_arr_size-1] - balance_arr[0] == 0.0) return(-99999999999.88); //+-------------------
Я ввёл "недопустимый" параметр и получил такой вот результат:
LL 0 11:30:20.816 Core 1 2016.10.01 00:00:00 Советник получил MAGIC = 153128312914612747. QN 0 11:30:20.816 Core 1 2016.10.03 00:00:00 Результат в OnTester() должен быть -99999999999.99 NJ 3 11:30:20.816 Core 1 TesterStop() called on 0% of testing interval CD 0 11:30:20.816 Core 1 final balance 10000.00 USD QF 0 11:30:20.816 Core 1 OnTester result -99999999999.88
Так что это косяк! и Косяк именно MQ.
Считаю, что при таком раскладе TesterStop() и ExpertRemove() должны, если уж не могут тотчас передать управление в OnTester(), возвращать true. Чтобы можно было как-то реагировать, например так:
bool tester_stop = false; // флаг проверки выхода по TesterStop ....... void OnTick() { //--- пропустить бесполезные проходы оптимизации if(!check_init && (MQLInfoInteger(MQL_OPTIMIZATION) || MQLInfoInteger(MQL_TESTER))) { if(недопустимый параметр) tester_stop = TesterStop(); ........ } double OnTester() { if(tester_stop) return(-99999999999.99);
В таком случае можно будет получить именно тот результат, который логически ожидается, а не устраивать танцы с бубном и предусматривать все ошибки, которые теоретически могут возникнут в результате остановки теста.
Артём, проблема в новом билде!
Скажите, вот Вы написали код, который работает без ошибок. Долго работает. И вдруг, после нового релиза МТ он валиться с кучей ошибок. Кто виноват? Тем более, если учесть, что документация, как многие знают, далеко не всегда поспевает описывать новшества.
Так вот, мой код работал без ошибок.
Я использовал вот это:
Теперь, после возникших проблем, я добавил ещё пару строк:
Предполагается, по уму, что передача должна быть выполнена немедленно, без выполнения остального кода. Так?
А на деле TesterStop() Вовсе не останавливает тест!
Я ввёл "недопустимый" параметр и получил такой вот результат:
Так что это косяк! и Косяк именно MQ.
Считаю, что при таком раскладе TesterStop() и ExpertRemove() должны, если уж не могут тотчас передать управление в OnTester(), возвращать true. Чтобы можно было как-то реагировать, например так:
В таком случае можно будет получить именно тот результат, который логически ожидается, а не устраивать танцы с бубном и предусматривать все ошибки, которые теоретически могут возникнут в результате остановки теста.
Все ваши выкладки и тесты нужно не мне показывать, и не с известной долей сарказма и раздражения, а сухо и лаконично в тему "Ошибки, баги, вопросы". Если конечно хотите быть услышанным и получить ответ.
ЗЫ. И желательно забыть слова типа "косяк", "вина", "танцы с бубном" и прочие "дерьмокоды" при багрепортах - всё люди, и вы тоже не без допущения ошибок. Да и "психованные" заявления выглядят весьма не серьёзно и не конструктивно.
Все ваши выкладки и тесты нужно не мне показывать, и не с известной долей сарказма и раздражения, а сухо и лаконично в тему "Ошибки, баги, вопросы". Если конечно хотите быть услышанным и получить ответ.
Извините, если Вам так показалось. Раздражение есть, конечно, но ведь как ему не быть, когда на ровном месте возникают проблемы? А сарказм... - скорее недоумение по поводу очевидных, на мой взгляд, ляпов. ))
Что касается указанной темы, то что-то мне кажется, что вопрос может там запросто "затеряться". Поэтому думаю, что новая тема с конкретной проблемой более эффективна? Или нет?
В любом случае, Вы, как модератор, скорее можете обратить внимание разработчиков на некоторые проблемы, если сами убедитесь в их существовании )))
Попробую добавить вопрос туда...
![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Уважаемые, предлагаю создать тут архив версий МТ. А то, иногда, с обновлением могут выскакивать неожиданные ошибки и нужно откатиться на предыдущую версию...
Мне вот сейчас нужен билд 2007. Есть у кого? Поделитесь, пожалуйста.