Блог им. Bondiator

Нужен бэктестер на R

Всем привет!

Что-то амиброкер, который я использую для бэктестов, стал после каждого нового запуска программы показывать разные результаты (при тех же настройках).
Видно, что свихнулось в его скриптовых мозгах...
Может кто поделиться хорошим бэктестером на R, в который можно закачивать котирки с форматами с Финама?

Заранее спасибо.
 
★1
40 комментариев
Я дико извиняюсь, но тестить предпочитаю РУКАМИ. Тестить — это не то, о чём сразу подумает Любой Нормальный Врач.

    Да, сделаешь в 100 раз меньше. Но хоть ПОЙМЁШЬ, что тестил, пройдя глазами побарно! 
Московский Лоссбой, любопытно, что за тест руками ?

avatar
Московский Лоссбой, а если трейдов несколько тысяч?
avatar
В алгоритме столько математики, что обязательно нужен R?
avatar
FinSerfing, нет, конечно. Я сторонник простоты
avatar

Врач-бондиатОр, ну значит возьмите что-нибудь проще.

Хоть excel.

Подачу котировок можно организовать почти куда угодно.

avatar
FinSerfing, в экселе бэктестер… Это сколько же строк на VBA займет?
avatar

Врач-бондиатОр, ну это я для примера.

Писать можно на любом удобном языке.

Python, Java, C#, LUA...

Или взять готовый продукт типа TsLab.

avatar
Я решил не использовать АмиБрокер по той же причине.
Однако, это не его беда, а в том массиве данных, которые он получает с сервера торговой системы. Об этом я написал в своем последнем посте, который очень не понравился народу.
Дело в том, что каждый день в базе исторических данных в Ами могут находиться разные данные. Поэтому бэктесты, сделанные в разные дни, выдают разные результаты, и именно поэтому я написал свой тестер, работающий напрямую с базой QUIK. Хотя там тоже не всё однозначно по той же причине.
Вся причина кроется в строго зафиксированном количестве «баров»/«свечек» для любого фрейма. Согласитесь, что 3000 баров на «минутках» — это совсем не то же самое, что 3000 «баров»/«свечек» на, допустим, 5-минутках…
avatar
Доктор, Питон вам нужен.
Тестер на Питон есть в одном из моих топиков. Всего навсего цикл перебирающий данные. И все. Там делиться нечем.
ЗЫ То, что R буде жевать 15 минут, Питон перемелет секунд за 20.
avatar
3Qu, ссылку не кинете? Там модули надо какие-нибудь ставить?
avatar
Eugene Bright, я данные в txt из финама в него загружаю. А на свой тестер я меня знаний не хватает. Вы его в Луа сделали?
avatar
Врач-бондиатОр, ссылку с телефона не получается.
Открываете содержание моего блога, в разделе Python топик - Python. Делаем тестер стратегий и… зарабатываем на случайном блуждании.
avatar
Врач-бондиатОр, Если Вы грузите из Финама, то можете проверить, совпадут ли начальные данные в разных фреймах… А в Ами есть свои настройки базы, которые также могут ограничивать количество данных.
Я написал свой тестер на Луа, да.
Теперь уже этот труд не кажется столь невозможным, как это виделось 2 года назад, в самом начале. Тем более, что в 60 мозги труднее проворачиваются.)))
Тем не менее, скидать простой тестер без мани- и риск — менеджментов, с постоянными параметрами системы совсем несложно.
avatar
Eugene Bright, на моей памяти они не совпадали, так как ами как-то своеобразно свечки клеит.
А 60 лет по современным меркам молодость ))
avatar
Врач-бондиатОр, ну, так, если «свечки не совпадают», значит, нельзя такими бэктестами пользоваться!
Нужно сначала найти способ или источник устойчивых данных. Я пытался решить эту проблему, но, в конце концов, понял, что это невозможно. Поэтому написал тестер для QUIK'а, чтобы данные брать из системы без посредников и там же их обрабатывать.
Вот один из комментаторов написал, что он каждые 2 недели перестраивает базы и перетестирует их, поскольку он обнаружил, что базы меняются с такой периодичностью. Я это тоже нашел где-то в 2017-м. И бросил и Метасток, и Ами, и Финам, и МФД...

А 60 после 90-х — это возраст. Тогда год жизни за три шли (а у кого и поболе)...
Я ведь не коммерсант ни по духу, ни по призванию. Хотя много раз звали в главные селзы идти.
avatar
Eugene Bright, не у всех серьезные навыки программирования.
А по образованию Вы, наверное, инженер? 
ЗЫ: Я без подвоха.
avatar
Врач-бондиатОр, да, физик-исследователь, доперестроечный еще)))
Могу Вас «провести» по ЛУА для бэк-тестирования. Готов показать основные моменты, а готовое решение будет Вашим. Если терпения хватит самому построить тестер, то…
avatar
Eugene Bright, тогда в 90-е я Вам не завидую. Случайно в 93 на митинги не ходили?
По поводу Луа у меня учебный курс от oojoo, и там рассмотрен вариант бэктестера.
Но в квике история тикера весьма короткая, и будет ли репрезентативна выборка, особенно на 5-10 минутках — вопрос…
avatar
Врач-бондиатОр, нет, на митинги не ходил. Причины предлагаю здесь не обсуждать, дабы не вызвать ненужные споры.
Означенного курса не знаю. Их много в инете. Я изучал по исходной документации.
Данные в КВИКе…Видите ли, после многолетних (это не фигура речи, а именно «так и было на самом деле») опытов я открыл для себя, что толковая система не нуждается в огромном массиве данных и глубокой истории. Об этом я писал в последнем своем посте: «память» старых данных «замыливает глаз», что называется.
Правда, здесь тоже есть лукавство и некоторое кноу-хау.
Кароч, только Вам намекну, я пользуюсь небольшим историческим периодом, просто в системе есть некий параметр, который нивелирует историческую глубину.
avatar
Врач-бондиатОр, «на моей памяти они не совпадали, так как ами как-то своеобразно свечки клеит»

Это какие то некорректные настройки.

Если не очень трудно можете показать File-Database settings, Intraday settings оттуда же и Tools-Preferences-Intraday?
avatar
quant_trader, 





avatar
Врач-бондиатОр, надо так





Думаю что глюки бывают при compression (когда из минуток пятиминутки итд) из-за таких настроек как на Вашем скриншотах. Просто чтобы закачанные свечи не совпадали в оригинальном формате это вряд ли.

На втором Custom time formats не обязательно как у меня, главное настройки справа.
avatar
Врач-бондиатОр, и еще в тексте стратегии используются staticvar?
avatar
quant_trader, никогда про такое не слышал  
avatar
Eugene Bright, «Дело в том, что каждый день в базе исторических данных в Ами могут находиться разные данные.»

Если только квиковский датафид гадит.

«Вся причина кроется в строго зафиксированном количестве «баров»/«свечек» для любого фрейма.»

Это не так. Ставим local storage и накапливаем сколько надо, исторические вообще можно подгрузить туда же. И периодический save database конечно.
avatar
quant_trader, да, датафид гадит. Факт!
И — да, сохранить локально можно сколько угодно. Про «периодически save database» (если честно) просто не стал разбираться.
avatar
Eugene Bright, не совсем сколько угодно.

Когда Квиковский датафид упирается в ограничение кол ва баров датабазы Ами то он вместо того чтобы затирать самые первые записи тупит. Это известный баг и Квиковцы в курсе.

Поэтому надо самостоятельно затирать первые записи чтобы он нормально работал, особенно актуально на валютах/акциях.

Но у автора топика не работает на финамовских насколько понимаю. Мне оч интересно.
avatar
quant_trader, вполне возможно. Я обошел эту проблему так, как описал выше. Поэтому больше не стал копать тему. Просто знаю, что она имеет место быть. Принцип «экономного мышления» такой…
avatar
Пакет rusquant на R посмотрите. Вроде что-то качает, рисует, тестировать можно.
avatar
Простите, наверное не совсем в тему комментарий, но у меня вопрос, поскольку топик читает много людей которые используют исторические данные. Я себе накодил декодер истории, которая есть на фтп цериха в формате *qsh. То есть можно эти файлы читать и писать информацию в текст или другой бинарный формат. С удивлением обнаружил, что вечерних сессий там нет. Это на самом деле так, или янакосячил? Расшифровка этого формата конечно тот ещё квест…
avatar
Andrew Morozov, всё есть

$ zcat ED-12.20.2020-10-15.OrdLog.csv.gz | tail
15.10.2020 23:50:54.905;15.10.2020 23:50:21.225;1963314359425871141;1.1718;1;0;0;0;0;Buy, Quote, EndOfTransaction, Canceled
15.10.2020 23:50:58.202;15.10.2020 23:50:24.521;1963314359425871157;1.1708;1;0;0;0;0;Buy, Quote, EndOfTransaction, Canceled
15.10.2020 23:51:01.829;15.10.2020 23:50:28.155;1963314359425827587;1.1691;1;0;0;0;0;Buy, Quote, EndOfTransaction, Canceled
15.10.2020 23:51:02.095;15.10.2020 23:50:28.407;1963314359425871220;1.1698;1;0;0;0;0;Buy, Quote, EndOfTransaction, Canceled
15.10.2020 23:51:22.840;15.10.2020 23:50:49.160;1963314359425870701;1.1736;1;0;0;0;0;Sell, Quote, EndOfTransaction, Canceled
15.10.2020 23:51:26.855;15.10.2020 23:50:51.747;1963314359425871147;1.1649;1;0;0;0;0;Buy, Quote, EndOfTransaction, Canceled
15.10.2020 23:51:39.055;15.10.2020 23:51:05.366;1963314359425870859;1.1724;3;0;0;0;0;Sell, Quote, EndOfTransaction, Canceled
15.10.2020 23:51:47.533;15.10.2020 23:51:13.836;1963314359425844611;1.1697;1;0;0;0;0;Buy, Quote, EndOfTransaction, Canceled
15.10.2020 23:52:54.325;15.10.2020 23:52:20.647;1963314359425854521;1.1709;1;0;0;0;0;Buy, Quote, EndOfTransaction, Canceled
15.10.2020 23:53:45.925;15.10.2020 23:53:12.241;1963314359425870921;1.1727;1;0;0;0;0;Sell, Quote, EndOfTransaction, Canceled


накосячил

File: ED-12.20.2020-10-15.OrdLog.qsh (1.9M)
Signature: b'QScalp History Data' (gzipped)
Recorder: QshWriter.7561
User comment: Zerich QSH Service
Base datetime: 15.10.2020 09:59:50.000 (MSK)
Ticker: Plaza2:ED-12.20::1804745:0.0001
Stream type: OrderLog


Output to gzip ...
Frames processed: 538.1K
Done.

avatar
Спасибо. Интересно.
Вы предоставили листинг ордерлога, а я читаю пока что сделки.
Вот текст, выданый утилиткой, которую сам автор всей  этой затеи предлагает для проверки содержимого файлов, qsh2txt.exe:

Plaza2:SBER:TQBR::0.01

Received;ExchTime;DealId;Type;Price;Volume;OI

02.10.2020 10:00:05.423;02.10.2020 09:59:40.000;3316238956;Buy;210.4;165;0
————————————————————————————————————
02.10.2020 18:46:03.014;02.10.2020 18:46:02.575;3317696421;Buy;208.16;2;0

первая и последняя сделка.

Моя программа дает точно такой же результат.

То есть ордерлог записан до конца вечерней сессии, а сделки только до вечернего клиринга?




avatar
Andrew Morozov, 
первая и последняя сделка.

да, у меня тоже самое по SBER 
avatar
Вопрос снят, любезно ответил сам Николай Морошкин, не все тикеры имеют в составе файла вечернюю сессию, к сожалению. 
avatar

совсем не понимаю!!!
Ест алгоритм, который в коде.
Есть приложение, в котором код.
В итоге есть конкретная программа.
Ей нужны данные.

Качаются с ФИНАМа данные (вполе нормальоные), а ПРОГРАММА НЕ РАБОТАЕТ С НИМИ!!!


Попробуйте после скачки данных для начала тупо отрубить инет ...

А потом проверяйте целостность алгоритма пошагова на ОТКЛИ в виде ошибоек исполнния команды!!!,..

Это же так просто, друзья! ...
Я, не программист, использую программирование даже тут при написании комментов!!!

avatar
 Что мешает писать под МТ5? просто и просто… брокеров правда едницы (((
avatar
Если нужно на R и быстро, то лучше всего использовать пакет Quanttools. Вот простой пример двух мувингов вместе с закачкой данных с финама.
avatar

теги блога Врач-бондиатОр

....все тэги



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