В общем решил попробовать стратегии OS_Engine_team из рекламируемого АлгоСтарта !
Все скачал запустил, показывает неплохую растущую эквити вроде все круто.
НО решил все перепроверить в используя модный Vibe Coding и другую систему создания стратегий.
И тут начались проблемы с воспроизведением результатов которые давала OSEngine:
— доходность упала в два раза
— Sharpe уменьшился в два раза
— Max DrawDown вырос до 50%
И пришлось все ДЕТАЛЬНО анализировать с помощью дебаггера и создания логов.
В результате нашел что скринер по волатильности у меня считался немного по другому, поменял расчет,
после этого MAX DrawDown уменьшился до -15%, что уже неплохо и почти как в оригинале, НО доходность НЕ выросла,
и первые 5 лет с 2015 по 2020 год эквити почти топчется на месте, у в оригинале эквити всегда растет.
Пришлось вернуться назад и заново все детально проверять.
И вот какую ошибку я нашел в результате проверок:
(это мое предположение почему есть проблема)
—
-------------------------------------------------Суть проблемы
У разных тикеров в исторических данных могут отсутствовать свечи за определённые периоды:
не было сделок,
биржа не торговалась,
сбой при скачивании истории,
разные торговые календари и т.д.
Это нормально и неизбежно.
❗ Проблема начинается дальше.
Как ведёт себя OS Engine
Судя по поведению, OS Engine:
Делает первичное выравнивание по временным меткам.
Далее идёт по массивам свечей без учёта временных меток, просто по индексам.
В результате индикаторы начинают считаться по разным реальным периодам времени, хотя визуально всё выглядит корректно.
Пример
Допустим, считаем
SMA(5)по трём тикерам:
Тикер 1 — данные полные
→ SMA считается за 5 последних календарных дней, включая сегодняшний.Тикер 2 — нет свечей за сегодня
→ SMA считается за 5 рабочих дней, но только до вчерашнего дня.Тикер 3 — был сбой в истории
→ SMA считается за 5 дней в прошлом месяце.При этом:
ошибок нет,
предупреждений нет,
визуально в интерфейсе всё выглядит «нормально».
Вы никогда об этом не узнаете, если не начнёте пошагово проверять данные и отлаживать расчёты в дебаггере.
Почему это опасно
Скринеры дают некорректные сигналы
Результаты тестирования искажены
Стратегии могут «работать» только из-за ошибки синхронизации данных
Найти причину практически невозможно без глубокого анализа
Дальше решил проверить мои выводы с помощью LLM:
Промпт для Athcropic агента по исходному коду OSEngine
Проверь правильность утверждения, проанализировав исходный код
```
Ошибка в скринерах и там где используется больше одного тикера для тестирования
Проблем состоит в том что в данных тикеров могут отсутствовать свечи за разные периоды времени, не было сделок в этот перид или другая причина
НО когда OS Engine начинает идти по свечкам тикеров то видимо используется только первоначальное выравнивание по временным меткам, а потом по истрическим данным мы идем игнорирую временные метки. В результате получается что по одному тикеру, к примеру SMA(5) считается за 5 последних дней включая теущий день, по второму тикеру считается за 5 рабочих дней НО только до вчерашнего дня, а по третьему(если к примеру был сбой при скачке истторических данных) за пять дней в прошлом месяце. И вы этого даже не заметите нигде и не поймете, если не начнете все детально отлаживать и проверять в дебаггере.
```
Полученный ответ после анализа:
-----------------------------------------
АНАЛИЗ УТВЕРЖДЕНИЯ: ОШИБКА СИНХРОНИЗАЦИИ СВЕЧЕЙ В МНОГОТИКЕРНОМ ТЕСТИРОВАНИИНа основе анализа исходного кода утверждение СПРАВЕДЛИВО И КРИТИЧНО ВЕРНО. Вот подробное объяснение проблемы:
1️⃣ АРХИТЕКТУРА ПРОБЛЕМЫ
Основной поток обработки свечей (TesterServer.cs, строки 862-867):
Суть проблемы: Все тикеры обрабатываются ПОСЛЕДОВАТЕЛЬНО в одном цикле, используя ОДНО ТЕКУЩЕЕ ВРЕМЯ (TimeNow).
2️⃣ КАК ЭТО ПРОИСХОДИТ В РЕЖИМЕ ТЕСТИРОВАНИЯ
Фаза 1: Начальное выравнивание (по времени)
В SecurityTester.CheckCandles() (строки 4769-4849):
На этом этапе: Все свечи выравниваются по временным меткам. Если у тикера нет свечи на текущий момент времени, он просто ждёт или пропускает.
Фаза 2: Обработка исторических данных (БЕЗ проверки времени)
В CandleSeries.SetNewCandleInArray() (Candles/CandleSeries.cs, строки ~595-646):
3️⃣ ОСНОВНОЙ ДЕФЕКТ: ИГНОРИРОВАНИЕ ВРЕМЕННЫХ МЕТОК
Сценарий, где это ломается:
Допустим, тестируем 3 тикера с 5-минутными свечами:
Время
Тикер 1 (EURUSD)
Тикер 2 (GBPUSD)
Тикер 3 (USDJPY)
10:00
✅ Есть
✅ Есть
✅ Есть
10:05
✅ Есть
⚠️ Нет данных
✅ Есть
10:10
✅ Есть
✅ Есть
❌ Ошибка скачивания
...
...
...
...
Что происходит при обработке индикатора SMA(5):
4️⃣ ГДЕ СКРЫТА ПРОБЛЕМА В КОДЕ
А) В LoadNextData() — нет синхронизации:
Б) В CheckCandles() — нет проверки пропусков:
В) В SetNewCandleInArray() — НЕТ валидации:
5️⃣ ПОЧЕМУ ЭТО НЕ ВИДНО БЕЗ ОТЛАДКИ
- Визуально скринер показывает значения (SMA = 100.5, 102.3 и т.д.)
- Математически SMA рассчитана правильно по доступным свечам
- НО эти свечи могут быть из разных временных интервалов!
- Индикатор ничего «не знает» о пропусках в исторических данных
Пример:
- SMA по EURUSD: среднее за последние 25 минут ✅ (правильно)
- SMA по GBPUSD: среднее за 10 минут + 3 дня назад ❌ (ОШИБКА!)
- SMA по USDJPY: среднее за май прошлого года ❌❌ (КРИТИЧЕСКАЯ ОШИБКА!)
6️⃣ КОД, ДЕМОНСТРИРУЮЩИЙ ПРОБЛЕМУ
BotTabScreener.cs, строка 2638:
BotTabSimple.cs, строка 6525:
7️⃣ ПОСЛЕДСТВИЯ ДЛЯ ТЕСТИРОВАНИЯ
Проблема
Последствие
Разные временные интервалы в SMA
Неверные сигналы
Корреляция между тикерами «из прошлого»
False positives в торговле
Пропущенные дни в одном из тикеров
Слепое тестирование
Ошибка скачивания истории
Тест на АБСОЛЮТНО НЕПРАВИЛЬНЫХ данных
8️⃣ КАК ЭТО МОЖНО ИСПРАВИТЬ
Вариант 1: Синхронизация с проверкой времени
Вариант 2: Добавить валидацию в CandleSeries
ИТОГОВЫЙ ВЫВОД✅ УТВЕРЖДЕНИЕ ПОЛНОСТЬЮ СПРАВЕДЛИВО
Проблема действительно существует и скрыта в архитектуре OS Engine:
- Нет принудительной синхронизации между свечами разных тикеров
- Временные метки игнорируются при добавлении свечей в индикаторы
- Пропущенные дни/пропуски обрабатываются молчаливо без предупреждений
- Некорректные сигналы гарантированы при тестировании на нескольких тикерах
Это КРИТИЧЕСКИЙ ДЕФЕКТ для систем типа скринеров, которые сравнивают несколько инструментов одновременно.
Так что имейте это ввиду!
Доходность стратегий АлгоСтарта будет раза в 2 ниже чем то что показывает OSEngine.
НУ а по ХОРОШЕМУ, НАДО ИСПРАВИТЬ баги в OSEngine и ЗАНОВО провести ВСЕ тестирования стратегий и подбор параметров.
Подробнее https://smart-lab....