76 lines
No EOL
5.7 KiB
Markdown
76 lines
No EOL
5.7 KiB
Markdown
# DependencyChanges
|
|
|
|
Зафиксированные изменения для переиспользуемого кода статьи 1 (ТЗ §2.2/§2.3).
|
|
|
|
Источники (исходные каталоги статьи 1 не изменялись):
|
|
- `..\mql5-execution-microstructure\Experts\LifecycleBenchmark\LifecycleBenchmark.mq5`
|
|
- `..\mql5-execution-microstructure\Experts\OrderLifecycle\OrderLifecycleRecorder.mq5`
|
|
- `..\mql5-execution-microstructure\Experts\OrderLifecycle\TradeLifecycle.mqh`
|
|
|
|
Контрольные суммы исходных файлов совпадают с ТЗ:
|
|
|
|
| Файл | SHA-256 |
|
|
|---|---|
|
|
| LifecycleBenchmark.mq5 | `430abc7d254c7f18c8db4f48f1a44be48a0c5cf338bd16aa4d621ffd4654a8d9` |
|
|
| OrderLifecycleRecorder.mq5 | `27463190954b5200444781ba4a49bb167c210087ad511a39616cfc807b69ea84` |
|
|
| TradeLifecycle.mqh | `0b3d409a1da0fa05bad541944b9922ca6beeb26a2920836d408efdaf930bce30` |
|
|
|
|
## 1. BenchmarkStatistics.mqh (из LifecycleBenchmark.mq5, строки 211–255)
|
|
|
|
- Исходные функции `MinValue/MaxValue/AvgValue/Percentile` сохранены как
|
|
`LegacyMinValue/LegacyMaxValue/LegacyAvgValue/LegacyPercentile` **без изменения
|
|
алгоритма** (линейная интерполяция, p в 0..100) — для проверки согласованности.
|
|
- Адаптированные версии `LabMinValue/LabMaxValue/LabAvgValue/LabPercentile/LabStdDev`:
|
|
- возвращают false при пустой выборке (значение не выдумывается);
|
|
- p проверяется в [0,100];
|
|
- stddev — выборочное (n−1), для n=1 возвращает false (пустое).
|
|
- Причина: ТЗ требует проверок границ, выделения памяти и пустой выборки, при этом
|
|
«пустой массив и ошибки не превращаются в ноль».
|
|
|
|
## 2. TradeRequestTools.mqh (из OrderLifecycleRecorder.mq5)
|
|
|
|
- `LabNormalizePrice` — исходный алгоритм (SYMBOL_DIGITS) без изменений.
|
|
- `LabNormalizeVolume` — исходная математика (диапазон/шаг/округление), но выход за
|
|
диапазон теперь возвращает false вместо тихой подгонки (ТЗ §2.4).
|
|
- `SelectFilling(symbol, is_pending)` — для отложенных ордеров закреплён RETURN
|
|
(ТЗ §2.4); для рыночных — исходное поведение.
|
|
- `LabBuildRequest(plan, rules, quote, request, error)` — замена исходного
|
|
`BuildRequest(symbol,type,volume,...)`: параметры передаются явно, вместо Inp*/EXT*;
|
|
цена покупки/продажи из котировки, лимитные ордера с отступом D; продажа/покупка
|
|
округление в сторону рынка; **удалено** безусловное `PrintFormat` из измеряемого пути.
|
|
- `LabPreCheck` — обёртка `OrderCheck` без печати результата.
|
|
- `VolumeToUnits` — перевод объёма в целые шаги с допуском 1e-7 (ТЗ §6.4).
|
|
- Сознательно НЕ перенесено: автоповторы (`ScheduleRetry`), прежние сроки ожидания,
|
|
безусловное подробное журналирование.
|
|
|
|
## 3. LifecycleAdapter.mqh (TradeLifecycle.mqh по ссылке)
|
|
|
|
- TradeLifecycle.mqh подключается по абсолютному пути из соседнего проекта:
|
|
`...MQL5\Shared Projects\mql5-execution-microstructure\Experts\OrderLifecycle\
|
|
TradeLifecycle.mqh` — снимки не копируются, исходные байты не изменены.
|
|
- Адаптер использует: `RetcodeName`, `ShortTypeName`, `IsPendingType`, структуры
|
|
`TradeEvent/PendingRequest`.
|
|
- Не перенесено: сужение `ulong sequence -> uint`, старая очистка позиций,
|
|
`IsComplete` не устанавливает T6 лаборатории (доступен как диагностика
|
|
`LegacyChainComplete`).
|
|
- `AdaptEvent` — конвертация `TradeEvent` в `LabEvent` журнала для диагностики.
|
|
- Учтена версия CTradeLifecycle с `m_chain_start` и `EventInLastChain` (ТЗ §2.2).
|
|
|
|
## Проверяющие тесты
|
|
|
|
- `Tests/RequestLatencyTests.mq5`: STAT-02 (равенство c [0,10,20,30]), STAT-01
|
|
(пустой/[5]), PLAN-01 (Park–Miller seed=1), CSV-01/02, MARKET-04/05, DEAL-01,
|
|
DATA-03, CORR-05.
|
|
- Согласованность процентилей с исходным алгоритмом на допустимых входах проверяется
|
|
равенством `LabPercentile` и legacy-формулы на контрольных наборах (тот же код
|
|
интерполяции).
|
|
- Отсутствие исходных обработчиков событий и глобального состояния: Legacy-модули не
|
|
содержат `OnInit/OnTick/OnTradeTransaction` и глобальных переменных `EXT_*`/`Inp*`.
|
|
|
|
## Ограничения
|
|
|
|
- `used_module_sha256` в `dependencies.lock.json` заполняются при первой фиксации
|
|
модулей в репозитории.
|
|
- Исходные каталоги статьи 1 не изменялись; сборка требует наличия соседнего
|
|
каталога mql5-execution-microstructure (абсолютный #include в LifecycleAdapter.mqh);
|
|
обновление зависимости — отдельное изменение с новым lock-файлом и повторными тестами. |