//+------------------------------------------------------------------+ //| Models.mqh | //| Copyright 2026, MetaQuotes Ltd. | //| www.mql5.com | //+------------------------------------------------------------------+ #ifndef REQUEST_LATENCY_LAB_MODELS_MQH #define REQUEST_LATENCY_LAB_MODELS_MQH //+------------------------------------------------------------------+ //| Обязательная редакторская структура LatencySample (ТЗ §3.1). | //| Имена, типы и порядок полей неизменны. | //+------------------------------------------------------------------+ struct LatencySample { uint request_id; // request_id из MqlTradeResult (0, если has_request_id=0) ulong sequence; // номер попытки в пределах session ulong send_start_us; // T0 - непосредственно перед вызовом отправки ulong send_return_us; // T1 - сразу после возврата торговой функции ulong request_event_us; // T2 - вход в соответствующий TRADE_TRANSACTION_REQUEST ulong order_event_us; // T3 - вход в первый связанный ORDER_ADD ulong first_deal_us; // T4 - наименьшая метка среди уникальных торговых DEAL_ADD ulong final_event_us; // T6 - конец первой успешной проверки исхода uint retcode; // только код из соответствующего REQUEST bool completed; // подтверждённость исхода на момент отчёта }; //+------------------------------------------------------------------+ //| Роли, операции, режимы | //+------------------------------------------------------------------+ enum ENUM_LAB_ROLE { LAB_ROLE_MAIN = 0, // основные 100 наблюдений LAB_ROLE_WARMUP, // прогрев (10 на условие) LAB_ROLE_CLEANUP, // служебное закрытие/удаление LAB_ROLE_PILOT, // явный демо-пилот LAB_ROLE_SYNTHETIC // синтетическая проверка }; enum ENUM_LAB_OPERATION { LAB_OP_NONE = 0, LAB_OP_MARKET_OPEN, // рыночная заявка LAB_OP_PENDING_CREATE, // размещение отложенного ордера LAB_OP_PENDING_DELETE, // удаление отложенного ордера (CLEANUP) LAB_OP_POSITION_CLOSE // закрытие позиции (CLEANUP) }; enum ENUM_LAB_SIDE { LAB_SIDE_NONE = 0, LAB_SIDE_BUY, LAB_SIDE_SELL }; enum ENUM_LAB_MODE { LAB_MODE_SYNC = 0, LAB_MODE_ASYNC }; enum ENUM_LAB_LOGGING { LAB_LOG_MINIMAL = 0, LAB_LOG_VERBOSE }; enum ENUM_LAB_EXPERIMENT { LAB_EXP_E1 = 0, LAB_EXP_E2, LAB_EXP_E3, LAB_EXP_E4, LAB_EXP_E5 }; enum ENUM_LAB_ROW_KIND { LAB_ROW_SLOT = 0, LAB_ROW_WAIT }; enum ENUM_LAB_SLOT_STATUS { LAB_SLOT_PLANNED = 0, LAB_SLOT_INTENT_SAVED, LAB_SLOT_DISPATCHED, LAB_SLOT_PRECHECK_REJECTED, LAB_SLOT_CANCELED_BEFORE_DISPATCH, LAB_SLOT_DISPATCH_UNCERTAIN, LAB_SLOT_WAIT }; //+------------------------------------------------------------------+ //| Корреляция, качество, применимость, исходы | //+------------------------------------------------------------------+ enum ENUM_LAB_CORRELATION { LAB_CORR_UNRESOLVED = 0, LAB_CORR_EXACT, LAB_CORR_AMBIGUOUS, LAB_CORR_FOREIGN, LAB_CORR_CONFLICT }; enum ENUM_LAB_APPLICABILITY { LAB_APP_APPLICABLE = 0, LAB_APP_NOT_APPLICABLE, LAB_APP_UNKNOWN }; enum ENUM_LAB_FITNESS { LAB_FIT_CONFLICT = 0, LAB_FIT_INTERRUPTED, LAB_FIT_LATE, LAB_FIT_MISSING, LAB_FIT_VALID }; enum ENUM_LAB_OUTCOME { LAB_OUT_UNKNOWN = 0, LAB_OUT_FILLED, LAB_OUT_PARTIAL_CANCELED, LAB_OUT_PARTIAL_EXPIRED, LAB_OUT_CANCELED_NO_FILL, LAB_OUT_EXPIRED_NO_FILL, LAB_OUT_REJECTED, LAB_OUT_PENDING_PLACED, LAB_OUT_PENDING_DELETED, LAB_OUT_POSITION_CLOSED, LAB_OUT_UNEXPECTED_ACTIVATION }; enum ENUM_LAB_FINAL_SOURCE { LAB_FINAL_NONE = 0, LAB_FINAL_SYNC_RETURN_REJECTION, LAB_FINAL_REQUEST_REJECTION, LAB_FINAL_CALLBACK_CHECK, LAB_FINAL_TIMER_CHECK }; enum ENUM_LAB_MARKET_REGIME { LAB_REGIME_QUIET = 0, LAB_REGIME_FAST, LAB_REGIME_INTERMEDIATE, LAB_REGIME_UNKNOWN }; enum ENUM_LAB_CHECK_STATUS { LAB_CHECK_NOT_RUN = 0, LAB_CHECK_PASS, LAB_CHECK_FAIL, LAB_CHECK_NOT_APPLICABLE }; enum ENUM_LAB_SEVERITY { LAB_SEV_INFO = 0, LAB_SEV_WARNING, LAB_SEV_BLOCKER }; enum ENUM_LAB_COMPONENT { LAB_COMP_NONE = 0, LAB_COMP_CONFIG, LAB_COMP_PLANNER, LAB_COMP_TRACKER, LAB_COMP_JOURNAL, LAB_COMP_READER, LAB_COMP_COMPLETION, LAB_COMP_MARKET, LAB_COMP_STATS, LAB_COMP_CSV, LAB_COMP_REPORT, LAB_COMP_PANEL, LAB_COMP_CONTROLLER, LAB_COMP_TRADE_TOOLS, LAB_COMP_MODELS }; enum ENUM_LAB_RECORD_KIND { LAB_KIND_RUN_START = 0, LAB_KIND_RUN_STATE, LAB_KIND_SLOT_STATUS, LAB_KIND_PRECHECK, LAB_KIND_DISPATCH_INTENT, LAB_KIND_INTENT_SUPERSEDED, LAB_KIND_SEND_START, LAB_KIND_SEND_RETURN, LAB_KIND_TRADE_TRANSACTION, LAB_KIND_CORRELATION_LINK, LAB_KIND_CORRELATION_CONFLICT, LAB_KIND_HISTORY_SCAN, LAB_KIND_CONFIRMATION_SNAPSHOT, LAB_KIND_DEADLINE_EVALUATION, LAB_KIND_COLLECTION_CLOSE, LAB_KIND_CORRECTION, LAB_KIND_TIMER, LAB_KIND_WAIT, LAB_KIND_LOG_EMITTED, LAB_KIND_SAFETY_BLOCK, LAB_KIND_INTERVENTION, LAB_KIND_CHECKPOINT, LAB_KIND_RUN_END }; enum ENUM_LAB_METRIC { LAB_METRIC_CALL_DURATION = 0, // T1-T0 LAB_METRIC_REQUEST_DELAY, // T2-T0 LAB_METRIC_ORDER_DELAY, // T3-T0 LAB_METRIC_FIRST_DEAL_DELAY, // T4-T0 LAB_METRIC_LAST_DEAL_DELAY, // T5-T0 (только при полном покрытии) LAB_METRIC_FINAL_STATE_DELAY, // T6-T0 LAB_METRIC_REMAINING_AFTER_RETURN, // T6-T1 LAB_METRIC_REQUEST_FIRST_DEAL_OFFSET // T2-T4, знаковая }; //+------------------------------------------------------------------+ //| Маски наличия T0..T6 (бит 1< 0) s += " | "; s += StringFormat("comp=%d code=%d mql=%d", (int)error.component, error.code, error.mql_error); return(s); } //+------------------------------------------------------------------+ //| Строковое имя метрики | //+------------------------------------------------------------------+ string LabMetricName(const ENUM_LAB_METRIC metric) { switch(metric) { case LAB_METRIC_CALL_DURATION: return("call_duration_us"); case LAB_METRIC_REQUEST_DELAY: return("request_delay_us"); case LAB_METRIC_ORDER_DELAY: return("order_delay_us"); case LAB_METRIC_FIRST_DEAL_DELAY: return("first_deal_delay_us"); case LAB_METRIC_LAST_DEAL_DELAY: return("last_deal_delay_us"); case LAB_METRIC_FINAL_STATE_DELAY: return("final_state_delay_us"); case LAB_METRIC_REMAINING_AFTER_RETURN: return("remaining_after_return_us"); case LAB_METRIC_REQUEST_FIRST_DEAL_OFFSET: return("request_first_deal_offset_us"); } return("unknown_metric"); } //+------------------------------------------------------------------+ //| Строковое имя исхода | //+------------------------------------------------------------------+ string LabOutcomeName(const ENUM_LAB_OUTCOME outcome) { switch(outcome) { case LAB_OUT_UNKNOWN: return("UNKNOWN"); case LAB_OUT_FILLED: return("FILLED"); case LAB_OUT_PARTIAL_CANCELED: return("PARTIAL_CANCELED"); case LAB_OUT_PARTIAL_EXPIRED: return("PARTIAL_EXPIRED"); case LAB_OUT_CANCELED_NO_FILL: return("CANCELED_NO_FILL"); case LAB_OUT_EXPIRED_NO_FILL: return("EXPIRED_NO_FILL"); case LAB_OUT_REJECTED: return("REJECTED"); case LAB_OUT_PENDING_PLACED: return("PENDING_PLACED"); case LAB_OUT_PENDING_DELETED: return("PENDING_DELETED"); case LAB_OUT_POSITION_CLOSED: return("POSITION_CLOSED"); case LAB_OUT_UNEXPECTED_ACTIVATION: return("UNEXPECTED_ACTIVATION"); } return("UNKNOWN"); } //+------------------------------------------------------------------+ //| Строковое имя fitness-категории | //+------------------------------------------------------------------+ string LabFitnessName(const ENUM_LAB_FITNESS fitness) { switch(fitness) { case LAB_FIT_CONFLICT: return("CONFLICT"); case LAB_FIT_INTERRUPTED: return("INTERRUPTED"); case LAB_FIT_LATE: return("LATE"); case LAB_FIT_MISSING: return("MISSING"); case LAB_FIT_VALID: return("VALID"); } return("UNKNOWN"); } //+------------------------------------------------------------------+ //| Строковое имя статуса чтения | //+------------------------------------------------------------------+ string LabReadStatusName(const ENUM_LAB_READ_STATUS st) { switch(st) { case LAB_READ_UNKNOWN: return("UNKNOWN"); case LAB_READ_FOUND: return("FOUND"); case LAB_READ_ABSENT_CONFIRMED: return("ABSENT_CONFIRMED"); case LAB_READ_FAILED: return("FAILED"); } return("UNKNOWN"); } //+------------------------------------------------------------------+ //| Строковое имя рыночного режима | //+------------------------------------------------------------------+ string LabRegimeName(const ENUM_LAB_MARKET_REGIME regime) { switch(regime) { case LAB_REGIME_QUIET: return("QUIET"); case LAB_REGIME_FAST: return("FAST"); case LAB_REGIME_INTERMEDIATE: return("INTERMEDIATE"); case LAB_REGIME_UNKNOWN: return("UNKNOWN"); } return("UNKNOWN"); } //+------------------------------------------------------------------+ //| Строковое имя роли | //+------------------------------------------------------------------+ string LabRoleName(const ENUM_LAB_ROLE role) { switch(role) { case LAB_ROLE_MAIN: return("MAIN"); case LAB_ROLE_WARMUP: return("WARMUP"); case LAB_ROLE_CLEANUP: return("CLEANUP"); case LAB_ROLE_PILOT: return("PILOT"); case LAB_ROLE_SYNTHETIC: return("SYNTHETIC"); } return("UNKNOWN"); } //+------------------------------------------------------------------+ //| Строковое имя операции | //+------------------------------------------------------------------+ string LabOperationName(const ENUM_LAB_OPERATION op) { switch(op) { case LAB_OP_NONE: return("NONE"); case LAB_OP_MARKET_OPEN: return("MARKET_OPEN"); case LAB_OP_PENDING_CREATE: return("PENDING_CREATE"); case LAB_OP_PENDING_DELETE: return("PENDING_DELETE"); case LAB_OP_POSITION_CLOSE: return("POSITION_CLOSE"); } return("NONE"); } //+------------------------------------------------------------------+ //| Строковое имя корреляции | //+------------------------------------------------------------------+ string LabCorrelationName(const ENUM_LAB_CORRELATION corr) { switch(corr) { case LAB_CORR_UNRESOLVED: return("UNRESOLVED"); case LAB_CORR_EXACT: return("EXACT"); case LAB_CORR_AMBIGUOUS: return("AMBIGUOUS"); case LAB_CORR_FOREIGN: return("FOREIGN"); case LAB_CORR_CONFLICT: return("CONFLICT"); } return("UNRESOLVED"); } //+------------------------------------------------------------------+ //| Строковое имя эксперимента | //+------------------------------------------------------------------+ string LabExperimentName(const ENUM_LAB_EXPERIMENT exp) { switch(exp) { case LAB_EXP_E1: return("E1"); case LAB_EXP_E2: return("E2"); case LAB_EXP_E3: return("E3"); case LAB_EXP_E4: return("E4"); case LAB_EXP_E5: return("E5"); } return("E?"); } //+------------------------------------------------------------------+ //| Сопутствующие структуры | //+------------------------------------------------------------------+ struct RequestKey { string session_id; ulong sequence; string ToString() const { return(session_id + "/" + IntegerToString(sequence)); } void Zero() { session_id = ""; sequence = 0; } }; struct SymbolRules { string symbol; int digits; double point; double tick_size; double volume_min; double volume_max; double volume_step; long filling_mode; long trade_mode; double bid; double ask; bool IsValid() const { return(StringLen(symbol) > 0 && tick_size > 0.0 && volume_step > 0.0); } }; struct RequestPlan { ulong slot_id; ENUM_LAB_EXPERIMENT experiment_id; uint series_id; string condition_id; // "A" или "B" uint block_id; ENUM_LAB_ROLE role; ENUM_LAB_OPERATION operation; ENUM_LAB_SIDE side; ENUM_LAB_MODE mode; ENUM_LAB_LOGGING logging_mode; ulong planned_order; ulong sequence; // зарезервированный номер попытки ulong parent_sequence; // для CLEANUP string symbol; double volume; double request_price; double distance_ticks; // D для PENDING_CREATE ulong magic; //--- S1 (audit-3): фактические сопутствующие данные запроса int deviation_points; // slippage (из настроек) string comment; // фактический comment запроса long actual_type; // фактический ORDER_TYPE long actual_filling; // фактический type_filling bool actual_known; // R5-S2: факт заполнения actual_* void Zero(void); }; struct SendObservation { ulong t0_us; // T0 ulong t1_us; // T1 bool send_ok; MqlTradeResult result; int last_error; bool result_known; // RETURN наблюдался void Zero(void); }; struct TransactionObservation { ulong entry_us; // метка входа в OnTradeTransaction MqlTradeTransaction trans; MqlTradeRequest request; // содержательно только для REQUEST MqlTradeResult result; // содержательно только для REQUEST bool has_request; bool has_result; ulong handler_exit_us; ulong trade_event_id; ulong target_sequence; void Zero(void); }; struct DealRecord { ulong deal_ticket; ulong order_ticket; ulong owner_sequence; // исполняющий запрос (не DELETE) string symbol; long deal_type; // ENUM_DEAL_TYPE long entry; // ENUM_DEAL_ENTRY long reason; // ENUM_DEAL_REASON ulong magic; ulong position_ticket; ulong position_identifier; bool has_callback; ulong callback_first_us; ulong callback_event_id; double callback_volume; double history_volume; double history_price; long deal_time_msc; ulong history_read_event_id; bool recovered; uint correction_count; bool deleted; void Zero(void); }; struct PositionFacts { ulong ticket; ulong identifier; long type; double volume; ulong magic; string symbol; bool read_status; void Zero(void); }; struct ConfirmationSnapshot { ulong sequence; ulong check_start_us; ulong check_end_us; // = T6 первой успешной проверки ENUM_LAB_FINAL_SOURCE trigger; ulong trigger_event_id; int api_errors; bool trading_state_known; ulong order_ticket; int active_select_status; // ENUM_LAB_READ_STATUS int history_select_status; // ENUM_LAB_READ_STATUS int active_select_error; // GetLastError() активного select (B4) int history_order_error; // GetLastError() history select (B4) bool history_scan_failed; // B6: HistorySelect/HistoryDealsTotal ошибка uint reject_retcode; // B7: retcode sync-return/REQUEST для reject long order_state_before; long order_state_after; double requested_volume_units; double initial_volume_units; double remaining_volume_units; double executed_volume_units; ulong deal_tickets[64]; double deal_volumes_units[64]; int deal_count; int callback_ticket_count; bool light_snapshot; // R6-B1: true = световая сверка (без тикетов) bool coverage_complete; double position_volume; bool position_found; long position_type; ulong position_ticket; ulong position_identifier; ENUM_LAB_OPERATION expected_operation; ENUM_LAB_OUTCOME previous_outcome; bool confirmed; ENUM_LAB_OUTCOME outcome; string reason_code; ulong evidence_event_ids[16]; int evidence_count; PositionFacts position_facts_last; //--- R4 (audit-4): фактические поля ордера из select (S2/S3) string order_symbol; // фактический символ ордера long order_type; // фактический ORDER_TYPE (ENUM_ORDER_TYPE) ulong order_magic; // фактический magic ордера double order_volume_lots; // фактический объём ордера (лоты) double order_price; // фактическая цена ордера (ORDER_PRICE_OPEN) //--- R4 (audit-4): ожидаемый контракт запроса для сверки (R4-S2) string expected_symbol; ulong expected_magic; double expected_volume_lots; double expected_price; double price_tolerance; // допуск сравнения цены (доли тика) long expected_order_type; // R5-B8: ожидаемый точный ORDER_TYPE void Zero(void); }; struct MetricObservation { ENUM_LAB_APPLICABILITY applicability; ENUM_LAB_FITNESS category; // эффективная категория string reason_codes; ulong start_event_id; ulong end_event_id; ulong start_us; ulong end_us; long value_us; // значение метрики (знаковая для offset) bool has_value; ulong snapshot_event_id; bool post_close_valid; long post_close_value_us; void Zero(void); }; struct MarketWindow { string dataset_id; string window_id; string session_id; ulong sequence; string calibration_id; string symbol; long anchor_tick_msc; long from_msc; long to_msc; ulong fetch_start_us; ulong fetch_end_us; ulong calculation_end_us; ulong age_at_send_us; int copy_last_error; bool range_complete; ulong n_returned; ulong n_valid_info; double mid_min; double mid_max; double tick_size; double quote_frequency_hz; double mid_range_ticks; ENUM_LAB_MARKET_REGIME regime; bool valid; string quality_codes; ulong ticks_checksum; // R8-S2: FNV-1a по (time_msc,bid,ask) валидных INFO-тиков void Zero(void); }; struct Calibration { string calibration_id; string symbol; long period_from_msc; long period_to_msc; string calendar_time_scale; string trading_sessions; int valid_window_count; int invalid_window_count; int trading_session_count; // S5: число отдельных торговых сессий double frequency_p50; double frequency_p90; double range_p50; double range_p90; bool valid; string quality_codes; void Zero(void); }; struct LabEvent { string session_id; ulong event_sequence; ENUM_LAB_RECORD_KIND kind; ulong local_time_us; ulong origin_sequence; ulong target_sequence; ulong ref_event_sequence; string transaction_type; uint request_id; ulong order_ticket; ulong deal_ticket; ulong position_ticket; ulong handler_enter_us; ulong handler_exit_us; string payload_json; string quality_code; void Zero(void); }; struct RunManifest { string campaign_id; string session_id; ENUM_LAB_EXPERIMENT experiment_id; uint series_id; string configuration_id; string symbol; ulong magic; string data_origin; ulong seed; string run_status; string stop_reason; ulong n_main_dispatched; ulong n_warmup_dispatched; ulong n_cleanup_dispatched; ulong n_pilot_dispatched; ulong n_dispatch_uncertain; ulong records_attempted; ulong records_accepted; ulong records_persisted; ulong records_lost; string source_commit; bool source_dirty; string source_package_sha256; void Zero(void); }; struct CheckRecord { string check_id; string case_key; ENUM_LAB_CHECK_STATUS status; ENUM_LAB_SEVERITY severity; string expected; string actual; string reason_code; string source_ref; string evidence_path; void Zero(void); }; //+------------------------------------------------------------------+ //| Внешние определения методов структур (вынесены из тел). | //+------------------------------------------------------------------+ void LabError::Reset(void) { component = LAB_COMP_NONE; code = 0; record_key = ""; mql_error = 0; message = ""; severity = LAB_SEV_INFO; } void RequestPlan::Zero(void) { slot_id = 0; experiment_id = LAB_EXP_E1; series_id = 0; condition_id = ""; block_id = 0; role = LAB_ROLE_MAIN; operation = LAB_OP_NONE; side = LAB_SIDE_NONE; mode = LAB_MODE_SYNC; logging_mode = LAB_LOG_MINIMAL; planned_order = 0; sequence = 0; parent_sequence = 0; symbol = ""; volume = 0.0; request_price = 0.0; distance_ticks = 0.0; magic = 0; deviation_points = 0; comment = ""; actual_type = 0; actual_filling = 0; actual_known = false; } void SendObservation::Zero(void) { t0_us = 0; t1_us = 0; send_ok = false; ZeroMemory(result); last_error = 0; result_known = false; } void TransactionObservation::Zero(void) { entry_us = 0; ZeroMemory(trans); ZeroMemory(request); ZeroMemory(result); has_request = false; has_result = false; handler_exit_us = 0; trade_event_id = 0; target_sequence = 0; } void DealRecord::Zero(void) { deal_ticket = 0; order_ticket = 0; owner_sequence = 0; symbol = ""; deal_type = 0; entry = 0; reason = 0; magic = 0; position_ticket = 0; position_identifier = 0; has_callback = false; callback_first_us = 0; callback_event_id = 0; callback_volume = 0.0; history_volume = 0.0; history_price = 0.0; deal_time_msc = 0; history_read_event_id = 0; recovered = false; correction_count = 0; deleted = false; } void PositionFacts::Zero(void) { ticket = 0; identifier = 0; type = 0; volume = 0.0; magic = 0; symbol = ""; read_status = false; } void ConfirmationSnapshot::Zero(void) { sequence = 0; check_start_us = 0; check_end_us = 0; trigger = LAB_FINAL_NONE; trigger_event_id = 0; api_errors = 0; trading_state_known = false; order_ticket = 0; active_select_status = LAB_READ_UNKNOWN; history_select_status = LAB_READ_UNKNOWN; active_select_error = 0; history_order_error = 0; history_scan_failed = false; reject_retcode = 0; order_state_before = 0; order_state_after = 0; requested_volume_units = 0.0; initial_volume_units = 0.0; remaining_volume_units = 0.0; executed_volume_units = 0.0; ArrayInitialize(deal_tickets, 0); ArrayInitialize(deal_volumes_units, 0.0); deal_count = 0; callback_ticket_count = 0; light_snapshot = false; coverage_complete = false; position_volume = 0.0; position_found = false; position_type = 0; position_ticket = 0; position_identifier = 0; expected_operation = LAB_OP_NONE; previous_outcome = LAB_OUT_UNKNOWN; confirmed = false; outcome = LAB_OUT_UNKNOWN; reason_code = ""; ArrayInitialize(evidence_event_ids, 0); evidence_count = 0; position_facts_last.Zero(); order_symbol = ""; order_type = 0; order_magic = 0; order_volume_lots = 0.0; order_price = 0.0; expected_symbol = ""; expected_magic = 0; expected_volume_lots = 0.0; expected_price = 0.0; price_tolerance = 0.0; expected_order_type = 0; } void MetricObservation::Zero(void) { applicability = LAB_APP_UNKNOWN; category = LAB_FIT_MISSING; reason_codes = ""; start_event_id = 0; end_event_id = 0; start_us = 0; end_us = 0; value_us = 0; has_value = false; snapshot_event_id = 0; post_close_valid = false; post_close_value_us = 0; } void MarketWindow::Zero(void) { dataset_id = ""; window_id = ""; session_id = ""; sequence = 0; calibration_id = ""; symbol = ""; anchor_tick_msc = 0; from_msc = 0; to_msc = 0; fetch_start_us = 0; fetch_end_us = 0; calculation_end_us = 0; age_at_send_us = 0; copy_last_error = 0; range_complete = false; n_returned = 0; n_valid_info = 0; mid_min = 0.0; mid_max = 0.0; tick_size = 0.0; quote_frequency_hz = 0.0; mid_range_ticks = 0.0; regime = LAB_REGIME_UNKNOWN; valid = false; quality_codes = ""; ticks_checksum = 0; // R8-S2 } void Calibration::Zero(void) { calibration_id = ""; symbol = ""; period_from_msc = 0; period_to_msc = 0; calendar_time_scale = ""; trading_sessions = ""; valid_window_count = 0; invalid_window_count = 0; trading_session_count = 0; frequency_p50 = 0.0; frequency_p90 = 0.0; range_p50 = 0.0; range_p90 = 0.0; valid = false; quality_codes = ""; } void LabEvent::Zero(void) { session_id = ""; event_sequence = 0; kind = LAB_KIND_RUN_START; local_time_us = 0; origin_sequence = 0; target_sequence = 0; ref_event_sequence = 0; transaction_type = ""; request_id = 0; order_ticket = 0; deal_ticket = 0; position_ticket = 0; handler_enter_us = 0; handler_exit_us = 0; payload_json = ""; quality_code = ""; } void RunManifest::Zero(void) { campaign_id = ""; session_id = ""; experiment_id = LAB_EXP_E1; series_id = 0; configuration_id = ""; symbol = ""; magic = 0; data_origin = "SYNTHETIC"; seed = 0; run_status = "NOT_RUN"; stop_reason = ""; n_main_dispatched = 0; n_warmup_dispatched = 0; n_cleanup_dispatched = 0; n_pilot_dispatched = 0; n_dispatch_uncertain = 0; records_attempted = 0; records_accepted = 0; records_persisted = 0; records_lost = 0; source_commit = ""; source_dirty = false; source_package_sha256 = ""; } void CheckRecord::Zero(void) { check_id = ""; case_key = ""; status = LAB_CHECK_NOT_RUN; severity = LAB_SEV_INFO; expected = ""; actual = ""; reason_code = ""; source_ref = ""; evidence_path = ""; } //+------------------------------------------------------------------+ //| Дополнительные строковые справочники. | //+------------------------------------------------------------------+ string LabFinalSourceName(const ENUM_LAB_FINAL_SOURCE s) { switch(s) { case LAB_FINAL_NONE: return("NONE"); case LAB_FINAL_SYNC_RETURN_REJECTION: return("SYNC_RETURN_REJECTION"); case LAB_FINAL_REQUEST_REJECTION: return("REQUEST_REJECTION"); case LAB_FINAL_CALLBACK_CHECK: return("CALLBACK_CHECK"); case LAB_FINAL_TIMER_CHECK: return("TIMER_CHECK"); } return("NONE"); } //+------------------------------------------------------------------+ //| Строковое имя вида записи | //+------------------------------------------------------------------+ string LabKindName(const ENUM_LAB_RECORD_KIND k) { switch(k) { case LAB_KIND_RUN_START: return("RUN_START"); case LAB_KIND_RUN_STATE: return("RUN_STATE"); case LAB_KIND_SLOT_STATUS: return("SLOT_STATUS"); case LAB_KIND_PRECHECK: return("PRECHECK"); case LAB_KIND_DISPATCH_INTENT: return("DISPATCH_INTENT"); case LAB_KIND_INTENT_SUPERSEDED: return("INTENT_SUPERSEDED"); case LAB_KIND_SEND_START: return("SEND_START"); case LAB_KIND_SEND_RETURN: return("SEND_RETURN"); case LAB_KIND_TRADE_TRANSACTION: return("TRADE_TRANSACTION"); case LAB_KIND_CORRELATION_LINK: return("CORRELATION_LINK"); case LAB_KIND_CORRELATION_CONFLICT: return("CORRELATION_CONFLICT"); case LAB_KIND_HISTORY_SCAN: return("HISTORY_SCAN"); case LAB_KIND_CONFIRMATION_SNAPSHOT: return("CONFIRMATION_SNAPSHOT"); case LAB_KIND_DEADLINE_EVALUATION: return("DEADLINE_EVALUATION"); case LAB_KIND_COLLECTION_CLOSE: return("COLLECTION_CLOSE"); case LAB_KIND_CORRECTION: return("CORRECTION"); case LAB_KIND_TIMER: return("TIMER"); case LAB_KIND_WAIT: return("WAIT"); case LAB_KIND_LOG_EMITTED: return("LOG_EMITTED"); case LAB_KIND_SAFETY_BLOCK: return("SAFETY_BLOCK"); case LAB_KIND_INTERVENTION: return("INTERVENTION"); case LAB_KIND_CHECKPOINT: return("CHECKPOINT"); case LAB_KIND_RUN_END: return("RUN_END"); } return("UNKNOWN"); } //+------------------------------------------------------------------+ //| Строковое имя статуса слота | //+------------------------------------------------------------------+ string LabSlotStatusName(const ENUM_LAB_SLOT_STATUS s) { switch(s) { case LAB_SLOT_PLANNED: return("PLANNED"); case LAB_SLOT_INTENT_SAVED: return("INTENT_SAVED"); case LAB_SLOT_DISPATCHED: return("DISPATCHED"); case LAB_SLOT_PRECHECK_REJECTED: return("PRECHECK_REJECTED"); case LAB_SLOT_CANCELED_BEFORE_DISPATCH: return("CANCELED_BEFORE_DISPATCH"); case LAB_SLOT_DISPATCH_UNCERTAIN: return("DISPATCH_UNCERTAIN"); case LAB_SLOT_WAIT: return("WAIT"); } return("PLANNED"); } //+------------------------------------------------------------------+ //| Строковое имя статуса проверки | //+------------------------------------------------------------------+ string LabCheckStatusName(const ENUM_LAB_CHECK_STATUS s) { switch(s) { case LAB_CHECK_NOT_RUN: return("NOT_RUN"); case LAB_CHECK_PASS: return("PASS"); case LAB_CHECK_FAIL: return("FAIL"); case LAB_CHECK_NOT_APPLICABLE: return("NOT_APPLICABLE"); } return("NOT_RUN"); } //+------------------------------------------------------------------+ //| Строковое имя уровня важности | //+------------------------------------------------------------------+ string LabSeverityName(const ENUM_LAB_SEVERITY s) { switch(s) { case LAB_SEV_INFO: return("INFO"); case LAB_SEV_WARNING: return("WARNING"); case LAB_SEV_BLOCKER: return("BLOCKER"); } return("INFO"); } #endif // REQUEST_LATENCY_LAB_MODELS_MQH //+------------------------------------------------------------------+