2026-09-09 01:19:31 +03:00 | | | //+------------------------------------------------------------------+
|
2026-09-10 16:43:28 +03:00 | | | //| LifecycleAdapter.mqh |
|
2026-09-16 15:37:55 +03:00 | | | //| Copyright 2026, MetaQuotes Ltd. |
|
2026-09-10 16:43:28 +03:00 | | | //| www.mql5.com |
|
2026-09-09 01:19:31 +03:00 | | | //+------------------------------------------------------------------+
|
| | | #ifndef REQUEST_LATENCY_LAB_LEGACY_LIFECYCLE_ADAPTER_MQH
|
| | | #define REQUEST_LATENCY_LAB_LEGACY_LIFECYCLE_ADAPTER_MQH
|
| | | //--- исходник статьи 1 подключается по абсолютному пути из соседнего проекта.
|
| | | //--- Относительный #include за границу Shared Project компилятором блокируется,
|
| | | //--- поэтому путь фиксирует расположение соседнего каталога mql5-execution-microstructure.
|
2026-09-10 16:43:28 +03:00 | | | #include "..\..\Dependencies\Article01\Experts\OrderLifecycle\TradeLifecycle.mqh" // снимок статьи 1 (п.1 аудита)
|
2026-09-09 01:19:31 +03:00 | | |
|
| | | #include "..\..\..\Include\RequestLatencyLab\Models.mqh"
|
| | | //+------------------------------------------------------------------+
|
| | | //| Адаптер: единая точка использования кода TradeLifecycle. |
|
| | | //| Поздние события лаборатории работают через собственные модули; |
|
| | | //| CTradeLifecycle не управляет T6 новой лаборатории. |
|
| | | //+------------------------------------------------------------------+
|
| | | class CLifecycleAdapter
|
| | | {
|
| | | public:
|
| | | //--- справочники исходника без изменения алгоритма
|
2026-09-16 15:37:55 +03:00 | | | static string RetcodeText(const uint retcode) { return(RetcodeName(retcode)); }
|
| | | static string TransactionShortName(const ENUM_TRADE_TRANSACTION_TYPE type) { return(ShortTypeName(type)); }
|
| | | static bool IsPending(const long order_type) { return(IsPendingType(order_type)); }
|
2026-09-09 01:19:31 +03:00 | | | //--- сужение ulong->uint запрещено: адаптер сохраняет ulong.
|
2026-09-16 15:37:55 +03:00 | | | static ulong OrderOfEvent(const TradeEvent &e) { return(e.order_ticket); }
|
2026-09-09 01:19:31 +03:00 | | | //--- Прежний IsComplete доступен только для диагностики и не
|
| | | //--- участвует в определении T6 лаборатории.
|
2026-09-16 15:37:55 +03:00 | | | static bool LegacyChainComplete(const CTradeLifecycle &lc) { return(lc.IsComplete()); }
|
2026-09-09 01:19:31 +03:00 | | | //--- Копирование события исходника в собственную структуру
|
| | | //--- лаборатории (без предположений о завершённости).
|
2026-09-16 15:37:55 +03:00 | | | static void AdaptEvent(const TradeEvent &source, LabEvent &target);
|
2026-09-09 01:19:31 +03:00 | | | };
|
2026-09-16 15:37:55 +03:00 | | | //+------------------------------------------------------------------+
|
| | | //| Внешние определения методов. |
|
| | | //+------------------------------------------------------------------+
|
| | | void CLifecycleAdapter::AdaptEvent(const TradeEvent &source, LabEvent &target)
|
| | | {
|
| | | target.Zero();
|
| | | target.kind = LAB_KIND_TRADE_TRANSACTION;
|
| | | target.local_time_us = source.local_time_us;
|
| | | target.request_id = source.request_id;
|
| | | target.order_ticket = source.order_ticket;
|
| | | target.deal_ticket = source.deal_ticket;
|
| | | target.position_ticket = source.position_id;
|
| | | target.transaction_type = ShortTypeName(source.type);
|
| | | target.payload_json = StringFormat(
|
| | | "{\"type\":\"%s\",\"price\":%.10g,\"volume\":%.10g,\"retcode\":%u,\"entry\":%d}",
|
| | | ShortTypeName(source.type), source.price, source.volume, source.retcode, (int)source.entry);
|
| | | }
|
2026-09-09 01:19:31 +03:00 | | |
|
2026-09-12 22:14:24 +03:00 | | | #endif // REQUEST_LATENCY_LAB_LEGACY_LIFECYCLE_ADAPTER_MQH
|
| | | //+------------------------------------------------------------------+
|