Вопрос о функции OnTradeTransaction - страница 20

 
prostotrader #:

У меня не мысли :)

8 год работает....

Я имел в виду - при написании. У меня это тоже весьма старый код.

Но работа со сделками всё же нужна - чтобы робот мог вести внутреннюю статистику.
 
JRandomTrader #:

Я имел в виду - при написании. У меня это тоже весьма старый код.

Но работа со сделками всё же нужна - чтобы робот мог вести внутреннюю статистику.

Я не говорил, что сделки не нужны.

Но ведь не сделка порождает ордер, а наоборот, следовательно

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

А в OntradeTransaction (

TRADE_TRANSACTION_DEAL_ADD

)

Мы знаем, что произошла сделка и обращаемся к ордеру для уточнения параметров.

 
Торговые сделки без ордеров приводил в этой ветке...
 
fxsaber #:
Торговые сделки без ордеров приводил в этой ветке...

Это не значит, что описанное мною не верно.

В конечно счете каждый решает сам как ему стоить робота.

 
prostotrader #:

Я не говорил, что сделки не нужны.

Но ведь не сделка порождает ордер, а наоборот, следовательно

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

А в OntradeTransaction (

)

Мы знаем, что произошла сделка и обращаемся к ордеру для уточнения параметров.

Естественно, вся работа - с ордерами.

А по сделке - проверяем, что она ещё не учтена

if(ticket<=Strats[i].st.LastDeal) return false;

учитываем, проверяем состояние ордера.

Что из ордера нам нужно для учёта сделки?

 
fxsaber #:
Торговые сделки без ордеров приводил в этой ветке...

У меня стопы (и тейки, если где-то используются) только виртуальные.

 
JRandomTrader #:

Запустите у себя мой код и понаблюдайте несколько дней - у вас проявляется?

У меня нет. А у вас не хватает инфы выводимой в лог, чтобы понять, баг это или фича. Вот хотя бы такое запустите вместо своей программы.

template<typename S>
void StructPrint(const S &s, const ulong flags = 0, const int digits = INT_MAX)
{
   static S temp[1];
   temp[0] = s;
   ArrayPrint(temp, digits == INT_MAX ? _Digits : digits, NULL, 0, 1, flags);
}

void OnTradeTransaction(const MqlTradeTransaction &transaction,
   const MqlTradeRequest &request,
   const MqlTradeResult &result)
{
   Print("\n\n-----", AccountInfoDouble(ACCOUNT_BALANCE));
   StructPrint(transaction);
   StructPrint(request);
   StructPrint(result);
}
 

Двойники существуют действительно. И не только при частичной "заливке" лимитника, но и при полной.

Это для срочки в Открытии. На форексе не смотрел.
 
Stanislav Korotky #:

У меня нет. А у вас не хватает инфы выводимой в лог, чтобы понять, баг это или фича. Вот хотя бы такое запустите вместо своей программы.

Я для себя и для всех заинтересованных наличие проблемы именно в MT5 (не важно, в клиентской или серверной части), а не в коде на MQL5, подтвердил.

Меня эта проблема никак не задевает.

MQ проблему игнорирует.

Не вижу смысла в дальнейших телодвижениях по этой теме для удовлетворения чьего-то любопытства. Я своё удовлетворил.

 
Dmitriy Skub #:

Двойники существуют действительно. И не только при частичной "заливке" лимитника, но и при полной.

И даже при клиринге, я выше показывал.