Блог им. Bondiator

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

Всем привет!

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

Заранее спасибо.
 
592 | ★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

Читайте на SMART-LAB:
Фото
Нефть не любит резких взлетов
👉 Наш канал в MAX 👈 👉 Чат Иволги в MAX 👈 На графике нефти последних 20 с небольшим лет мы не видим восходящей...
Фото
BRENT: Дипломатия Трампа против "бычьего десанта" — кто блефует?
После сенсационного заявления Трампа о достижении двухнедельного перемирия с Ираном нефть открыла торги в среду с мощным гэпом вниз. Цена...
Фото
5 идей в российских акциях. Апрельское оживление
Приводим список из пяти фундаментально сильных акций, интересных для покупки на средний и долгий сроки. Чтобы пополнить счет для...
Фото
Кто сейчас самый дешевый сбыт? Сводный пост по сбытовым компаниям по отчетам РСБУ за 2025г.
Волгоградэнергосбыт Ставропольэнергосбыт Самараэнерго Мордовэнергосбыт Пермэнергосбыт Новосибирскэнергосбыт...

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

....все тэги



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