Взаимодействие советников - страница 2

 
Artyom Kuraev:

Всем привет.

Подскажите, пожалуйста, как можно решить следующую задачу.

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

Возникают следующие трудности при работе: если каждый советник будет отрабатывать только свои сделки, то из-за разницы времени прихода котировок не каждый советник сможет поймать условие совокупной прибыли, более того, они могут начать открывать свои сделки в тот момент, когда нужно их закрывать; общий файл (ini, txt, csv), расшаренный для чтения и записи одновременно на несколько советников, в который можно было бы записывать сигнал на блокировку работы всех советников кроме одного, очень много сожрет по производительности, так как каждому советнику обращаться к нему придется на каждом тике; писать полностью самостоятельный советник для контроля этих сделок тоже проблему не решит, так как нужно именно заблокировать работу всех советников на время выполнения операций одним.

Помогите найти решение!

переменных терминала и событий - ну просто за глаза. Ту часть которая время-от-времени оценивает общие показатели - выносите в отдельный советник. При достижении неких критических величин она выставит глобальный флаг и разошлёт ChartEvent по всем чартам. Каждый робот получив чарт эвент или обнаружив глоб.флаг при рестарте начинает минимизировать убытки, каждый  по своему принципу.