Бэктестинг, кнопка оптимизировать - Оптимизирую стратегию на внешнем датасете (файле) склейка Ri
Файл парсится ок, оптимизация выполняется ок. Но когда смотришь результат, видно что данные использовались не из локального файла истории, а берутся с сервера альфы по другому инстркменту.
Тестирование, кнопка тестировать - тут видно что данные подтягиваются правильно, из локального текстового файла исторических данных.
Одним словом если Тестировать, то данные локальные подтягиваются корректно, если оптимизировать то данные берутся с сервера несмотря на указание на локальный файл.
Это баг???, что можно сделать?
Стратегии и роботы > Оптимизация на внешнем датасете
Re: Оптимизация на внешнем датасете
Друзья, неужели никто не знает почему при тестировании нормально цепляется внешний файл котировок, а при оптимизации ни как не хочет? Берет котировки с сервера
Re: Оптимизация на внешнем датасете
Сергей_С писал(а):Друзья, неужели никто не знает почему при тестировании нормально цепляется внешний файл котировок, а при оптимизации ни как не хочет? Берет котировки с сервера
"Тестировать" обычно гоняет стратегию в контексте текущей серии/внешнего файла, который ты привязал в интерфейсе (или который читает твой код).
Оптимизировать почти всегда запускает отдельный оптимизатор/воркеры, которые сами поднимают данные через стандартный DataFeed по инструменту (сервер Альфы), и твоя “внешняя история” либо не прокидывается, либо не поддерживается в оптимизаторе.
Отсюда ровно твой симптом: в тесте локальный файл ок, в оптимизации — вдруг “подменилось” на серверные котировки другого инструмента.
Re: Оптимизация на внешнем датасете
Идея:
1.
Добавь в стратегию проверку: если внешний файл не загрузился — прекращай расчёт (или кидай исключение/логируй жирно), чтобы оптимизатор не мог “незаметно” перейти на серверные котировки.
после загрузки файла выставляешь флаг Loaded = true
если Loaded == false → return; и/или throw
лог: откуда данные (имя файла/кол-во баров/первые даты)
Это сразу покажет: оптимизатор реально не видит файл или игнорит его.
2.
импорт истории в локальную базу/кэш (не “подключить файл”, а “импортировать как историю инструмента”) - лучший путь.
Суть:
создаёшь (или используешь) локальный инструмент типа RI_CONTINUOUS_LOCAL
импортируешь туда твою “склейку Ri”
оптимизатор уже будет брать не сервер, а локальный кэш, потому что для него это “нормальная история”.
Да, это чуть муторнее, но зато оптимизация будет честной.
3.
Проверь в коде: ты нигде не используешь функции/объекты, которые тянут серверную серию (условно “Instrument/Quotes/History” вместо Input).
Правило для оптимизации:
все расчёты строго через Input.* (то, что тебе прокидывает источник),
никаких скрытых вызовов “получи историю инструмента”.
Если где-то есть такой вызов — оптимизатор будет всегда на сервере.
4.
Обходной путь: “оптимизация” через серию тестов (если оптимизатор принципиально не работает с файлами)
Если выяснится, что оптимизатор в принципе не видит внешний файл, то рабочий обход:
делаешь цикл параметров внутри кода (или запускаешь пачку тестов через скрипт/батник, если АД позволит),
результат пишешь в CSV.
Да, это “самодельный оптимизатор”, но зато данные будут 100% те же.
5.
Чтобы не гадать, сделай так:
В начале Evaluate() один раз (на CurrentIndex == 0 или 1) выведи в лог:
источник (путь файла / “Loaded”)
первые 3 даты/цены, которые видит стратегия
Запусти Тест → смотри лог (даты должны совпасть с файлом)
Запусти Оптимизацию → смотри лог
если Loaded=false или даты другие → оптимизатор не видит файл/фоллбек
если Loaded=true, но даты серверные → оптимизатор игнорит Input и берёт сервер
6.
С высокой вероятностью это либо:
ограничение/баг оптимизатора (внешний файл не поддержан),
либо
файл не доступен воркерам оптимизации, и идёт тихий fallback на сервер.
1.
Добавь в стратегию проверку: если внешний файл не загрузился — прекращай расчёт (или кидай исключение/логируй жирно), чтобы оптимизатор не мог “незаметно” перейти на серверные котировки.
после загрузки файла выставляешь флаг Loaded = true
если Loaded == false → return; и/или throw
лог: откуда данные (имя файла/кол-во баров/первые даты)
Это сразу покажет: оптимизатор реально не видит файл или игнорит его.
2.
импорт истории в локальную базу/кэш (не “подключить файл”, а “импортировать как историю инструмента”) - лучший путь.
Суть:
создаёшь (или используешь) локальный инструмент типа RI_CONTINUOUS_LOCAL
импортируешь туда твою “склейку Ri”
оптимизатор уже будет брать не сервер, а локальный кэш, потому что для него это “нормальная история”.
Да, это чуть муторнее, но зато оптимизация будет честной.
3.
Проверь в коде: ты нигде не используешь функции/объекты, которые тянут серверную серию (условно “Instrument/Quotes/History” вместо Input).
Правило для оптимизации:
все расчёты строго через Input.* (то, что тебе прокидывает источник),
никаких скрытых вызовов “получи историю инструмента”.
Если где-то есть такой вызов — оптимизатор будет всегда на сервере.
4.
Обходной путь: “оптимизация” через серию тестов (если оптимизатор принципиально не работает с файлами)
Если выяснится, что оптимизатор в принципе не видит внешний файл, то рабочий обход:
делаешь цикл параметров внутри кода (или запускаешь пачку тестов через скрипт/батник, если АД позволит),
результат пишешь в CSV.
Да, это “самодельный оптимизатор”, но зато данные будут 100% те же.
5.
Чтобы не гадать, сделай так:
В начале Evaluate() один раз (на CurrentIndex == 0 или 1) выведи в лог:
источник (путь файла / “Loaded”)
первые 3 даты/цены, которые видит стратегия
Запусти Тест → смотри лог (даты должны совпасть с файлом)
Запусти Оптимизацию → смотри лог
если Loaded=false или даты другие → оптимизатор не видит файл/фоллбек
если Loaded=true, но даты серверные → оптимизатор игнорит Input и берёт сервер
6.
С высокой вероятностью это либо:
ограничение/баг оптимизатора (внешний файл не поддержан),
либо
файл не доступен воркерам оптимизации, и идёт тихий fallback на сервер.
Вернуться в «Стратегии и роботы»
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 8 гостей