Новая версия платформы MetaTrader 5 build 1930: Плавающие окна графиков и .Net библиотеки в MQL5 - страница 133

 
Ilyas:

Тем не менее, время потрачено, проблем в инстанцировании не нашёл

Добавил verbose mode для разворачивания макросов (пока этим флагом управлять нельзя, по умолчанию отключен)

Вот что получил (убрал дублирование развёртки макроса Test3


Ошибок в новом (заменили недавно) алгоритме разворачивания не нашёл.

Явный вызов конструктора в MQL запрещён.

Проблема в пользовательском коде.
Вот так это можно заставить работать.


        #define         PLATFORMºCLASSªNAME( package, clazz )                   package##@##<##clazz##>
        #define         COREºCLASSªINTERNAL( clazz, main )                      class clazz { private: static clazz * ªªsingleton; COREºCLASSªMAINª##main( clazz )
        #define         COREºCLASSªMAINªSTATIC( clazz )                         public: static clazz * main() { clazz::clazz##ª(); return( NULL ); };
        #define         PLATFORMºCLASSªVARªSTATIC( clazz, type, name )          static type clazz::name;

        #define Test3 PLATFORMºCLASSªNAME( Core, Test2 )
        #define METHOD_NAME(clazz,name) clazz##name
        
        
COREºCLASSªINTERNAL( Test3, STATIC )
                private: static void METHOD_NAME(Test3,ª)() {
                        int a=1;
                        Print(__FUNCSIG__);
                };
                
                public: Test3() {
                };

};
                
void OnStart() {
   Test3 * test = new Test3();
   test.main();
};

PLATFORMºCLASSªVARªSTATIC( Test3, Test3 *, ªªsingleton )
 
Разработчикам.
Прошу рассмотреть возможность добавления в MQL аналога:
g++ -E <file>.cpp

Вывода кода после работы препроцессора.
 
Ilyas :

However, time is spent, problems in instantiation are not found

Added verbose mode for expanding macros

That's what I got (removed the duplication of the macro scan Test3


No new errors were found in the new (recently replaced) algorithm.

Explicit constructor call in MQL is forbidden.

  private : static void Test3ª не является конструктором. Я использую последний символ для избежания столкновения с реальным конструктором. Это статический метод для инициализации статических данных. И, как я объяснил в предыдущем посте, это было разрешено до сих пор. Я не делаю ничего плохого, если это разрешено. Может быть, пришло время расширить некоторые языковые возможности. Это головная боль, некоторые ограничения, поскольку у них нет пространств имен или всех ограничений для работы со структурами.

 
Juan Fernandez:

Это сработало несколько лет назад . Сейчас не работает . Это может быть бесполезно для вас, но пространства имен полезны для предотвращения столкновений. Так как mql5 их не поддерживает, мне пришлось искать способ

Мы уже работаем в этом направлении.

MQL язык вырос, без пространства имён дальше никак.

К сожалению, внедрение требует значительных изменений, поэтому этот процесс немного затянулся.

 
Ilyas :

We are already working in this direction.

MQL language has grown, no further namespace.

Unfortunately, implementation requires significant changes.

Все нормально. Но в прошлый раз, когда я спросил давно, не планировалось. Вот почему я сделал этот трюк. В любом случае счастлив знать, что это запланировано. Я буду адаптировать свой код, как вы рекомендовали, чтобы избежать текущей проблемы. Спасибо

 
Sergey Dzyublik :

The problem is in user code.
Can be made to work.


Я использовал код для компилятора, но у моего кода не было проблем. Это работало и все еще работает в MT4. Если компилятор изменился, это нормально. Но я не начинающий кодер

 
Sergey Dzyublik:
Разработчикам.
Прошу рассмотреть возможность добавления в MQL аналога:

Вывода кода после работы препроцессора.

Ни разу не пользовался данной возможностью.

При лексическом разборе, мы не сохраняем пробелы, комментарии и переносы строк  - выходной файл получится нечитаемым.

Если добавлять эту малоиспользуемую фичу, придётся расширять возможности "лексера".

 
Ilyas:

Ни разу не пользовался данной возможностью.

При лексическом разборе, мы не сохраняем пробелы, комментарии и переносы строк  - выходной файл получится нечитаемым.

Если добавлять эту малоиспользуемую фичу, придётся расширять возможности "лексера".

Нет, так нет - мое дело предложить, а целесообразность оценивать вам.
Относительно "получается нечитаемым" - результат можно пропускать через стилизатор.

 
Slava:

Непонятно почему обломилась передача истории торговли. Будем расширять логгирование ошибок.

Нарвался на ту же ситуацию, но есть доп. инфа. Провел бэктест, получил оборванный график. Переключаюсь на вкладку Журнал - там никаких данных о сделках. И через пару-тройку секунд, вдруг пошли данные о сделках в Журнал Тестера. После чего график перестал был оборванным.


Т.е. Агент линии Баланса/Эквити передал Тестеру сразу, а вот с передачей истории + логи торговли возник затык на несколько секунд. Логи нужны?


ЗЫ Посмотрел логи. Вот что произошло (лог Тестера)

GR      0       17:38:02.406    Core 1  common synchronization completed // Через секунду после этого сообщения Агент (в логах) полностью сделал проход.
NM      0       17:38:13.363    Core 1  login (build 1978)               // Спустя 10 секунд идет логин к Агенту и оттуда начинают поступать данные.

Интересная особенность Тестера. Получается, что Тестер коннектится к Агенту только после того, как тот проход совершит. А проблема в том, что с самим коннектом возникла пауза.

 
Tortuga5:

При запуске оптимизации в Тестере стратегий процесс в подавляющем большинстве случаев идёт медленно и при этом с низкой загрузкой ядер процессора. Всего несколько раз сталкивался с загрузкой более 50%, а обычно она в пределах 10%. С чем это может быть связано и можно ли как-нибудь "принудить" к терминал более активной работе?

Если тест на тиках и за много месяцев - идёт генерация временных файлов тиков (одно и то же для каждого агента и почти при каждом тесте) и диск загружен на 100%. Через несколько минут (в зависимости от периода тестирования) агенты по-одному начинают сам проход. Смотрите загрузку диска в Windows Resource Monitor. Так работает тестер с тиками, но мало кто это замечает. Тестировать на тиках за длительный период не модно.

Я не понимаю, зачем снова и снова генерировать временные файлы с тиками на гигабайты и

1) для каждого агента отдельно

2) удалять их очень быстро по любому малозначительному поводу, в то время как я провожу тесты один за другим

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