Как реализовать взаимодествие между двумя терминалами

 

Есть некая последовательность сделок советника:


В целом МО>0 (пока), но гораздо более интересные результаты получаются, если дождавшись одного лося на демо, пропускать на другом терминале 2 следующие сделки. Интересует чисто теоретически, как это можно реализовать, желательно без .dll.

Файлы:
 
sanctus:

Есть некая последовательность сделок советника:


В целом МО>0 (пока), но гораздо более интересные результаты получаются, если дождавшись одного лося на демо, пропускать на другом терминале 2 следующие сделки. Интересует чисто теоретически, как это можно реализовать, желательно без .dll.

А чем так пугает ДЛЛ? Я бы сделал ДЛЛ, в ней открывать memory mapped file и писать туда команды пропуска, как в обычный массив.

Если без ДЛЛ, то в принципе, можно попробовать добавить функцию CreateMutex в WinUser32.mqh и взводить мьютекс, если надо пропускать сделки, а на другом терминале смотреть, есть ли мбютекс или нет.

Можно сообщения посылать через PostMessage и принимать через PeekMessage

---------------------------------------

Бесплатный семинар по цифровой обработке сигналов для трейдеров

 
Харош совать рекламу
 
xrust:
Харош совать рекламу

не увидел рекламы... Просто сцылко.

Инфо полезно для ищуших.

Если нет нужды знать - не нужно хаять!

;)

 

Можно взаимодействовать так: https://www.mql5.com/ru/code/9477

А можно вести параллельно виртуальные торги, воспользовавшись разработками, которые исследованы в статье: https://www.mql5.com/ru/articles/1578

 
Спасибо, последний вариант самый интересный.
 
Вот ещё библиотека.
 
sanctus:
Спасибо, последний вариант самый интересный.
Это точно, оптимизация должна проводится на лету, у меня так и сделано, только на C#. Слишком быстро сейчас меняется рынок.
 
Zhunko:
Вот ещё библиотека.

Я почитал, что там память отжирается. Небольшой коммент.

Тут дело в том, что если вы выделяете под file mapping например 500 Мб памяти, то она выделяется в вирт. памяти по мере необходимости блоками по 4 Кб, а не сразу все 500 Мб. Может это вы и имели в виду, говоря, что память отжирается? То есть вы запросили 500 Мб и начали заполнять ее чем-то, например как массив. В Диспетчере задач будет видно, что потребление памяти программой растет скачками по 4 Кб.

Дело в том, что винда всегда затирает выделяемую память нулями, это делается для того, чтобы процесс не мог прочитать незатертые данные, которые могли остаться от другого процесса. Так что диспетчеру памяти Windows выгоднее выделять виртуалку по мере реальной необходимости, тем более, что все равно эти 500 Мб наверняка будут реально физически фрагментированы на много кусочков в ОЗУ.

Кстати, попробуйте на обычном С++ создать обычный массив 500 Мб (int arr[500*1024*1024/4]) и начать заполнять его, вы увидите ту же картину, память реально выделяется по мере заполнения массива кусками по 4 Кб.

То же и под .NET

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