Подскажите, как организовать взаимодействие MT4(5) c программой собственной разработки на С++ (VS2008)?

 
Прошу помощи в создании общего вычислительного процесса, в котором участвует MT (как источник ценовых значений тиков и значений времени их поступления в терминал) и программа, написанная мною лично на С++ (обработчик тиков). Программа должна получать из МТ время каждого нового тика с произвольной точностью (~0.01мс). Мне важно понять процесс доступа в терминал сторонней программой (или наоборот) и как его реализовать на С++.
 
Ну можно, например, так: терминал пишет очередную котировку (время её поступления) в текстовый документ. Сторонняя программа обнаруживает её и обрабатывает. Результат обработки кодирует, например, в тот же текстовый документ. Терминал обнаруживает новое сообщение сторонней программы и принимает какое-то решение в зависимости от того что именно пришло в этом кодированном сообщении.
 
drknn:
Ну можно, например, так: терминал пишет очередную котировку (время её поступления) в текстовый документ. Сторонняя программа обнаруживает её и обрабатывает. Результат обработки кодирует, например, в тот же текстовый документ. Терминал обнаруживает новое сообщение сторонней программы и принимает какое-то решение в зависимости от того что именно пришло в этом кодированном сообщении.

Ммм... я думал над этим вариантом, и....

1. Как сторонняя программа обнаружит что МТ записала в файл? Постоянно его проверять (особенно когда на рынке ажиотаж и котировки меняют свои значения оч быстро)? И как часто? Возможно, но нежелательно, может повлиять на стабильность всей связки в купе с ОСью. Например, в определенный момент времени МТ обращается к файлу с целью его открыть и в этот же момент моя программа хочет сделать то же, кто из них получит приоритет? И через сколько времени одна из них все же доберется до файла?Да и скорость ограничена обращением к жесткому диску (при большом количестве инструментов и малому периоду проверки файла).

2. Если МТ записывает в файл время поступления котировки, то вспоминая что это значение кратно 1 секунде получится, что не решается главная задача - 0.01 сек.

Поэтому, необходимо организовать взаимодействие более тонко - через ОСь (я не знаю как). Или же есть и другие методы реализованные в МТ, о которых я не знаю...

 

Ну, а, скажем, такой вариант: Терминал получает котировку, вызывает спецфункцию из заранее написанной Вами DLL-ки. Эта функция передаёт в Вашу программу только что полученное значение - передаёт напрямую. Просто потому, что эта, заранее написанная Вами DLL-ка является частью написанной Вами программы. Ну, или так: Функция dll-ки вызывает функцию из другой dll-ки и так столько вызовов, сколько нужно... 

 
drknn:

Ну, а, скажем, такой вариант: Терминал получает котировку, вызывает спецфункцию из заранее написанной Вами DLL-ки. Эта функция передаёт в Вашу программу только что полученное значение - передаёт напрямую. Просто потому, что эта, заранее написанная Вами DLL-ка является частью написанной Вами программы. Ну, или так: Функция dll-ки вызывает функцию из другой dll-ки и так столько вызовов, сколько нужно...

Не надо изобретать велосипед. Всё просто. МТ4 передаёт в DLL данные,DLL кладёт данные в память(FileMapping).Внешняя программа читает память обрабатывает и опять кладёт в память результат. Советник читает через DLL результат из памяти и выполняет какие то действия.

Кто то на форуме выкладывал всё это,но реализованное на API. С такой реализацией можно и без DLL.

Скорость обмена, при подобной реализации достигает единиц микросекунд. Только их померить не просто.

 
Спасибо, Господа! Теперь в тумане хоть дорогу разглядел :). Буду рыть дальше.
Причина обращения: