Блог им. Replikant_mih

Скорости бэктестов. Вопрос.

Всем привет.

Сориентируйте, пож, у кого какие скорости бэктестов на используемой вами технологической платформе. Допустим берем простенькую стратегию с простой логикой — свечная конструкция или что-то аналогичное, где сама торговая логика не ёмкая по вычислительным затратам. Допустим один прогон 5-минуток (речь о свечных данных) за 5 лет сколько будет выполняться?

Изначально хотел узнать, какие скорости на Wealth-lab, но было бы интересно и на других платформах. Сейчас столкнулся с тем, что текущая платформа дает не удовлетворяющую скорости — вот думаю, или адаптироваться или же есть смысл посмотреть в сторону Велс-лаба и т.д…
★1
98 комментариев
Описанный кейс должен прогоняться меньше чем за секунду на нормальных системах бектестинга.
однорукий экономист, должен — в смысле в вакууме или на какой платформе?))
avatar
Replikant_mih, на любой нормально написанной платформе. Там же всего 200к-300к тиков будет.
однорукий экономист, ответы, содержащие «на любой», «на всех» мне никак не помогают)),
avatar
Хотите скорость — пишите на Си или чем-то аналогичном. Все готовые платформы сильно тормозят. 
На 1-минутке за 10 лет один прогон стратегии у меня менее 1 минуты, включая подгрузку данных. 
avatar

SergeyJu, Хорошие скорости — это на C и есть? — Самописное?

Скорость хорошая.

avatar
Replikant_mih, даже не  Си. По старой памяти, VBA. На С# будет побыстрее. 
avatar
SergeyJu, Ясн, спасибо.
avatar
Неудовлетворительная скорость — это сколько?
Тарас Громницкий, 7 минут.
avatar

Replikant_mih, ну да.

Многовато.

Если возможности оптимизации нет, то придётся писать самому.

Либо тестер полностью, либо некий агрегатор.

Который бы переваривал эти данные и выдавал новый набор.

Меньший по размеру и подходящий для текущего тестера.

 

Полностью самописные вещи трудозатратны.

Особенно если нет навыка программирования.

В большинстве случаев они не рентабельны.

Тарас Громницкий, Не, свой сейчас не хочу, стандартный готов рассматривать, но игра должна стоить свеч, вот и хотел узнать, какой прирост скорости ожидать.
avatar

Replikant_mih, точно ответить трудно.

Потому как неизвестно какие расчёты вы ведёте.

Если пальцем в небо, то 5 лет 5 минуток можно переварить меньше, чем за минуту.

Если писать код левой ногой(без особых оптимизаций).

Тарас Громницкий, Да, хотел бы хотя бы просто меньше минуты, а лучше единицы секунд. Начинаю подозревать, что у меня медленно считается))).
avatar
Replikant_mih, у меня сотрудник писал одну прогу для тестирования методов типа рэндом форест на питоне. Считала задачу под сутки. После того, как он переписал ядро на C# ускорение раз в 30. 
Заняло 2 дня и подумать. 
Обычно подумать — самое сложное и самое эффективное. 
avatar
SergeyJu, Ну здесь как — если планируешь долго и много считать, то да, надо по-любому подумать и разово вложиться в быстрые тесты, потом получать профит от такого вложения.
avatar
Replikant_mih, обычно можно не лезть ниже пятнашек. В разведочном исследовании. (Ясно, что речь не про ХФТ). А минутки — уже для шлифовки.
avatar
SergeyJu, Не знаю, я так не делаю — это как так? — типа логику менять при переходе между тайм-фреймами? Потому что если неизменную стратегию переносить между ТФ — это ты просто смотришь работает-не работает закономерность на соответствующем ТФ.
avatar
Replikant_mih, сколько сделок в день делает Ваша типичная стратегия? 
Отвечать не обязательно, это наводящий вопрос.
avatar
SergeyJu, Чёт не навело))).
avatar
Replikant_mih, очень много, на чем это так?
avatar
cfree0185, Не знаю, какая доля кривых рук, вроде небольшая, но это S#.
avatar
Replikant_mih, в принципе правильно отписали, что 5мин за 5 лет это от 5 до 20 секунд в зависимости от проца, памяти и ссд. загрузи NinjaTrader, скачай минутки (на демке они все доступны) и запусти там стандартные стратегии на МА и увидишь сколько у тебя
avatar
cfree0185, ну у меня железо нормальное, мне конкретные цифры не важны, скорее порядок цифр. В целом ситуация вполне прозрачная, если не смогу выдать кратный прирост из платформы — буду расширяться, видимо))
avatar
Replikant_mih, самое узкое место — это загрузка и подгрузка данных. вот это дело можно поисследовать на примере статистики что платформа делает с обращениями к диску. и кстати сам способ и формат хранения данных.
avatar

cfree0185, В S# отдельный день лежит в отдельном файле в отдельной паке))

Вряд ли это супер-быстро)). Но там и сами вычисления не быстро идут, помимо файловых операций.

avatar
АМИ  — несколько секунд. (навскидку — около пяти секунд)

avatar

bocha, Как легко было бы жить в мире, если бы все комменты отвечали твоим ожиданиям))). Ещё идеальней было бы если бы в табличном виде: первый столбец — платформа, второй — секунды)). 

Спасибо! Мне кажется, в велсе что-то подобное было, но именно по велсу пока так никто и не отписался.

avatar
Replikant_mih, не знаю, как теперешний вэлс, а 5 лет назад было медленное и неудобное говнище.
avatar
Тестирую на Амиброкере, даже сложные стратегии на несколько тикеров тестирует на минутках за три года укладываясь в 1 секунду.
avatar
Friendly Deep Space, мне срочно нужен рыдающий смайлик!))
avatar
Replikant_mih, ну правда, не помню чтобы я ждал. После нажатия кнопки «тест» большинство из того, что я тестирую выдает результат сразу. Это может быть и 500 сделок, и 10000 например. Видимо просто очень быстрый тестер.
avatar
Friendly Deep Space, 100 тыщ лайков тому, кто проведет сравнительное тестирование ТОП хотя бы 5 платформ для тестирования стратегий на предмет скорости).
avatar
Replikant_mih, мне кажется уже было такое, надо просто погуглить. Могу сказать только в сравнении с тс-лабом, Ами по мне намного быстрее, я раньше на ТС-лабе тестил, но его тормоза мне надоели. Там тормозил даже сам интерфейс, не то что тестер. Вэлс быстро тестит, помню так же после нажатия уже готово, но там надо знать С#, а я его не знаю. В Ами все намного проще в его AFL, за 5 минут можно накидать идею и проверить.
avatar
Friendly Deep Space, да, щас быстренько уже прогуглил про Ами, для меня C# это наоборот плюс).
avatar
Friendly Deep Space, как на AmiBroker Formula Language (AFL) можно вообще что-то сложное написать?
avatar
cfree0185, смотря что в вашем понимании «сложное». Если вы пробовали писать свои задачи в AFL и он вас не удовлетворил возможностями, то наверное вы являетесь опытным программистом, и вам подойдут тру-языки для взрослых, вроде С++) Я не являюсь опытным программистом, и у меня пока не было таких задач, что я не смог бы в нем сделать. Никому его не навязываю, лишь делюсь своим имхо)
avatar
Friendly Deep Space, А AFL ООП поддерживает?)
avatar
Friendly Deep Space, Допустим я хочу алгоритмически рисовать линии на графике, наклонные, можно конечно это не ООПшно описать, но если усложнять, то зароешься в коде — он будет неудобный, неприятный. Усложнять с точки зрения линий — например, научился рисовать линии, дальше объединяешь линии в конструкции, выводишь классы фигур и т.д. — тут неплохо прикрутить наследование и т.д.))
avatar
Replikant_mih, я многое видел, и авторисование на графике, алерты всевозможные, кнопки с заданными функциями на графике, нейросети, подключаемые dll, подключаемый Mathlab, что угодно. Но я думаю, что если вы достаточно опытны, вам не составит труда писать свои задачи как на С#, так и на AFL. Нужно только ответить на вопрос зачем это делать именно на AFL.
avatar
Friendly Deep Space, Тоже не являюсь опытным программистом, но прелести ООП прочувствовал).
avatar
Амиброкер — гоночная платформа, всю жизнь с ним и менять не хочу.
Машковский Евгений, по аналогии с гонками — у гоночных машин убирт все удобное, но име.ющее лишний вес, получается быстро из-за веса, но неудобно. В целом тут схожая дилемма, учитывая конечно, что можно при желании сделать в меру быстро и вполне удобно и т.д.
avatar
Машковский Евгений, как на AmiBroker Formula Language (AFL) можно что-то сложное написать?
avatar
cfree0185, можно и сложное, но обычно всё сложное хорошо работает на истории и плохо на новых данных, так что Ами отличная прога!
Машковский Евгений, Здесь искажение информации — сложное плохо работает на новых данных — здесь «сложное» — это многопараметрическое, подогнанное, а сложное в плане возможностей языка — это скорее про другое.
avatar
Replikant_mih, вам видней.
Проверил 5 минутки за 5 лет (FORTS). Система из 3-х правил типа: MACDintersection+ForceOfHighLowLevel+TwoVolumeCompare
Компьютер Core i5, самодельный тестер
Рейт 600 раз в минуту т.е. 10 раз в сек. Это при загрузке всех ядер то есть несколько вариантов считается параллельно.
avatar
ivanovr, Нда, неплохо). Самодельный тестер умеет что-то интересное, или в угоду скорости пожертвовано всем ну или просто многим?
avatar
Replikant_mih, вряд ли что-то интересное. Разрабатывался с упором на скорость ради генетических алгоритмов. Потому работает побарно, соответственно вход в сделку только на открытии бара. Поддерживает SL и TP.
avatar

ivanovr, много строчек кода?

Тоже что ли запилить — простое, очень быстрое, прям даже консольное можно).

avatar
Replikant_mih, алгоритм не сложный в целом. Такой и в Экселе делают.
Ради скорости надо брать нормально компилируемый язык и писать так, чтобы в основном цикле не нагружать менеджер памяти. Т.е. память и объекты выделить заранее
avatar
одноминутки за 4 года от 5 до 40 секунд, вместе с подгрузкой данных и заполнением файла отчета.
два робота в одном мире (общий счет) поминутно за 4 года ~80 сек.
в зависимости от числа индикаторов и частоты и сложности их перерасчетов.
9 лет — 20 секунд, это относительно легкий робот.
Java.

параллельно крутится квик и тренируется еще один робот.
avatar
ПBМ, самодельный тестер?
avatar
Replikant_mih, ага
avatar

ПBМ, А у вас он много чего умеет или простой?

В принципе вырисовывается кучная область со скоростями единицы секунд на обозначенный дата-сет. Мои 7 минут выглядят очень аномально на этом фоне)).

avatar
Replikant_mih, у меня несколько разных, под разные задачи, этот конкретный — просто одинарный прогон, со сбором статистики.
есть ещё оптимизатор c многократным прогоном. 
и есть тот в чём крутится реальный робот.
т.е. всё более менее стандартно.
время не сразу такое получилось. тоже профилировал, улучшал медленные куски, дублирование, избавлялся от циклов и вложенных циклов.


avatar
У меня в R 10 лет минуток обсчитываются от 30 сек до неск минут
avatar
Sergey Pavlov, Если на моих данных прогнать, видимо, это будет х10 относительно минутки-10 лет. Но ты не зря озвучил минутки и 10 лет — видимо, на таких данных ты тестишь — хватает таких скоростей?
avatar
Replikant_mih, это один прогон, мне такой скорости вполне хватает. Смотри. в стратегии у меня пара параметров. Один для средней цены, другой для волатильности. Делаю сетку по 10 шагов того и другого. Итого 100 прогонов, которые займут 1-2-3 часа времени. Такие комплексные прогоны я делаю пару раз в месяц. Также скорость будет зависеть от того, какие метрики считать во время прогона. Я могу всё сильно замедлить, если считать максимально всю статистику, вплоть до поминутной эквити. А можно наоборот, считать только пару итоговых показателей: среднегодовой ретурн и срсделку. Тогда всё будет в разы быстрее. Вообще, S# должен при прочих равных ощутимо по скорости обсчета обыгрывать R.
avatar

Sergey Pavlov, >>«Вообще, S# должен при прочих равных ощутимо по скорости обсчета обыгрывать R.»

чёт не обыгрывает), но я ещё продолжаю пытаться).

 

Не, я при желании смогу попробовать уложиться в 100 тоже, но не развернешься, конечно)).

avatar
Replikant_mih, значит прочие условия сильно неравные и S# делает еще кучу всякой (возможно, ненужной в данном случае) работы. А зачем и почему S#?
avatar

Sergey Pavlov, Тебе разве не хотелось никогда протестить стратегию, сделать пару движений рукой и вуаля — можно в бой. 

Ну а в целом система довольно мощная, хотя недостатков много.

avatar
Replikant_mih, хотелось, но под описание
пару движений рукой и вуаля — можно в бой
подходит тслаб, но не стокшарп.
avatar

Sergey Pavlov, Нуу, если взять переменные трудозатраты и постоянные, то S# это дохрена постоянных (разовых), а потом с переменными норм будет когда все настроишь, во всем разберешься — я Shell модифицированный юзаю, реально берешь код, открываешь его в другой вкладке и вот он уже не тестируется а торгует в бою.

 

А TSLab хорош в плане того что и разовые трудозатраты не велики — он работает из коробки сразу).

avatar
Replikant_mih, ну и как? ЕМНИП, ты с полгода точно уже этим занимаешься… Стало быть, минимум, через полгода у тебя всё будет с одной кнопки летать и больше не потребует времязатрат...
А ведь можно было быстрее и проще: мт5, тслаб, ами, луа.
avatar
Sergey Pavlov, Ну вот всплывают всякие штуки — как-то медленная оптимизация на S#. Да и развитие — это же не движение от A к B, это движение от A к ближайшей цели B, затем выставление новой цели C — короче непрерывный процесс развития. Иначе теряешь конкурентное преимущество. Сейчас уже переключение между бэктестом и торговлей это вопрос 5-ти минут. Но как сказал, есть нюансы — например, скорость бэктеста — я конечно могут адаптировать свои бизнес-процессы исходя из медленной скорости, но не хочется — думаю, я утрачу определенное конкурентное аналитическое преимущество, а в высококонкурентной среде этого делать не хочется.
avatar
Replikant_mih, чтобы потерять конкурентное преимущество, надо сначала его найти )) 
Пафос Респектыч, Типа того), вернее его можно заработать, либо оно изначально у тебя было.
avatar

Replikant_mih, да не, изначально у тебя 24 часа в сутках ) на самом деле я бы посоветовал сначала сделать норм стратегию и пока не заморачиваться как её торговать потом. Это потом может наступить довольно нескоро ) а торговать неторговабельное — потеря времени и денег, плюс разочарования депрессии алкоголизм — как следствие расходы на восстановление и реабилитацию )

Есть оч много разных опен сорс фреймворков для бэктестинга на питоне, они в основном простые, просто устанавливаются, примеры в комплекте, работают тоже с приемлемой скоростью — точно быстрее чем всякие велслабы. Я бы взял какой-нибудь, например этот: http://pmorissette.github.io/bt, ну или список сам нагуглишь ) накачал минуток с финама и вперёд

Пафос Респектыч, Да всё уже начато давно)) — есть у меня норм стратегии). 

Тут S# только что выкатил обновление тестера — ощутимо скорость подтянули, так что, возможно, тема уже не актуальна. 

avatar
Replikant_mih, ну хорошо если есть, но откуда это можно утверждать, если пока остаются вопросы по тестированию? Тут надо внимательно ) На рандомизированных данных погонять и т д, чтобы понять насколько сам подход вообще рабочий. Может правда ты сам конечно руками сделал неск тыщщ сделок по системе ну тогда наверное норм )
Пафос Респектыч, Ну я ж не тока что начал тестить — просто некая перетряска переосмысление технологической платформы.
avatar
Replikant_mih, этапы большого пути ) рандомные ряды от рыночных отличать уже научился?
Пафос Респектыч, Пока мне это не требовалось, но в планах есть добавить в процесс тестирования что-то подобное.
avatar
Replikant_mih, а как тогда понять, можно торговать этими стратегиями этот инструмент, или нет, с каким-то положительным результатом? Или ты за процесс? ))
Пафос Респектыч, А прогоны нахрена делать на исторических данных?) — А аналитику прогонов нахрена делать?))
avatar
Replikant_mih, конечно надо делать прогоны, с этим никто не спорит, просто если на исторических данных аналитика выглядит так же, как и на рандомных (про которые априори известно, что они рандомные и на них нельзя построить прибыльную страту), то у тебя нет перевеса, сколько ни гоняй

Пафос Респектыч, Прогоны на истории — ничто, если они без аналитики — именно от того, как интерпретируешь результаты и зависит будет ли стратегия после запуска в бой «сразу вниз» или так же как на бэктесте.

 

Да, тестирование на всякого рода псевдо данных или случайных данных может быть частью информации для последующей аналитики, но можно выстраивать аналитику и без этого. Как сказал, в дальнейшем скорее всего в каком-то виде введу этот элемент в общую схему аналитических бизнес-процессов.

avatar
Replikant_mih, так же как на бэктесте скорее всего не будет, это девичьи мечты ) ну дерзай )
Пафос Респектыч, Ну я условно написал, конечно же. В противовес варианту «вниз».
avatar

Replikant_mih,

 

протестить стратегию, сделать пару движений рукой и вуаля — можно в бой

Так не бывает, ну может только если ты это делаешь в 100500 раз и очень хорошо понимаешь, что происходит внутри бэктестера и что значат те чиселки, которые он показывает. В случае с каким-нибудь S#, подозреваю, для этого нужно инвестировать не один год собственного времени и уйму сил, разобраться в исходниках, там наверняка и багов хватает.

Если бы я не писал себе всё сам, наверное взял бы Амиброкер, глядя на отзывы людей, да и вон SenSor на нём что-то делает и у него вроде получается.
Пафос Респектыч, А торговать в чем?)

Мне главное не делать перекос в сторону инфраструктуры и программирования, а делать акцент все-таки на самих стратегиях).
avatar
Replikant_mih, так вроде через амиброкер можно и торговать, он к Квику подключается емнип. http://lmgtfy.com/?q=amibroker+quik
Пафос Респектыч, Только бы не сорваться и не начать переезжать на другую платформу, только бы не сорваться…
avatar
Replikant_mih, MT5 опять же )
Replikant_mih, самый быстрый тестер, который я видел, это OpenQuant (SmartQuant). У них заявлена 500 000 тиков в секунду. Я прогонял обычные мувинги — очень похоже на правду.

Если данные хранятся в TXT, то их парсинг будет занимать несколько секунд, поэтому тестеры на бинари данных всегда будут быстрее.
Опять же есть барные тестеры (Ами, Омега и тд) — они будут быстрее событийных тестеров. Но на последних можно строить хоть HFT алго.

Еще важно, чтобы тестовый код можно было запустить в бой сразу, а не переписывать его под рилтайм.
avatar

yurikon, Ещё для меня выглядит странным если ты, например, гоняешь оптимизацию на одном дата-сете, при этом каждый раз его читаешь из файла — из оперативки же быстрее. Но это так).

 

>>«Еще важно, чтобы тестовый код можно было запустить в бой сразу, а не переписывать его под рилтайм.»

Да, стараюсь не отходить от этого принципа.

avatar
yurikon, использовал ОпенКвант. Мне не понравилось. 
avatar
SergeyJu, а что в нем не понравилось?
Я его использовал только для сравнения скорости со своим тестером.
avatar
yurikon, очень неудобно ввести системы в торгуемый портфель и вывести из него. Вообще, написано для любителя-одиночки. Но не дешево. Как-то одно с другим не вяжется. Получается так, что делать что-то серьезное с этой прогой не выходит иначе, как все писать самому. А тогда нафига козе баян? 
avatar
Replikant_mih, цепляется до Квика через АПИ, есть платный способ, есть бесплатный, оба рабочие, но с разными возможностями и некоторыми нюансами)
avatar
Sergey Pavlov, если 100 прогонов на одной подгрузке данных 10 лет минутки, то я в 10-30 мин вкладываюсь. Статистики все всегда считаю енд-оф-дей. Картинки рисую по итогу. 
avatar
SergeyJu, на то у вас и СИ. Я пока, если медлительность напрягает, включаю голову и пытаюсь придумать как упростить и убыстрить. Как правило, находится способ адаптивного подсчета всех величин, чтобы от увеличения значений параметров время одного прогона почти не увеличивалось.
avatar
Sergey Pavlov, даже не Си. Программно можно ускориться, но лень. 
Насчет итерационного подсчета индюков и прочего — согласен, я тоже стараюсь использовать быстрые схемы, если хочу оптимизировать вычисления. 
avatar
Sergey Pavlov, в R самописный тестер или quantstrat?
avatar
r0man, самописный
avatar

теги блога Replikant_mih

....все тэги



UPDONW
Новый дизайн