Ошибки, баги, вопросы - страница 1904

 
Artyom Trishkin:

если есть несколько экземпляров, то зачем дублировать один и тот же расчёт в других экземплярах этого же класса?

А зачем вообще эти другие экземпляры, если расчет один?


Artyom Trishkin:
Андрей, можно чуть более развёрнуто? Не совсем понял.

Лучше дай более детальное описание задачи, тогда и ответ более конкретный получится.

 
Artyom Trishkin:

Расчёт не уникальный - если есть единственный экземпляр класса, то расчёт должен быть, если есть несколько экземпляров, то зачем дублировать один и тот же расчёт в других экземплярах этого же класса? Это занимает ресурсы.

В то же время делать в родительском классе ещё один длинный цикл для расчёта этих самых данных - тоже не оптимально (уже два длинных цикла), да и класс-потомок тогда уже станет не самодостаточным.

Я предложил, как сделать то, что нужно, без дублирования. Про потомков речи не было.
 

Доброго времени суток!

Спустя 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

'NDD' - semicolon expected e_plat2.mq4 49 23

'UseECN' - undeclared identifier e_plat2.mq4 144 6

'NDD' - undeclared identifier e_plat2.mq4 144 13

'NDD' - some operator expected e_plat2.mq4 144 13

'UseECN' - undeclared identifier e_plat2.mq4 172 6

'4206' - case value already used e_plat2.mq4 643 8


Если не затруднит, подскажите в чем может быть причина?




 
platoshkasexy:

UseECN\NDD эта команда дальше в советнике много раз повторяется и в каждой строке где она есть вылетает ошибка

Замените по всему коду "UseECN\NDD" на "UseECN_NDD" (Ctrl+H)

 
Andrey Khatimlianskii:

Замените по всему коду "UseECN\NDD" на "UseECN_NDD" (Ctrl+H)


Огромное Спасибо! Вроде скомпилировалось!

Буду тестить...

 
Andrey Khatimlianskii:

А зачем вообще эти другие экземпляры, если расчет один?


Лучше дай более детальное описание задачи, тогда и ответ более конкретный получится.

В классе есть цикл, в котором собираются данные по всем ордерам и позициям 1) на счёте и 2) только те, которые соответствуют фильтру по m_symbol и m_magic.

В итоге по завершению цикла имеем данные 1) по всему счёту и 2) только по ордерам и позициям, принадлежащим советнику.

Но если советник использует несколько символов или магиков, то для сбора статистики по каждому символу/магику нужно создавать экземпляры класса. Вот тут и встаёт вопрос: а зачем в этих новых экземплярах собирать статистику (1), которая уже была собрана в самом первом экземпляре класса.

Отсюда и вопрос был - как внутри класса узнать, что его экземпляр единственный, а значит нужно собирать статистику 1, или, если экземпляр не единственный, то статистику 1 не собирать, а выдавать её из самого первого экземпляра (тут тоже ещё не понятно как внутри класса, если он не единственный, перенаправить запрос в самый первый экземпляр класса для выдачи статистики 1)

 
Artyom Trishkin:

В классе есть цикл, в котором собираются данные по всем ордерам и позициям 1) на счёте и 2) только те, которые соответствуют фильтру по m_symbol и m_magic.

В итоге по завершению цикла имеем данные 1) по всему счёту и 2) только по ордерам и позициям, принадлежащим советнику.

Но если советник использует несколько символов или магиков, то для сбора статистики по каждому символу/магику нужно создавать экземпляры класса. Вот тут и встаёт вопрос: а зачем в этих новых экземплярах собирать статистику (1), которая уже была собрана в самом первом экземпляре класса.

Отсюда и вопрос был - как внутри класса узнать, что его экземпляр единственный, а значит нужно собирать статистику 1, или, если экземпляр не единственный, то статистику 1 не собирать, а выдавать её из самого первого экземпляра (тут тоже ещё не понятно как внутри класса, если он не единственный, перенаправить запрос в самый первый экземпляр класса для выдачи статистики 1)

1) Собирать статистику по всем магикам/инструментам в рамках одного класса. Список магиков задавать при инициализации, складывать в массив.

2) Как уже посоветовали, сделать результаты статистики №1 статичными, и при их наличии не запускать пересчет.

 
Artyom Trishkin:

В классе есть цикл, в котором собираются данные по всем ордерам и позициям 1) на счёте и 2) только те, которые соответствуют фильтру по m_symbol и m_magic.

В итоге по завершению цикла имеем данные 1) по всему счёту и 2) только по ордерам и позициям, принадлежащим советнику.

Но если советник использует несколько символов или магиков, то для сбора статистики по каждому символу/магику нужно создавать экземпляры класса. Вот тут и встаёт вопрос: а зачем в этих новых экземплярах собирать статистику (1), которая уже была собрана в самом первом экземпляре класса.

Отсюда и вопрос был - как внутри класса узнать, что его экземпляр единственный, а значит нужно собирать статистику 1, или, если экземпляр не единственный, то статистику 1 не собирать, а выдавать её из самого первого экземпляра (тут тоже ещё не понятно как внутри класса, если он не единственный, перенаправить запрос в самый первый экземпляр класса для выдачи статистики 1)

Если английский не проблема - я в блоге публиковал пример анализа гиперкуба торговой информации. Проходим по истории один раз, потом из гиперкуба запрашиваем информацию в нужных (разных) разрезах. Там, конечно, есть селекторы и по магику и по символу.
 
Artyom Trishkin:

Отсюда и вопрос был - как внутри класса узнать, что его экземпляр единственный, а значит нужно собирать статистику 1, или, если экземпляр не единственный, то статистику 1 не собирать, а выдавать её из самого первого экземпляра

Вам ответили уже:

Еще лучше все уникальные расчеты вынести в отдельный класс и сделать его синглтонтон.

При первом обращении к синглтону считать статистику, затем только получать.


 

Разработчиков просьба пояснить, почему типовое событие OnTesterPass при оптимизации количества вариантов большего, чем 8.6е+18, вызывается только при создании нового поколения?

И почему про эту особенность нет ни единого слова в описании в справке?

Почему я должен перелопачивать пол эксперта в поисках ответа, почему эта функция в одном эксперте работает как надо, а в другом результаты оптимизации записывает в файл только на новом поколении?


Как обойти это ограничение?

Причина обращения: