MQL4 потоки (thread/fork), это возможно? - страница 5

 
Igor Makanu:

кстати в индикаторах можно использовать значение 

и на следующем вызове получить его в 

таким несложным образом можно разорвать логику сложный вычислений на "бесконечное" количество частей, код примерно так должен выглядеть:

Вот вот. Разработчики MQ с самого начала заложили в OnCalculate возможность асинхронного расчета, просто большинство пользователей об этом даже не задумывается. 

 
Vitaly Gorbunov:
Оригинально есть над чем подумать! Возьму на заметку.

такая схема получения предыдущих значений индикатора точно работает, я в кодобазу индикатор по Ренко барам делал, когда проверял все работало онлайн и на истории корректно рассчитывался индикатор, а в тестере почему то старые значения индикаторных буфферов "плыли" , в режиме все тики без проблем работало, а в режиме по открытию баров - лаги появлялись 

и вот случайно сделал такой возврат рассчитанных значений и все стало работать как часы

ЗЫ: в сообщениях KIMIV увидел совет не пользоваться константами 1,2,3,4... если нет необходимости, а лучше писать случайные числа, с его слов упрощает поиск багов и опечаток, вот и стараюсь писать:123, 223,323 .... 

 
Возникла сразу идея запустить несколько индикаторов и через глобальные переменные терминала передавать режимы расчётов. Надо будет попробовать как только появиться время.
 
Vitaly Gorbunov:
Возникла сразу идея запустить несколько индикаторов и через глобальные переменные терминала передавать режимы расчётов. Надо будет попробовать как только появиться время.

Еще через EventChartCustom можно.

 
Vasiliy Sokolov:

Еще через EventChartCustom можно.

А можно чуть подробнее про этот метод. У меня с EventChartCustom пока сложные отношения.

 
Vasiliy Sokolov:

Еще через EventChartCustom можно.

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

:)


Vitaly Gorbunov:

А можно чуть подробнее про этот метод. У меня с EventChartCustom пока сложные отношения.

в справке вроде полное описание, я бегло читал, но вроде все просто:

1.регистрируете пользовательское событие №ххх

2. генерируете событие 

3. ловите это событие в OnChartEvent() в параметре long везде где прописали обработчик OnChartEvent()

по сути генерируете "свои тики"

 

Правильно ли я понимаю что можно из любого места программы вызвать EventChartCustom и это будет обработано в OnChartEvent?

Както я не нашёл этому подтверждения в мануале.

 
Vitaly Gorbunov:

Правильно ли я понимаю что можно из любого места программы вызвать EventChartCustom и это будет обработано в OnChartEvent?

Както я не нашёл этому подтверждения в мануале.

Да.

 
Vasiliy Sokolov:

Вы не тем занимаетесь. Работа с потоками и прочими извратами - это как стрелять по воробью из пушки. Вопрос: Зачем? Вы сюда пришли писать роботов для зарабатывания денег, а не этюды по программированию решать.

Есть конкретная задача:

Вот ее решить обычными средствами MQL4 достаточно просто. Для этого необходимо разорвать цикл расчета в OnCalculate на несколько итераций, и никаких извратов с потоками для этого делать не нужно.

Я написал рабочий прототип из двух частей: индикатора и эксперта. Индикатор имитирует тяжелый расчет, эксперт получает значения этого индикатора, паралельно сигнализируя в Comment сколько баров из общего количества рассчитано.

Индикатор

Эксперт:

Вот результат:


Конечно, доделывать здесь еще много, но у Вас же 20 лет программисткого стажа.

Еще раз поймите асинхронность != многопоточность. Асинхронность - это паттерн программирования, вид алгоритма, а не какая-то крутая внешняя библиотека типа System.Threading.

Интересная идея, смешно но в первой половине дня я уже это сделал ))), но все равно спасибо!

Осталась только проблема с тем, что терминал теперь сворачивается, происходит какое-то исключение, надо разобраться, думаю все из-за класса.

У же есть результат этой связки:

Project

 

Зря пропустили этот пост:

Индикаторы вешают поток чарта, скрипты и советники — нет. Кроме того, все индикаторы на инструменте/ТФ работают в одном потоке.

И задача у вас сводится к обмену данными между двумя советниками. А на эту тему здешний поиск выдаст несколько очень содержательных веток с готовыми рецептами.