Блог им. r0man

Как за полминуты протестировать идею на 150 миллионах тиков

    • 31 января 2020, 19:24
    • |
    • r0man
  • Еще

Тестировать будем крипту на Bitmex, так как там можно без проблем достать тики с направлениями на халяву.
Собственно, идея очень простая:
— покупаем, если сумма объемов последних 5 сделок больше 500,000
— продаем, если сумма объемов последних 5 сделок меньше -500,000
Торгуем одним условным битком (тикер XBTUSD).
Использовать будем R и пакет QuantTools.
Пишем немножко кода:
Как за полминуты протестировать идею на 150 миллионах тиков

Результаты:
Как за полминуты протестировать идею на 150 миллионах тиков
Как за полминуты протестировать идею на 150 миллионах тиков

Посчиталось всё где-то за 38 секунд. Из них 30сек заняло чтение тиков с диска. Ниже табличка профайлинга по времени в миллисекндах:
Как за полминуты протестировать идею на 150 миллионах тиков

  • обсудить на форуме:
  • bitmex
★16
25 комментариев
Интересно сравнить производительность с другими Тестерами.
avatar
fxsaber, самый шустрый амиброкер… там специально сделали чтоб самый быстрый код крутился на ядре и процессорном кэше без доступа к внешней оперативке...


avatar
ves2010, если знаете Ami, можно сравнить с MT5.
avatar
Можно попробовать сохранить данные со сжатием (save + compress='xz' + поиграться с compression_level), если это ещё не сделано. Если bottleneck именно в скорости чтения с диска — должно помочь.
avatar
Eugene Logunov, RAMDisk решает все такие проблемы. И SSD целее будет.
avatar
fxsaber, из за рэм диска будет меньше считывания с ссд?
avatar
Андрей К, RAMDisk — это все тот же диск, только в быстрой памяти и энергозависимый. Так что SSD понадобится только для первоначального заполнения RAMDisk и для сохранения конечного результата после долгой работы.
avatar
fxsaber, сейчас такие диски nvme, что про скорость чтения можно не думать. А память — дорогая. И возни много, чтобы удерживать на рамдиске копию необходимых данных.
avatar
Eugene Logunov, да вроде нормальная скорость, мне хватает. Не хватало быстрого тестера, чтобы проверить по сигналу вход/выход прямо R. Вот теперь нашёл, делюсь) Но это не полноценный бэктестинг, конечно.
avatar
векторный тест… думаю numpy так же обработало бы.
то, что быстро круто, но от реальности будет ой как далеко.
вообще тест подтверждает мои ощущения от крипты — если налили лимитник, то будет минус:)
avatar
Логично было бы вынести во входные параметры ТС какие-то показатели и сделать Оптимизацию. Не в курсе, справится ли QT. Ну и walk-forward замутить там же.
avatar
fxsaber, да нет в этом смысла. это тиковый грааль. добавить задержки в макрет дате и исполнении + кодовый обвесок движка и грааль стухнет. опять же экзекьюн на тике, а не на котировке. такое надо на нормальном движе тестить для начала и потом уже добавлять оптимизацию и прочее
avatar
day0markets, не пизди. Все что работает на тиках и все что считается наносекунды и обрабатывается за 8 секунд, это все экстремально критично к исполнению и экстремально не пригодно для бектестинга.

П.С. Прошу прощения, только сейчас увидел что вы именно это и имели в виду.
avatar
day0markets, цель была проверить рабочая идея или нет. С такой средней сделкой комис не отобьет.
Но нормальный, полноценный движок в QT тоже есть.

avatar
Что такое «тики с направлениями»?
«сумма объемов последних 5 сделок» — это сумма объёмов на последних 5 тиках?
avatar
Rostislav Kudryashov, buy или sell
avatar
Этот «тестер» бесконечно далек от нормальной симуляции исполнения заявок. Также хотелось бы на выходе получить стандартную статистику: список сделок, средняя сделка, распределение финрезов сделок… Что я Вам рассказываю прописные истины? =)
avatar
ch5oh, 

Это не совсем тестер, а быстрый способ проверить идею по ценам и сигналу вход/выход. На выходе как раз только и получим список сделок вида цена вход/выход, финрез в разрезе возможного убытка и упущеного профита, id сделок. Времени пока только не хватает. Имея список сделок легко посчитать остальные статистики. В коде я там набросал несколько.

А для полноценного бэктестинга, в QT есть тестер с генерацией и отменой ордеров по разным событиям, поддержкой лимитников, задержек и прочее. Но в нем страту, надо более подробно описывать и в отдельном файле на плюсах, что не всегда бывает целесообразно.

avatar
r0man, а какая просадка у вашей стратегии и каким обьемом тестили
avatar
CapitalMAN, максимальная 809usd, объем один контракт. Но я бы не стал называть это стратегией. Всего лишь тест сигнала с параметрами взятыми на глаз для примера, не более. 
avatar
r0man, при обьеме 10 контрактов просадка будит 8000usd я так понимаю) а при 100 80тыс в моменте, а если тест не годовой)))
avatar
CapitalMAN, один контракт соответствует одну битку. Тест за май-декабрь 2019. Вижу вы неплохо умножаете на 10, попробуйте разделить просадку на цену битка 'в моменте' при объеме 1, 10, 100 и так далее контрактов.
avatar
r0man, я о том что просадка будит увеличиваться какая цена битка не была, всегда и что самое интересное вы ни когда не знаете ав друг макс просадка продлитс подольше)
avatar
На мексе когда движуха такая ордера не проходят
avatar
Gryphon, а если лимитку ставить подальше от движухи с рассчетом что ее потом смоет волной еще дальше, такие ордера принимает? Понятно, что профит тогда меньше будет, но, может, не отрицательный получится в итоге…
avatar

теги блога r0man

....все тэги



UPDONW