Врач-бондиатОр
Врач-бондиатОр личный блог
17 октября 2020, 17:30

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

Всем привет!

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

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

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

  • FinSerfing
    17 октября 2020, 18:17
    В алгоритме столько математики, что обязательно нужен R?
      • FinSerfing
        17 октября 2020, 20:05

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

        Хоть excel.

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

          • FinSerfing
            17 октября 2020, 20:14

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

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

            Python, Java, C#, LUA...

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

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

            А 60 после 90-х — это возраст. Тогда год жизни за три шли (а у кого и поболе)...
            Я ведь не коммерсант ни по духу, ни по призванию. Хотя много раз звали в главные селзы идти.
              • Eugene Bright
                17 октября 2020, 21:22
                Врач-бондиатОр, да, физик-исследователь, доперестроечный еще)))
                Могу Вас «провести» по ЛУА для бэк-тестирования. Готов показать основные моменты, а готовое решение будет Вашим. Если терпения хватит самому построить тестер, то…
                  • Eugene Bright
                    17 октября 2020, 21:49
                    Врач-бондиатОр, нет, на митинги не ходил. Причины предлагаю здесь не обсуждать, дабы не вызвать ненужные споры.
                    Означенного курса не знаю. Их много в инете. Я изучал по исходной документации.
                    Данные в КВИКе…Видите ли, после многолетних (это не фигура речи, а именно «так и было на самом деле») опытов я открыл для себя, что толковая система не нуждается в огромном массиве данных и глубокой истории. Об этом я писал в последнем своем посте: «память» старых данных «замыливает глаз», что называется.
                    Правда, здесь тоже есть лукавство и некоторое кноу-хау.
                    Кароч, только Вам намекну, я пользуюсь небольшим историческим периодом, просто в системе есть некий параметр, который нивелирует историческую глубину.
          • quant_trader
            20 октября 2020, 21:55
            Врач-бондиатОр, «на моей памяти они не совпадали, так как ами как-то своеобразно свечки клеит»

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

            Если не очень трудно можете показать File-Database settings, Intraday settings оттуда же и Tools-Preferences-Intraday?
              • quant_trader
                21 октября 2020, 10:13
                Врач-бондиатОр, надо так





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

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

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

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

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

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

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

          Но у автора топика не работает на финамовских насколько понимаю. Мне оч интересно.
          • Eugene Bright
            20 октября 2020, 22:19
            quant_trader, вполне возможно. Я обошел эту проблему так, как описал выше. Поэтому больше не стал копать тему. Просто знаю, что она имеет место быть. Принцип «экономного мышления» такой…
  • tashik
    18 октября 2020, 11:40
    Пакет rusquant на R посмотрите. Вроде что-то качает, рисует, тестировать можно.
  • Andrew Morozov
    18 октября 2020, 13:45
    Простите, наверное не совсем в тему комментарий, но у меня вопрос, поскольку топик читает много людей которые используют исторические данные. Я себе накодил декодер истории, которая есть на фтп цериха в формате *qsh. То есть можно эти файлы читать и писать информацию в текст или другой бинарный формат. С удивлением обнаружил, что вечерних сессий там нет. Это на самом деле так, или янакосячил? Расшифровка этого формата конечно тот ещё квест…
    • Nickel
      19 октября 2020, 13:10
      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.

  • Andrew Morozov
    19 октября 2020, 13:30
    Спасибо. Интересно.
    Вы предоставили листинг ордерлога, а я читаю пока что сделки.
    Вот текст, выданый утилиткой, которую сам автор всей  этой затеи предлагает для проверки содержимого файлов, 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

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

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

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




    • Nickel
      21 октября 2020, 15:05
      Andrew Morozov, 
      первая и последняя сделка.

      да, у меня тоже самое по SBER 
  • Andrew Morozov
    19 октября 2020, 14:40
    Вопрос снят, любезно ответил сам Николай Морошкин, не все тикеры имеют в составе файла вечернюю сессию, к сожалению. 
  • GrayFox
    21 октября 2020, 08:14

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

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


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

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

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

  • GrayFox
    21 октября 2020, 08:16
     Что мешает писать под МТ5? просто и просто… брокеров правда едницы (((
  • r0man
    21 октября 2020, 13:19
    Если нужно на R и быстро, то лучше всего использовать пакет Quanttools. Вот простой пример двух мувингов вместе с закачкой данных с финама.

Активные форумы
Что сейчас обсуждают

Старый дизайн
Старый
дизайн