Ошибки, баги, вопросы - страница 1904
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
если есть несколько экземпляров, то зачем дублировать один и тот же расчёт в других экземплярах этого же класса?
А зачем вообще эти другие экземпляры, если расчет один?
Андрей, можно чуть более развёрнуто? Не совсем понял.
Лучше дай более детальное описание задачи, тогда и ответ более конкретный получится.
Расчёт не уникальный - если есть единственный экземпляр класса, то расчёт должен быть, если есть несколько экземпляров, то зачем дублировать один и тот же расчёт в других экземплярах этого же класса? Это занимает ресурсы.
В то же время делать в родительском классе ещё один длинный цикл для расчёта этих самых данных - тоже не оптимально (уже два длинных цикла), да и класс-потомок тогда уже станет не самодостаточным.
Доброго времени суток!
Спустя 4 года вернулся к одному Советнику ( купил его в 2013г. и забыл про него). Решил попробовать его снова. Но теперь система выдает ошибку в одной из строк кода. Видимо, что то поменялось за 4 года в Метатрейдере, так как раньше он точно работал. Сам в программировании "ноль", поэтому и покупал Советника))) Подскажите в чем может быть ошибка.
Вот часть кода
extern int Bperiod = 20; // Период усреднения основной линии индикатора.
extern int Bdeviation = 2; // Отклонение от основной линии.
extern int Bshift = 0; // Сдвиг индикатора относительно ценового графика.
extern int Baprice = 0; // CLOSE=0, OPEN=1, HIGH=2, LOW=3, MEDIAN=4, TYPICAL=5, WEIGHTED=6 .
extern string _6 = "========";
extern bool UseAutoDig = true; // Если=true->внешние переменные в пунктах умножаются на 10.
extern bool UseECN\NDD = true; // Если=true->ордера выставляются без стопов, затем модифицируются.
Ошибка выдается по последней строке в команде
UseECN\NDD эта команда дальше в советнике много раз повторяется и в каждой строке где она есть вылетает ошибка
Примеры ошибок
'\' - illegal escape sequence e_plat2.mq4 49 22
'UseECN' - undeclared identifier e_plat2.mq4 144 6
'NDD' - undeclared identifier e_plat2.mq4 144 13
'4206' - case value already used e_plat2.mq4 643 8
Если не затруднит, подскажите в чем может быть причина?
UseECN\NDD эта команда дальше в советнике много раз повторяется и в каждой строке где она есть вылетает ошибка
Замените по всему коду "UseECN\NDD" на "UseECN_NDD" (Ctrl+H)
Замените по всему коду "UseECN\NDD" на "UseECN_NDD" (Ctrl+H)
Огромное Спасибо! Вроде скомпилировалось!
Буду тестить...
А зачем вообще эти другие экземпляры, если расчет один?
Лучше дай более детальное описание задачи, тогда и ответ более конкретный получится.
В классе есть цикл, в котором собираются данные по всем ордерам и позициям 1) на счёте и 2) только те, которые соответствуют фильтру по m_symbol и m_magic.
В итоге по завершению цикла имеем данные 1) по всему счёту и 2) только по ордерам и позициям, принадлежащим советнику.
Но если советник использует несколько символов или магиков, то для сбора статистики по каждому символу/магику нужно создавать экземпляры класса. Вот тут и встаёт вопрос: а зачем в этих новых экземплярах собирать статистику (1), которая уже была собрана в самом первом экземпляре класса.
Отсюда и вопрос был - как внутри класса узнать, что его экземпляр единственный, а значит нужно собирать статистику 1, или, если экземпляр не единственный, то статистику 1 не собирать, а выдавать её из самого первого экземпляра (тут тоже ещё не понятно как внутри класса, если он не единственный, перенаправить запрос в самый первый экземпляр класса для выдачи статистики 1)
В классе есть цикл, в котором собираются данные по всем ордерам и позициям 1) на счёте и 2) только те, которые соответствуют фильтру по m_symbol и m_magic.
В итоге по завершению цикла имеем данные 1) по всему счёту и 2) только по ордерам и позициям, принадлежащим советнику.
Но если советник использует несколько символов или магиков, то для сбора статистики по каждому символу/магику нужно создавать экземпляры класса. Вот тут и встаёт вопрос: а зачем в этих новых экземплярах собирать статистику (1), которая уже была собрана в самом первом экземпляре класса.
Отсюда и вопрос был - как внутри класса узнать, что его экземпляр единственный, а значит нужно собирать статистику 1, или, если экземпляр не единственный, то статистику 1 не собирать, а выдавать её из самого первого экземпляра (тут тоже ещё не понятно как внутри класса, если он не единственный, перенаправить запрос в самый первый экземпляр класса для выдачи статистики 1)
1) Собирать статистику по всем магикам/инструментам в рамках одного класса. Список магиков задавать при инициализации, складывать в массив.
2) Как уже посоветовали, сделать результаты статистики №1 статичными, и при их наличии не запускать пересчет.
В классе есть цикл, в котором собираются данные по всем ордерам и позициям 1) на счёте и 2) только те, которые соответствуют фильтру по m_symbol и m_magic.
В итоге по завершению цикла имеем данные 1) по всему счёту и 2) только по ордерам и позициям, принадлежащим советнику.
Но если советник использует несколько символов или магиков, то для сбора статистики по каждому символу/магику нужно создавать экземпляры класса. Вот тут и встаёт вопрос: а зачем в этих новых экземплярах собирать статистику (1), которая уже была собрана в самом первом экземпляре класса.
Отсюда и вопрос был - как внутри класса узнать, что его экземпляр единственный, а значит нужно собирать статистику 1, или, если экземпляр не единственный, то статистику 1 не собирать, а выдавать её из самого первого экземпляра (тут тоже ещё не понятно как внутри класса, если он не единственный, перенаправить запрос в самый первый экземпляр класса для выдачи статистики 1)
Отсюда и вопрос был - как внутри класса узнать, что его экземпляр единственный, а значит нужно собирать статистику 1, или, если экземпляр не единственный, то статистику 1 не собирать, а выдавать её из самого первого экземпляра
Вам ответили уже:
Еще лучше все уникальные расчеты вынести в отдельный класс и сделать его синглтонтон.
Разработчиков просьба пояснить, почему типовое событие OnTesterPass при оптимизации количества вариантов большего, чем 8.6е+18, вызывается только при создании нового поколения?
И почему про эту особенность нет ни единого слова в описании в справке?
Почему я должен перелопачивать пол эксперта в поисках ответа, почему эта функция в одном эксперте работает как надо, а в другом результаты оптимизации записывает в файл только на новом поколении?
Как обойти это ограничение?