Как использовать OnTradeTransaction ?

 

Делаю копир для бразильской биржи. 1-ый терминал Мт5 пишет файл 10 раз в секунду, 2-ой его считывает к примеру 10 раз в секунуду.

К примеру есть позиция и стоит лимитный ордер . Цена доходит до лимитного и позиция закрывается. Но Ведомый терминал еще хранит новую информацию о позициях и ордерах. Поэтому пытается выставить ордера опять. 

Думаю, что избежать этого поможет OnTradeTransaction.

Но как ей пользоваться ? 
Или есть другие решения ?

 
Dmitiry Ananiev:

Делаю копир для бразильской биржи. 1-ый терминал Мт5 пишет файл 10 раз в секунду, 2-ой его считывает к примеру 10 раз в секунуду.

К примеру есть позиция и стоит лимитный ордер . Цена доходит до лимитного и позиция закрывается. Но Ведомый терминал еще хранит новую информацию о позициях и ордерах. Поэтому пытается выставить ордера опять. 

Думаю, что избежать этого поможет OnTradeTransaction.

Но как ей пользоваться ? 
Или есть другие решения ?

А разве ведомый терминал не имеет информации о значениях ТР и SL, а так же цене лимитных ордеров? Тогда что ему мешает мониторить цену и определять факт срабатывания ордеров и позиций и вычеркивать их из своего списка, не дожидаясь прихода информации о закрытии (открытии)?

 
Dmitiry Ananiev:

Делаю копир для бразильской биржи. 1-ый терминал Мт5 пишет файл 10 раз в секунду, 2-ой его считывает к примеру 10 раз в секунуду.

К примеру есть позиция и стоит лимитный ордер . Цена доходит до лимитного и позиция закрывается. Но Ведомый терминал еще хранит новую информацию о позициях и ордерах. Поэтому пытается выставить ордера опять. 

Думаю, что избежать этого поможет OnTradeTransaction.

Но как ей пользоваться ? 
Или есть другие решения ?

Я обошел эту проблему установкой магика на клиенте в виде тикета позиции сервера. И проверяю клиента именно по магикам.

struct SWorkPositions
{
     uchar     symbol[20];
     int       ticket[2],
               typePosition;
     double    price,
               volume,
               sl, tp;
};

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

 

Не совсем понятно, почему ведомый терминал пытается выставить ордер опять.  Мастер-терминал ведь ему не писал в файл указания "поставить ордер" ?

Как я понимаю, копир должен четко выполнять указания, выдаваемые мастер-терминалом.  Если на ведомом терминале сделка не закрылась из-за того, что цена не дошла до ТП(или СЛ), а ведущий терминал решил открывать новую сделку - то данная ситуация явно не-копирная, чисто копир должен открывать вторую сделку, как того требует мастер-терминал.  А если мы будем глядеть еще и на разность котировок в различных ДЦ, да изменять свое поведение, в зависимости от этого - тут, боюсь,  уже простым копированием сделок не обойдется, необходимо двустороннее взаимодействие.

 
Dmitiry Ananiev:

Делаю копир для бразильской биржи. 1-ый терминал Мт5 пишет файл 10 раз в секунду, 2-ой его считывает к примеру 10 раз в секунуду.

А разве через файлы осуществлять обмен - это не стрёмно? Через Win Api, мне кажется, будет более кошерно.

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