Скринер активов через советника - страница 2

 
firsalex:

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

1. При старте советника получать весь список активов.

2. Разбивать его на блоки по 10-50 штук и думать, что делать, если зависнет.


И еще вопрос - в МТ5 нет никакого API, позволяющего сторонними путями получать котировки всех нужных активов? Может, так проще будет?

А не искали причину, где застревает на какой функции?


 
Roman:

А не искали причину, где застревает на какой функции?


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


Насчет распараллеливания - как подобное в МТ5 реализуется, есть ссылки? 

P.S. Очень жаль, что нет в МТ5 try...catch... Намного проще отлавливать баги таким способом...

 
firsalex:

Долго - это минимум час. Причем в отладке видно, что застрявший инструмент вешает всю работу.

Ну, так не серьезно.

Для начала разберитесь с проблемным инструментом и ограничьте время обработки одного инструмента.

 
firsalex:

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

Насчет распараллеливания - как подобное в МТ5 реализуется, есть ссылки? 

P.S. Очень жаль, что нет в МТ5 try...catch... Намного проще отлавливать баги таким способом...

Отлавливайте баги с помощью

Print()

и константы 

__FUNCTION__

Ссылка на пример

Сделайте условие проверки, времени выполнения для каждой функции
И если задержка выполнения функции превышает к примеру 10 секунд, выводите принт с этой константой.

 

Итак, опыты проведены.

Путем следования вашим советам и гугла я вроде бы нашел неплохой способ поиска активов.

1. При старте эксперта опрашиваю все активы и удаляю из MarketWatch те, торги по которым в принципе не допустимы (мне нужны только SYMBOL_TRADE_MODE_FULL).

2. Убираю те активы, где слишком огромный спред.

На выходе получается менее 1000 активов, что уже спокойно отображаются в MarketWatch.И только после этого единожды (по кнопке) запускаю обработку найденных активов. Обработка начинается корректно, примерно 2-3 секунды на актив.

Теперь остается одна проблема - нельзя скрыть ненужные активы из листа (мол, менее 10 минут прошло) для отображения только нужных активов. Т.к. каждый из отраженных активов только что запрашивался, то, похоже, надо закрывать WatchList на 11 минут, и вызывать функцию скрытия...

 
firsalex:

Теперь остается одна проблема - нельзя скрыть ненужные активы из листа (мол, менее 10 минут прошло) для отображения только нужных активов. Т.к. каждый из отраженных активов только что запрашивался, то, похоже, надо закрывать WatchList на 11 минут, и вызывать функцию скрытия... 

Ну, отфильтровать же один раз нужно? Можно и по таймеру.

А можно и не скрывать их, а фильтровать динамически (ведь список может поменяться, как и спред по инструментам).

 
Andrey Khatimlianskii:

Ну, отфильтровать же один раз нужно? Можно и по таймеру.

А можно и не скрывать их, а фильтровать динамически (ведь список может поменяться, как и спред по инструментам).

Что значить "фильтровать"? Перенести вверх списка отобранные? Тогда это сортировка. А фильтрация - это же вроде бы и есть скрытие/отображение, или я не так понял?
 
firsalex:
Что значить "фильтровать"? Перенести вверх списка отобранные? Тогда это сортировка. А фильтрация - это же вроде бы и есть скрытие/отображение, или я не так понял?

Да, я про скрытие говорил. Что его можно сделать один раз, пусть и через 10 минут. А можно и не делать вообще, не мешает.

 
firsalex:

1. Проверяет только тысячу активов.

2. Очень долгая проверка.

используйте несколько терминалов, подключённых к одному счёту, т.е. распараллельте задачу

 

Коллеги, всем спасибо за советы, всё получилось суперски. Теперь за 20 минут прогоняет 4000 активов, отбирает подходящие, всё остальное скрывает из MarketWatch + открывает сразу нужные найденные активы.

Из тех проблем, что озвучивал раньше:

Подвисал на 1-5 минут на активе банально из-за одной вещи - в старой версии кода мне необходимо было получить котировки с месячного ТФ примерно за 100-200 баров истории. Во многих активах такой истории просто нет, и на этом этапе CopyBuffer просто задумывался, т.к. начинался процесс закачивания котировок, потом по таймауту или окончанию отваливался корректно, но задержку во времени получал неслабую. Переписал алгоритм, теперь всё проходит быстро.

На выходе получился неплохой скринер, отлавливающий до 50-100 активов, из которых уже потом руками и глазами отбираются наиболее подходящие. Вопрос закрыт.