54 lines
No EOL
3.7 KiB
MQL5
54 lines
No EOL
3.7 KiB
MQL5
//+------------------------------------------------------------------+
|
|
//| LifecycleAdapter.mqh |
|
|
//| Copyright 2026, MetaQuotes Ltd. |
|
|
//| www.mql5.com |
|
|
//+------------------------------------------------------------------+
|
|
#ifndef REQUEST_LATENCY_LAB_LEGACY_LIFECYCLE_ADAPTER_MQH
|
|
#define REQUEST_LATENCY_LAB_LEGACY_LIFECYCLE_ADAPTER_MQH
|
|
//--- исходник статьи 1 подключается по абсолютному пути из соседнего проекта.
|
|
//--- Относительный #include за границу Shared Project компилятором блокируется,
|
|
//--- поэтому путь фиксирует расположение соседнего каталога mql5-execution-microstructure.
|
|
#include "..\..\Dependencies\Article01\Experts\OrderLifecycle\TradeLifecycle.mqh" // снимок статьи 1 (п.1 аудита)
|
|
|
|
#include "..\..\..\Include\RequestLatencyLab\Models.mqh"
|
|
//+------------------------------------------------------------------+
|
|
//| Адаптер: единая точка использования кода TradeLifecycle. |
|
|
//| Поздние события лаборатории работают через собственные модули; |
|
|
//| CTradeLifecycle не управляет T6 новой лаборатории. |
|
|
//+------------------------------------------------------------------+
|
|
class CLifecycleAdapter
|
|
{
|
|
public:
|
|
//--- справочники исходника без изменения алгоритма
|
|
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)); }
|
|
//--- сужение ulong->uint запрещено: адаптер сохраняет ulong.
|
|
static ulong OrderOfEvent(const TradeEvent &e) { return(e.order_ticket); }
|
|
//--- Прежний IsComplete доступен только для диагностики и не
|
|
//--- участвует в определении T6 лаборатории.
|
|
static bool LegacyChainComplete(const CTradeLifecycle &lc) { return(lc.IsComplete()); }
|
|
//--- Копирование события исходника в собственную структуру
|
|
//--- лаборатории (без предположений о завершённости).
|
|
static void AdaptEvent(const TradeEvent &source, LabEvent &target);
|
|
};
|
|
//+------------------------------------------------------------------+
|
|
//| Внешние определения методов. |
|
|
//+------------------------------------------------------------------+
|
|
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);
|
|
}
|
|
|
|
#endif // REQUEST_LATENCY_LAB_LEGACY_LIFECYCLE_ADAPTER_MQH
|
|
//+------------------------------------------------------------------+ |