Сориентируйте, пож, у кого какие скорости бэктестов на используемой вами технологической платформе. Допустим берем простенькую стратегию с простой логикой — свечная конструкция или что-то аналогичное, где сама торговая логика не ёмкая по вычислительным затратам. Допустим один прогон 5-минуток (речь о свечных данных) за 5 лет сколько будет выполняться?
Изначально хотел узнать, какие скорости на Wealth-lab, но было бы интересно и на других платформах. Сейчас столкнулся с тем, что текущая платформа дает не удовлетворяющую скорости — вот думаю, или адаптироваться или же есть смысл посмотреть в сторону Велс-лаба и т.д…
Хотите скорость — пишите на Си или чем-то аналогичном. Все готовые платформы сильно тормозят.
На 1-минутке за 10 лет один прогон стратегии у меня менее 1 минуты, включая подгрузку данных.
Тарас Громницкий, Не, свой сейчас не хочу, стандартный готов рассматривать, но игра должна стоить свеч, вот и хотел узнать, какой прирост скорости ожидать.
Replikant_mih, у меня сотрудник писал одну прогу для тестирования методов типа рэндом форест на питоне. Считала задачу под сутки. После того, как он переписал ядро на C# ускорение раз в 30.
Заняло 2 дня и подумать.
Обычно подумать — самое сложное и самое эффективное.
SergeyJu, Ну здесь как — если планируешь долго и много считать, то да, надо по-любому подумать и разово вложиться в быстрые тесты, потом получать профит от такого вложения.
SergeyJu, Не знаю, я так не делаю — это как так? — типа логику менять при переходе между тайм-фреймами? Потому что если неизменную стратегию переносить между ТФ — это ты просто смотришь работает-не работает закономерность на соответствующем ТФ.
Replikant_mih, в принципе правильно отписали, что 5мин за 5 лет это от 5 до 20 секунд в зависимости от проца, памяти и ссд. загрузи NinjaTrader, скачай минутки (на демке они все доступны) и запусти там стандартные стратегии на МА и увидишь сколько у тебя
cfree0185, ну у меня железо нормальное, мне конкретные цифры не важны, скорее порядок цифр. В целом ситуация вполне прозрачная, если не смогу выдать кратный прирост из платформы — буду расширяться, видимо))
Replikant_mih, самое узкое место — это загрузка и подгрузка данных. вот это дело можно поисследовать на примере статистики что платформа делает с обращениями к диску. и кстати сам способ и формат хранения данных.
bocha, Как легко было бы жить в мире, если бы все комменты отвечали твоим ожиданиям))). Ещё идеальней было бы если бы в табличном виде: первый столбец — платформа, второй — секунды)).
Спасибо! Мне кажется, в велсе что-то подобное было, но именно по велсу пока так никто и не отписался.
Replikant_mih, ну правда, не помню чтобы я ждал. После нажатия кнопки «тест» большинство из того, что я тестирую выдает результат сразу. Это может быть и 500 сделок, и 10000 например. Видимо просто очень быстрый тестер.
Friendly Deep Space, 100 тыщ лайков тому, кто проведет сравнительное тестирование ТОП хотя бы 5 платформ для тестирования стратегий на предмет скорости).
Replikant_mih, мне кажется уже было такое, надо просто погуглить. Могу сказать только в сравнении с тс-лабом, Ами по мне намного быстрее, я раньше на ТС-лабе тестил, но его тормоза мне надоели. Там тормозил даже сам интерфейс, не то что тестер. Вэлс быстро тестит, помню так же после нажатия уже готово, но там надо знать С#, а я его не знаю. В Ами все намного проще в его AFL, за 5 минут можно накидать идею и проверить.
cfree0185, смотря что в вашем понимании «сложное». Если вы пробовали писать свои задачи в AFL и он вас не удовлетворил возможностями, то наверное вы являетесь опытным программистом, и вам подойдут тру-языки для взрослых, вроде С++) Я не являюсь опытным программистом, и у меня пока не было таких задач, что я не смог бы в нем сделать. Никому его не навязываю, лишь делюсь своим имхо)
Friendly Deep Space, Допустим я хочу алгоритмически рисовать линии на графике, наклонные, можно конечно это не ООПшно описать, но если усложнять, то зароешься в коде — он будет неудобный, неприятный. Усложнять с точки зрения линий — например, научился рисовать линии, дальше объединяешь линии в конструкции, выводишь классы фигур и т.д. — тут неплохо прикрутить наследование и т.д.))
Replikant_mih, я многое видел, и авторисование на графике, алерты всевозможные, кнопки с заданными функциями на графике, нейросети, подключаемые dll, подключаемый Mathlab, что угодно. Но я думаю, что если вы достаточно опытны, вам не составит труда писать свои задачи как на С#, так и на AFL. Нужно только ответить на вопрос зачем это делать именно на AFL.
Машковский Евгений, по аналогии с гонками — у гоночных машин убирт все удобное, но име.ющее лишний вес, получается быстро из-за веса, но неудобно. В целом тут схожая дилемма, учитывая конечно, что можно при желании сделать в меру быстро и вполне удобно и т.д.
Машковский Евгений, Здесь искажение информации — сложное плохо работает на новых данных — здесь «сложное» — это многопараметрическое, подогнанное, а сложное в плане возможностей языка — это скорее про другое.
Проверил 5 минутки за 5 лет (FORTS). Система из 3-х правил типа: MACDintersection+ForceOfHighLowLevel+TwoVolumeCompare Компьютер Core i5, самодельный тестер
Рейт 600 раз в минуту т.е. 10 раз в сек. Это при загрузке всех ядер то есть несколько вариантов считается параллельно.
Replikant_mih, вряд ли что-то интересное. Разрабатывался с упором на скорость ради генетических алгоритмов. Потому работает побарно, соответственно вход в сделку только на открытии бара. Поддерживает SL и TP.
Replikant_mih, алгоритм не сложный в целом. Такой и в Экселе делают.
Ради скорости надо брать нормально компилируемый язык и писать так, чтобы в основном цикле не нагружать менеджер памяти. Т.е. память и объекты выделить заранее
одноминутки за 4 года от 5 до 40 секунд, вместе с подгрузкой данных и заполнением файла отчета.
два робота в одном мире (общий счет) поминутно за 4 года ~80 сек.
в зависимости от числа индикаторов и частоты и сложности их перерасчетов.
9 лет — 20 секунд, это относительно легкий робот.
Java.
параллельно крутится квик и тренируется еще один робот.
Replikant_mih, у меня несколько разных, под разные задачи, этот конкретный — просто одинарный прогон, со сбором статистики.
есть ещё оптимизатор c многократным прогоном.
и есть тот в чём крутится реальный робот.
т.е. всё более менее стандартно.
время не сразу такое получилось. тоже профилировал, улучшал медленные куски, дублирование, избавлялся от циклов и вложенных циклов.
Sergey Pavlov, Если на моих данных прогнать, видимо, это будет х10 относительно минутки-10 лет. Но ты не зря озвучил минутки и 10 лет — видимо, на таких данных ты тестишь — хватает таких скоростей?
Replikant_mih, это один прогон, мне такой скорости вполне хватает. Смотри. в стратегии у меня пара параметров. Один для средней цены, другой для волатильности. Делаю сетку по 10 шагов того и другого. Итого 100 прогонов, которые займут 1-2-3 часа времени. Такие комплексные прогоны я делаю пару раз в месяц. Также скорость будет зависеть от того, какие метрики считать во время прогона. Я могу всё сильно замедлить, если считать максимально всю статистику, вплоть до поминутной эквити. А можно наоборот, считать только пару итоговых показателей: среднегодовой ретурн и срсделку. Тогда всё будет в разы быстрее. Вообще, S# должен при прочих равных ощутимо по скорости обсчета обыгрывать R.
Sergey Pavlov, Нуу, если взять переменные трудозатраты и постоянные, то S# это дохрена постоянных (разовых), а потом с переменными норм будет когда все настроишь, во всем разберешься — я Shell модифицированный юзаю, реально берешь код, открываешь его в другой вкладке и вот он уже не тестируется а торгует в бою.
А TSLab хорош в плане того что и разовые трудозатраты не велики — он работает из коробки сразу).
Replikant_mih, ну и как? ЕМНИП, ты с полгода точно уже этим занимаешься… Стало быть, минимум, через полгода у тебя всё будет с одной кнопки летать и больше не потребует времязатрат...
А ведь можно было быстрее и проще: мт5, тслаб, ами, луа.
Sergey Pavlov, Ну вот всплывают всякие штуки — как-то медленная оптимизация на S#. Да и развитие — это же не движение от A к B, это движение от A к ближайшей цели B, затем выставление новой цели C — короче непрерывный процесс развития. Иначе теряешь конкурентное преимущество. Сейчас уже переключение между бэктестом и торговлей это вопрос 5-ти минут. Но как сказал, есть нюансы — например, скорость бэктеста — я конечно могут адаптировать свои бизнес-процессы исходя из медленной скорости, но не хочется — думаю, я утрачу определенное конкурентное аналитическое преимущество, а в высококонкурентной среде этого делать не хочется.
Replikant_mih, да не, изначально у тебя 24 часа в сутках ) на самом деле я бы посоветовал сначала сделать норм стратегию и пока не заморачиваться как её торговать потом. Это потом может наступить довольно нескоро ) а торговать неторговабельное — потеря времени и денег, плюс разочарования депрессии алкоголизм — как следствие расходы на восстановление и реабилитацию )
Есть оч много разных опен сорс фреймворков для бэктестинга на питоне, они в основном простые, просто устанавливаются, примеры в комплекте, работают тоже с приемлемой скоростью — точно быстрее чем всякие велслабы. Я бы взял какой-нибудь, например этот: http://pmorissette.github.io/bt, ну или список сам нагуглишь ) накачал минуток с финама и вперёд
Replikant_mih, ну хорошо если есть, но откуда это можно утверждать, если пока остаются вопросы по тестированию? Тут надо внимательно ) На рандомизированных данных погонять и т д, чтобы понять насколько сам подход вообще рабочий. Может правда ты сам конечно руками сделал неск тыщщ сделок по системе ну тогда наверное норм )
Replikant_mih, а как тогда понять, можно торговать этими стратегиями этот инструмент, или нет, с каким-то положительным результатом? Или ты за процесс? ))
Replikant_mih, конечно надо делать прогоны, с этим никто не спорит, просто если на исторических данных аналитика выглядит так же, как и на рандомных (про которые априори известно, что они рандомные и на них нельзя построить прибыльную страту), то у тебя нет перевеса, сколько ни гоняй
Пафос Респектыч, Прогоны на истории — ничто, если они без аналитики — именно от того, как интерпретируешь результаты и зависит будет ли стратегия после запуска в бой «сразу вниз» или так же как на бэктесте.
Да, тестирование на всякого рода псевдо данных или случайных данных может быть частью информации для последующей аналитики, но можно выстраивать аналитику и без этого. Как сказал, в дальнейшем скорее всего в каком-то виде введу этот элемент в общую схему аналитических бизнес-процессов.
протестить стратегию, сделать пару движений рукой и вуаля — можно в бой
Так не бывает, ну может только если ты это делаешь в 100500 раз и очень хорошо понимаешь, что происходит внутри бэктестера и что значат те чиселки, которые он показывает. В случае с каким-нибудь S#, подозреваю, для этого нужно инвестировать не один год собственного времени и уйму сил, разобраться в исходниках, там наверняка и багов хватает.
Если бы я не писал себе всё сам, наверное взял бы Амиброкер, глядя на отзывы людей, да и вон SenSor на нём что-то делает и у него вроде получается.
Replikant_mih, самый быстрый тестер, который я видел, это OpenQuant (SmartQuant). У них заявлена 500 000 тиков в секунду. Я прогонял обычные мувинги — очень похоже на правду.
Если данные хранятся в TXT, то их парсинг будет занимать несколько секунд, поэтому тестеры на бинари данных всегда будут быстрее.
Опять же есть барные тестеры (Ами, Омега и тд) — они будут быстрее событийных тестеров. Но на последних можно строить хоть HFT алго.
Еще важно, чтобы тестовый код можно было запустить в бой сразу, а не переписывать его под рилтайм.
yurikon, Ещё для меня выглядит странным если ты, например, гоняешь оптимизацию на одном дата-сете, при этом каждый раз его читаешь из файла — из оперативки же быстрее. Но это так).
>>«Еще важно, чтобы тестовый код можно было запустить в бой сразу, а не переписывать его под рилтайм.»
yurikon, очень неудобно ввести системы в торгуемый портфель и вывести из него. Вообще, написано для любителя-одиночки. Но не дешево. Как-то одно с другим не вяжется. Получается так, что делать что-то серьезное с этой прогой не выходит иначе, как все писать самому. А тогда нафига козе баян?
Sergey Pavlov, если 100 прогонов на одной подгрузке данных 10 лет минутки, то я в 10-30 мин вкладываюсь. Статистики все всегда считаю енд-оф-дей. Картинки рисую по итогу.
SergeyJu, на то у вас и СИ. Я пока, если медлительность напрягает, включаю голову и пытаюсь придумать как упростить и убыстрить. Как правило, находится способ адаптивного подсчета всех величин, чтобы от увеличения значений параметров время одного прогона почти не увеличивалось.
Sergey Pavlov, даже не Си. Программно можно ускориться, но лень.
Насчет итерационного подсчета индюков и прочего — согласен, я тоже стараюсь использовать быстрые схемы, если хочу оптимизировать вычисления.
Банк России принял решение с 28 ноября 2024 года до конца 2024 года не осуществлять покупку иностранной валюты на внутреннем валютном рынке в рамках зеркалирования регулярных операций Минфина России, ...
Хомяк Пржевальского, поздравляю, весь рынок скопом снижается, так бывает. Когда рынок будет полгода-год стоять на месте или вверх идти, а диасофт снижаться, будет повод переживать
27 ноября 2024 года
Банк России принял решение с 28 ноября 2024 года до конца 2024 года не осуществлять покупку иностранной валюты на внутреннем валютном рынке в рамках зеркалирования регулярных опе...
Банк России принял решение с 28 ноября 2024 года до конца 2024 года не осуществлять покупку иностранной валюты на внутреннем валютном рынке в рамках зеркалирования регулярных операций Минфина России, ...
27 ноября 2024, 21:29
Московская аптечная сеть «36,6» закрыла сделку по покупке мурманской «Аптеки для бережливых», об этом Vademecum сообщили источники на фармрынке.
Сейчас, по данным СПАРК-И...
Со ссылкой на ТГ СЛУЖБА РУБЛЯ
По итогам 2023 места Россия заняла 18 место по объему экспорта с показателем в $424 млрд, с долей всего в 1,8% от мирового экспорта.
Это чуть больше, чем у Ис...
Ольга, не такое это и простое занятие, к сожалению. Но стоит помнить, что товарно-сырьевые биржи начинались с обычных кафе и доски с мелом рядом с портом.
На 1-минутке за 10 лет один прогон стратегии у меня менее 1 минуты, включая подгрузку данных.
SergeyJu, Хорошие скорости — это на C и есть? — Самописное?
Скорость хорошая.
Replikant_mih, ну да.
Многовато.
Если возможности оптимизации нет, то придётся писать самому.
Либо тестер полностью, либо некий агрегатор.
Который бы переваривал эти данные и выдавал новый набор.
Меньший по размеру и подходящий для текущего тестера.
Полностью самописные вещи трудозатратны.
Особенно если нет навыка программирования.
В большинстве случаев они не рентабельны.
Replikant_mih, точно ответить трудно.
Потому как неизвестно какие расчёты вы ведёте.
Если пальцем в небо, то 5 лет 5 минуток можно переварить меньше, чем за минуту.
Если писать код левой ногой(без особых оптимизаций).
Заняло 2 дня и подумать.
Обычно подумать — самое сложное и самое эффективное.
Отвечать не обязательно, это наводящий вопрос.
cfree0185, В S# отдельный день лежит в отдельном файле в отдельной паке))
Вряд ли это супер-быстро)). Но там и сами вычисления не быстро идут, помимо файловых операций.
bocha, Как легко было бы жить в мире, если бы все комменты отвечали твоим ожиданиям))). Ещё идеальней было бы если бы в табличном виде: первый столбец — платформа, второй — секунды)).
Спасибо! Мне кажется, в велсе что-то подобное было, но именно по велсу пока так никто и не отписался.
Компьютер Core i5, самодельный тестер
Рейт 600 раз в минуту т.е. 10 раз в сек. Это при загрузке всех ядер то есть несколько вариантов считается параллельно.
ivanovr, много строчек кода?
Тоже что ли запилить — простое, очень быстрое, прям даже консольное можно).
Ради скорости надо брать нормально компилируемый язык и писать так, чтобы в основном цикле не нагружать менеджер памяти. Т.е. память и объекты выделить заранее
два робота в одном мире (общий счет) поминутно за 4 года ~80 сек.
в зависимости от числа индикаторов и частоты и сложности их перерасчетов.
9 лет — 20 секунд, это относительно легкий робот.
Java.
параллельно крутится квик и тренируется еще один робот.
ПBМ, А у вас он много чего умеет или простой?
В принципе вырисовывается кучная область со скоростями единицы секунд на обозначенный дата-сет. Мои 7 минут выглядят очень аномально на этом фоне)).
есть ещё оптимизатор c многократным прогоном.
и есть тот в чём крутится реальный робот.
т.е. всё более менее стандартно.
время не сразу такое получилось. тоже профилировал, улучшал медленные куски, дублирование, избавлялся от циклов и вложенных циклов.
Sergey Pavlov, >>«Вообще, S# должен при прочих равных ощутимо по скорости обсчета обыгрывать R.»
чёт не обыгрывает), но я ещё продолжаю пытаться).
Не, я при желании смогу попробовать уложиться в 100 тоже, но не развернешься, конечно)).
Sergey Pavlov, Тебе разве не хотелось никогда протестить стратегию, сделать пару движений рукой и вуаля — можно в бой.
Ну а в целом система довольно мощная, хотя недостатков много.
Sergey Pavlov, Нуу, если взять переменные трудозатраты и постоянные, то S# это дохрена постоянных (разовых), а потом с переменными норм будет когда все настроишь, во всем разберешься — я Shell модифицированный юзаю, реально берешь код, открываешь его в другой вкладке и вот он уже не тестируется а торгует в бою.
А TSLab хорош в плане того что и разовые трудозатраты не велики — он работает из коробки сразу).
А ведь можно было быстрее и проще: мт5, тслаб, ами, луа.
Replikant_mih, да не, изначально у тебя 24 часа в сутках ) на самом деле я бы посоветовал сначала сделать норм стратегию и пока не заморачиваться как её торговать потом. Это потом может наступить довольно нескоро ) а торговать неторговабельное — потеря времени и денег, плюс разочарования депрессии алкоголизм — как следствие расходы на восстановление и реабилитацию )
Есть оч много разных опен сорс фреймворков для бэктестинга на питоне, они в основном простые, просто устанавливаются, примеры в комплекте, работают тоже с приемлемой скоростью — точно быстрее чем всякие велслабы. Я бы взял какой-нибудь, например этот: http://pmorissette.github.io/bt, ну или список сам нагуглишь ) накачал минуток с финама и вперёд
Пафос Респектыч, Да всё уже начато давно)) — есть у меня норм стратегии).
Тут S# только что выкатил обновление тестера — ощутимо скорость подтянули, так что, возможно, тема уже не актуальна.
Пафос Респектыч, Прогоны на истории — ничто, если они без аналитики — именно от того, как интерпретируешь результаты и зависит будет ли стратегия после запуска в бой «сразу вниз» или так же как на бэктесте.
Да, тестирование на всякого рода псевдо данных или случайных данных может быть частью информации для последующей аналитики, но можно выстраивать аналитику и без этого. Как сказал, в дальнейшем скорее всего в каком-то виде введу этот элемент в общую схему аналитических бизнес-процессов.
Replikant_mih,
Так не бывает, ну может только если ты это делаешь в 100500 раз и очень хорошо понимаешь, что происходит внутри бэктестера и что значат те чиселки, которые он показывает. В случае с каким-нибудь S#, подозреваю, для этого нужно инвестировать не один год собственного времени и уйму сил, разобраться в исходниках, там наверняка и багов хватает.
Если бы я не писал себе всё сам, наверное взял бы Амиброкер, глядя на отзывы людей, да и вон SenSor на нём что-то делает и у него вроде получается.
Мне главное не делать перекос в сторону инфраструктуры и программирования, а делать акцент все-таки на самих стратегиях).
Если данные хранятся в TXT, то их парсинг будет занимать несколько секунд, поэтому тестеры на бинари данных всегда будут быстрее.
Опять же есть барные тестеры (Ами, Омега и тд) — они будут быстрее событийных тестеров. Но на последних можно строить хоть HFT алго.
Еще важно, чтобы тестовый код можно было запустить в бой сразу, а не переписывать его под рилтайм.
yurikon, Ещё для меня выглядит странным если ты, например, гоняешь оптимизацию на одном дата-сете, при этом каждый раз его читаешь из файла — из оперативки же быстрее. Но это так).
>>«Еще важно, чтобы тестовый код можно было запустить в бой сразу, а не переписывать его под рилтайм.»
Да, стараюсь не отходить от этого принципа.
Я его использовал только для сравнения скорости со своим тестером.
Насчет итерационного подсчета индюков и прочего — согласен, я тоже стараюсь использовать быстрые схемы, если хочу оптимизировать вычисления.