Новая версия платформы MetaTrader 5 build 2615: Фундаментальный анализ и комплексный критерий в тестере стратегий - страница 21

 
Roman:

В том и суть, чтоб уйти от использования DLL, и работать в чистом Mql.
C DLL и так понятно что проблем нет. )) 

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Ещё раз о многопоточности

Renat Fatkhullin, 2020.01.28 15:06

Мы планируем добавить ThreadXXX и обменные функции, чтобы запускать отдельные задачи.

Это не потоки основной программы, а отдельные скрипты (с обработчиками OnStart), которые будут работать независимо в скрытом режиме по аналогии с сервисами.

Можно будет запрашивать списки программ и управлять ими. При запуске "потока" указывается его ex5 файл из файла на диске или своего ресурса. Тем самым можно будет иметь одиночный ex5 файл, который из своих ресурсов легко запускает несколько потоков и обменивается с ними данными.

В тестере потоки работать не будут.

 
Vladimir Belozercev:

Внимательно перечитал. По вашему, когда вас "технично" называют дураком это нужно терпеть? Я так не считаю...

Стартовав с "идиотов, ущебной платформы", перейдя к "дуракам", следующая станция - бан.

Следите за своей речью, пожалуйста.

Это модерируемый форум.

 
Renat Fatkhullin:
Внутри платформы практически все сетевое асинхронное. MQL5 запросы явно и неявно вызывают асинхронные процессы закачки и синхронизации необходимых данных. Для торговых операций есть асинхронные варианты вызовов.

Это не так. Да, эксперты и индикаторы изолированы друг от друга, но внутри и индикаторов и экспертов событийная модель работает в user-контенте. Поясню на примере... Если вы сделаете:

while( Done )   {
        if( ! _нужное_вам_событие_ )    // При этом ожидание организовано в OnTradeTransaction
                sleep(100);
        else
                Done= true;
}

, то никогда не дождетесь события... Это псевдо-ассинхронность.

Да, с этим можно "жить", сделав сквозную обработку через отдачу управления процедуре OnTick, но это не асинхронная модель.

 

Моя вина. Не заметил.

 

О многопоточности: существенный процент крешей терминала идет от неправильно использованных DLL, включая .NET CLR. Чаще всего на остановке.

Мало просто дернуть DLL функцию, надо знать как стартует, работает и завершается внутренняя реализация этих библиотек вместе с их дальнейшими библиотечными связями.

 
Renat Fatkhullin:

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Новая версия платформы MetaTrader 5 build 2615: Фундаментальный анализ и комплексный критерий в тестере стратегий

Renat Fatkhullin, 2020.01.28 15:06

Мы планируем добавить ThreadXXX и обменные функции, чтобы запускать отдельные задачи.

Это не потоки основной программы, а отдельные скрипты (с обработчиками OnStart), которые будут работать независимо в скрытом режиме по аналогии с сервисами.

Можно будет запрашивать списки программ и управлять ими. При запуске "потока" указывается его ex5 файл из файла на диске или своего ресурса. Тем самым можно будет иметь одиночный ex5 файл, который из своих ресурсов легко запускает несколько потоков и обменивается с ними данными.

В тестере потоки работать не будут.
Да, я помню об этом, по этому и напомнил ))
Но хоть такое решение. И то разгрузит много задач.
Главное добиться максимально быстрого запуска этого скрипта. 
 
Vladimir Belozercev:

Это не так. Да, эксперты и индикаторы изолированы друг от друга, но внутри и индикаторов и экспертов событийная модель работает в user-контенте. Поясню на примере... Если вы сделаете:

, то никогда не дождетесь события... Это псевдо-ассинхронность.

Да, с этим можно "жить", сделав сквозную обработку через отдачу управления процедуре OnTick, но это не асинхронная модель.

Выходите из обработчика и ждите нужного OnXXXX. Так вы будете в событийной модели.

Думайте шире и в особенности о модели тестера стратегий и моделировании рыночного окружения. Не ваша программа/желания в центре событий. Для успешной платформы нужен баланс/компромисс между десятками взаимоисключающих критериев.


Статей и объяснений что и как работает было много.

 
Renat Fatkhullin:

Стартовав с "идиотов, ущебной платформы", перейдя к "дуракам", следующая станция - бан.

Следите за своей речью, пожалуйста.

Это модерируемый форум.

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

Если "ущербность платформы" задело разработчиков - мои искренние извинения. Я глубоко понимаю и уважаю их титанический труд. Вот этого точно не хотел. Парни большие молодцы.

Давайте заменим это слово на "несовершенство" и это, я полагаю, ВОЗМОЖНО тяжелое наследие для обеспечения кросс-совместимости. И это понимаю... Мои 40 тыс. строк можно смело умножить на три ибо по факту уже несколько раз переписал свой код, в силу изменения языка и, в том числе, моих архитектурных ошибок и это нормально. И пожалуйста, не нужно воспринимать мои слова как наезд или выпендривание. И в мыслях не было. Я лишь хочу того же самого, что и вы - чтобы платформа МТ стала лучше.

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

 
Vladimir Belozercev:

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

Неужели вы думаете, что это наша проблема? Это программирование, а не детский сад.

Дать вызывать GUI блокирующие функции в индикаторах - это было бы нашей проблемой. Но ее нет. А вы хотели именно эти блокирующие функции именно в индикаторах.

 
Renat Fatkhullin:


Можно пожелание озвучить?

Сейчас есть свойство 

CustomSymbolSetDouble(_Symbol, SYMBOL_VOLUME_MIN, 0.01);              //Минимальный объем для заключения сделки в лотах

Добавьте пожалуйста ещё свойство

CustomSymbolSetInteger(_Symbol, SYMBOL_VOLUME_MIN_NOTIONAL, 1000);    //Минимальный объем для заключения сделки в валюте


Оно необходимо для корректной информации на спот рынке.