Блог им. 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
Интересно сравнить производительность с другими Тестерами.
avatar

fxsaber

fxsaber, самый шустрый амиброкер… там специально сделали чтоб самый быстрый код крутился на ядре и процессорном кэше без доступа к внешней оперативке...


avatar

ves2010

ves2010, если знаете Ami, можно сравнить с MT5.
avatar

fxsaber

Можно попробовать сохранить данные со сжатием (save + compress='xz' + поиграться с compression_level), если это ещё не сделано. Если bottleneck именно в скорости чтения с диска — должно помочь.
avatar

Eugene Logunov

Eugene Logunov, RAMDisk решает все такие проблемы. И SSD целее будет.
avatar

fxsaber

fxsaber, из за рэм диска будет меньше считывания с ссд?
avatar

Андрей К

Андрей К, RAMDisk — это все тот же диск, только в быстрой памяти и энергозависимый. Так что SSD понадобится только для первоначального заполнения RAMDisk и для сохранения конечного результата после долгой работы.
avatar

fxsaber

fxsaber, сейчас такие диски nvme, что про скорость чтения можно не думать. А память — дорогая. И возни много, чтобы удерживать на рамдиске копию необходимых данных.
avatar

ch5oh

Eugene Logunov, да вроде нормальная скорость, мне хватает. Не хватало быстрого тестера, чтобы проверить по сигналу вход/выход прямо R. Вот теперь нашёл, делюсь) Но это не полноценный бэктестинг, конечно.
avatar

r0man

векторный тест… думаю numpy так же обработало бы.
то, что быстро круто, но от реальности будет ой как далеко.
вообще тест подтверждает мои ощущения от крипты — если налили лимитник, то будет минус:)
avatar

day0markets

Логично было бы вынести во входные параметры ТС какие-то показатели и сделать Оптимизацию. Не в курсе, справится ли QT. Ну и walk-forward замутить там же.
avatar

fxsaber

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

day0markets

day0markets, не пизди. Все что работает на тиках и все что считается наносекунды и обрабатывается за 8 секунд, это все экстремально критично к исполнению и экстремально не пригодно для бектестинга.

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

Cristopher Robin

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

avatar

r0man

Что такое «тики с направлениями»?
«сумма объемов последних 5 сделок» — это сумма объёмов на последних 5 тиках?
avatar

Rostislav Kudryashov

Rostislav Kudryashov, buy или sell
avatar

r0man

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

ch5oh

ch5oh, 

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

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

avatar

r0man

r0man, а какая просадка у вашей стратегии и каким обьемом тестили
avatar

CapitalMAN

CapitalMAN, максимальная 809usd, объем один контракт. Но я бы не стал называть это стратегией. Всего лишь тест сигнала с параметрами взятыми на глаз для примера, не более. 
avatar

r0man

r0man, при обьеме 10 контрактов просадка будит 8000usd я так понимаю) а при 100 80тыс в моменте, а если тест не годовой)))
avatar

CapitalMAN

CapitalMAN, один контракт соответствует одну битку. Тест за май-декабрь 2019. Вижу вы неплохо умножаете на 10, попробуйте разделить просадку на цену битка 'в моменте' при объеме 1, 10, 100 и так далее контрактов.
avatar

r0man

r0man, я о том что просадка будит увеличиваться какая цена битка не была, всегда и что самое интересное вы ни когда не знаете ав друг макс просадка продлитс подольше)
avatar

CapitalMAN

На мексе когда движуха такая ордера не проходят
avatar

Gryphon

Gryphon, а если лимитку ставить подальше от движухи с рассчетом что ее потом смоет волной еще дальше, такие ордера принимает? Понятно, что профит тогда меньше будет, но, может, не отрицательный получится в итоге…
avatar

tranquility


....все тэги
2010-2020
UPDONW