Replikant_mih
Replikant_mih личный блог
04 февраля 2019, 16:57

Скорости бэктестов. Вопрос.

Всем привет.

Сориентируйте, пож, у кого какие скорости бэктестов на используемой вами технологической платформе. Допустим берем простенькую стратегию с простой логикой — свечная конструкция или что-то аналогичное, где сама торговая логика не ёмкая по вычислительным затратам. Допустим один прогон 5-минуток (речь о свечных данных) за 5 лет сколько будет выполняться?

Изначально хотел узнать, какие скорости на Wealth-lab, но было бы интересно и на других платформах. Сейчас столкнулся с тем, что текущая платформа дает не удовлетворяющую скорости — вот думаю, или адаптироваться или же есть смысл посмотреть в сторону Велс-лаба и т.д…
98 Комментариев
  • однорукий экономист
    04 февраля 2019, 16:59
    Описанный кейс должен прогоняться меньше чем за секунду на нормальных системах бектестинга.
      • однорукий экономист
        04 февраля 2019, 17:26
        Replikant_mih, на любой нормально написанной платформе. Там же всего 200к-300к тиков будет.
  • SergeyJu
    04 февраля 2019, 17:12
    Хотите скорость — пишите на Си или чем-то аналогичном. Все готовые платформы сильно тормозят. 
    На 1-минутке за 10 лет один прогон стратегии у меня менее 1 минуты, включая подгрузку данных. 
      • SergeyJu
        04 февраля 2019, 17:23
        Replikant_mih, даже не  Си. По старой памяти, VBA. На С# будет побыстрее. 
  • Тарас Громницкий
    04 февраля 2019, 17:24
    Неудовлетворительная скорость — это сколько?
      • Тарас Громницкий
        04 февраля 2019, 17:34

        Replikant_mih, ну да.

        Многовато.

        Если возможности оптимизации нет, то придётся писать самому.

        Либо тестер полностью, либо некий агрегатор.

        Который бы переваривал эти данные и выдавал новый набор.

        Меньший по размеру и подходящий для текущего тестера.

         

        Полностью самописные вещи трудозатратны.

        Особенно если нет навыка программирования.

        В большинстве случаев они не рентабельны.

          • Тарас Громницкий
            04 февраля 2019, 17:40

            Replikant_mih, точно ответить трудно.

            Потому как неизвестно какие расчёты вы ведёте.

            Если пальцем в небо, то 5 лет 5 минуток можно переварить меньше, чем за минуту.

            Если писать код левой ногой(без особых оптимизаций).

          • SergeyJu
            04 февраля 2019, 17:46
            Replikant_mih, у меня сотрудник писал одну прогу для тестирования методов типа рэндом форест на питоне. Считала задачу под сутки. После того, как он переписал ядро на C# ускорение раз в 30. 
            Заняло 2 дня и подумать. 
            Обычно подумать — самое сложное и самое эффективное. 
              • SergeyJu
                04 февраля 2019, 17:55
                Replikant_mih, обычно можно не лезть ниже пятнашек. В разведочном исследовании. (Ясно, что речь не про ХФТ). А минутки — уже для шлифовки.
                  • SergeyJu
                    04 февраля 2019, 18:10
                    Replikant_mih, сколько сделок в день делает Ваша типичная стратегия? 
                    Отвечать не обязательно, это наводящий вопрос.
      • cfree0185
        04 февраля 2019, 19:39
        Replikant_mih, очень много, на чем это так?
          • cfree0185
            04 февраля 2019, 19:55
            Replikant_mih, в принципе правильно отписали, что 5мин за 5 лет это от 5 до 20 секунд в зависимости от проца, памяти и ссд. загрузи NinjaTrader, скачай минутки (на демке они все доступны) и запусти там стандартные стратегии на МА и увидишь сколько у тебя
              • cfree0185
                04 февраля 2019, 20:09
                Replikant_mih, самое узкое место — это загрузка и подгрузка данных. вот это дело можно поисследовать на примере статистики что платформа делает с обращениями к диску. и кстати сам способ и формат хранения данных.
  • bocha
    04 февраля 2019, 17:42
    АМИ  — несколько секунд. (навскидку — около пяти секунд)

      • SergeyJu
        04 февраля 2019, 17:54
        Replikant_mih, не знаю, как теперешний вэлс, а 5 лет назад было медленное и неудобное говнище.
  • Friendly Deep Space
    04 февраля 2019, 18:06
    Тестирую на Амиброкере, даже сложные стратегии на несколько тикеров тестирует на минутках за три года укладываясь в 1 секунду.
      • Friendly Deep Space
        04 февраля 2019, 18:13
        Replikant_mih, ну правда, не помню чтобы я ждал. После нажатия кнопки «тест» большинство из того, что я тестирую выдает результат сразу. Это может быть и 500 сделок, и 10000 например. Видимо просто очень быстрый тестер.
          • Friendly Deep Space
            04 февраля 2019, 18:24
            Replikant_mih, мне кажется уже было такое, надо просто погуглить. Могу сказать только в сравнении с тс-лабом, Ами по мне намного быстрее, я раньше на ТС-лабе тестил, но его тормоза мне надоели. Там тормозил даже сам интерфейс, не то что тестер. Вэлс быстро тестит, помню так же после нажатия уже готово, но там надо знать С#, а я его не знаю. В Ами все намного проще в его AFL, за 5 минут можно накидать идею и проверить.
    • cfree0185
      04 февраля 2019, 20:00
      Friendly Deep Space, как на AmiBroker Formula Language (AFL) можно вообще что-то сложное написать?
      • Friendly Deep Space
        04 февраля 2019, 21:40
        cfree0185, смотря что в вашем понимании «сложное». Если вы пробовали писать свои задачи в AFL и он вас не удовлетворил возможностями, то наверное вы являетесь опытным программистом, и вам подойдут тру-языки для взрослых, вроде С++) Я не являюсь опытным программистом, и у меня пока не было таких задач, что я не смог бы в нем сделать. Никому его не навязываю, лишь делюсь своим имхо)
          • Friendly Deep Space
            04 февраля 2019, 21:58
            Replikant_mih, я многое видел, и авторисование на графике, алерты всевозможные, кнопки с заданными функциями на графике, нейросети, подключаемые dll, подключаемый Mathlab, что угодно. Но я думаю, что если вы достаточно опытны, вам не составит труда писать свои задачи как на С#, так и на AFL. Нужно только ответить на вопрос зачем это делать именно на AFL.
  • Машковский Евгений
    04 февраля 2019, 19:22
    Амиброкер — гоночная платформа, всю жизнь с ним и менять не хочу.
    • cfree0185
      04 февраля 2019, 20:00
      Машковский Евгений, как на AmiBroker Formula Language (AFL) можно что-то сложное написать?
      • Машковский Евгений
        05 февраля 2019, 00:29
        cfree0185, можно и сложное, но обычно всё сложное хорошо работает на истории и плохо на новых данных, так что Ами отличная прога!
  • Roman Ivanov
    04 февраля 2019, 23:25
    Проверил 5 минутки за 5 лет (FORTS). Система из 3-х правил типа: MACDintersection+ForceOfHighLowLevel+TwoVolumeCompare
    Компьютер Core i5, самодельный тестер
    Рейт 600 раз в минуту т.е. 10 раз в сек. Это при загрузке всех ядер то есть несколько вариантов считается параллельно.
      • Roman Ivanov
        05 февраля 2019, 15:06
        Replikant_mih, вряд ли что-то интересное. Разрабатывался с упором на скорость ради генетических алгоритмов. Потому работает побарно, соответственно вход в сделку только на открытии бара. Поддерживает SL и TP.
          • Roman Ivanov
            05 февраля 2019, 19:18
            Replikant_mih, алгоритм не сложный в целом. Такой и в Экселе делают.
            Ради скорости надо брать нормально компилируемый язык и писать так, чтобы в основном цикле не нагружать менеджер памяти. Т.е. память и объекты выделить заранее
  • П М
    04 февраля 2019, 23:44
    одноминутки за 4 года от 5 до 40 секунд, вместе с подгрузкой данных и заполнением файла отчета.
    два робота в одном мире (общий счет) поминутно за 4 года ~80 сек.
    в зависимости от числа индикаторов и частоты и сложности их перерасчетов.
    9 лет — 20 секунд, это относительно легкий робот.
    Java.

    параллельно крутится квик и тренируется еще один робот.
      • П М
        04 февраля 2019, 23:57
        Replikant_mih, ага
          • П М
            05 февраля 2019, 07:44
            Replikant_mih, у меня несколько разных, под разные задачи, этот конкретный — просто одинарный прогон, со сбором статистики.
            есть ещё оптимизатор c многократным прогоном. 
            и есть тот в чём крутится реальный робот.
            т.е. всё более менее стандартно.
            время не сразу такое получилось. тоже профилировал, улучшал медленные куски, дублирование, избавлялся от циклов и вложенных циклов.


  • Sergey Pavlov
    05 февраля 2019, 06:45
    У меня в R 10 лет минуток обсчитываются от 30 сек до неск минут
      • Sergey Pavlov
        05 февраля 2019, 08:45
        Replikant_mih, это один прогон, мне такой скорости вполне хватает. Смотри. в стратегии у меня пара параметров. Один для средней цены, другой для волатильности. Делаю сетку по 10 шагов того и другого. Итого 100 прогонов, которые займут 1-2-3 часа времени. Такие комплексные прогоны я делаю пару раз в месяц. Также скорость будет зависеть от того, какие метрики считать во время прогона. Я могу всё сильно замедлить, если считать максимально всю статистику, вплоть до поминутной эквити. А можно наоборот, считать только пару итоговых показателей: среднегодовой ретурн и срсделку. Тогда всё будет в разы быстрее. Вообще, S# должен при прочих равных ощутимо по скорости обсчета обыгрывать R.
          • Sergey Pavlov
            05 февраля 2019, 09:47
            Replikant_mih, значит прочие условия сильно неравные и S# делает еще кучу всякой (возможно, ненужной в данном случае) работы. А зачем и почему S#?
              • Sergey Pavlov
                05 февраля 2019, 11:28
                Replikant_mih, хотелось, но под описание
                пару движений рукой и вуаля — можно в бой
                подходит тслаб, но не стокшарп.
                  • Sergey Pavlov
                    05 февраля 2019, 15:52
                    Replikant_mih, ну и как? ЕМНИП, ты с полгода точно уже этим занимаешься… Стало быть, минимум, через полгода у тебя всё будет с одной кнопки летать и больше не потребует времязатрат...
                    А ведь можно было быстрее и проще: мт5, тслаб, ами, луа.
                      • Пафос Респектыч
                        05 февраля 2019, 19:09
                        Replikant_mih, чтобы потерять конкурентное преимущество, надо сначала его найти )) 
                          • Пафос Респектыч
                            05 февраля 2019, 22:41

                            Replikant_mih, да не, изначально у тебя 24 часа в сутках ) на самом деле я бы посоветовал сначала сделать норм стратегию и пока не заморачиваться как её торговать потом. Это потом может наступить довольно нескоро ) а торговать неторговабельное — потеря времени и денег, плюс разочарования депрессии алкоголизм — как следствие расходы на восстановление и реабилитацию )

                            Есть оч много разных опен сорс фреймворков для бэктестинга на питоне, они в основном простые, просто устанавливаются, примеры в комплекте, работают тоже с приемлемой скоростью — точно быстрее чем всякие велслабы. Я бы взял какой-нибудь, например этот: http://pmorissette.github.io/bt, ну или список сам нагуглишь ) накачал минуток с финама и вперёд

                              • Пафос Респектыч
                                06 февраля 2019, 09:08
                                Replikant_mih, ну хорошо если есть, но откуда это можно утверждать, если пока остаются вопросы по тестированию? Тут надо внимательно ) На рандомизированных данных погонять и т д, чтобы понять насколько сам подход вообще рабочий. Может правда ты сам конечно руками сделал неск тыщщ сделок по системе ну тогда наверное норм )
                                  • Пафос Респектыч
                                    06 февраля 2019, 10:31
                                    Replikant_mih, этапы большого пути ) рандомные ряды от рыночных отличать уже научился?
                                      • Пафос Респектыч
                                        06 февраля 2019, 10:36
                                        Replikant_mih, а как тогда понять, можно торговать этими стратегиями этот инструмент, или нет, с каким-то положительным результатом? Или ты за процесс? ))
                                          • Пафос Респектыч
                                            06 февраля 2019, 10:45
                                            Replikant_mih, конечно надо делать прогоны, с этим никто не спорит, просто если на исторических данных аналитика выглядит так же, как и на рандомных (про которые априори известно, что они рандомные и на них нельзя построить прибыльную страту), то у тебя нет перевеса, сколько ни гоняй
                                              • Пафос Респектыч
                                                06 февраля 2019, 10:55
                                                Replikant_mih, так же как на бэктесте скорее всего не будет, это девичьи мечты ) ну дерзай )
              • Пафос Респектыч
                05 февраля 2019, 13:52

                Replikant_mih,

                 

                протестить стратегию, сделать пару движений рукой и вуаля — можно в бой

                Так не бывает, ну может только если ты это делаешь в 100500 раз и очень хорошо понимаешь, что происходит внутри бэктестера и что значат те чиселки, которые он показывает. В случае с каким-нибудь S#, подозреваю, для этого нужно инвестировать не один год собственного времени и уйму сил, разобраться в исходниках, там наверняка и багов хватает.

                Если бы я не писал себе всё сам, наверное взял бы Амиброкер, глядя на отзывы людей, да и вон SenSor на нём что-то делает и у него вроде получается.
                  • Пафос Респектыч
                    05 февраля 2019, 15:20
                    Replikant_mih, так вроде через амиброкер можно и торговать, он к Квику подключается емнип. http://lmgtfy.com/?q=amibroker+quik
                      • Пафос Респектыч
                        05 февраля 2019, 15:23
                        Replikant_mih, MT5 опять же )
                      • yurikon
                        05 февраля 2019, 17:22
                        Replikant_mih, самый быстрый тестер, который я видел, это OpenQuant (SmartQuant). У них заявлена 500 000 тиков в секунду. Я прогонял обычные мувинги — очень похоже на правду.

                        Если данные хранятся в TXT, то их парсинг будет занимать несколько секунд, поэтому тестеры на бинари данных всегда будут быстрее.
                        Опять же есть барные тестеры (Ами, Омега и тд) — они будут быстрее событийных тестеров. Но на последних можно строить хоть HFT алго.

                        Еще важно, чтобы тестовый код можно было запустить в бой сразу, а не переписывать его под рилтайм.
                        • SergeyJu
                          05 февраля 2019, 19:00
                          yurikon, использовал ОпенКвант. Мне не понравилось. 
                          • yurikon
                            05 февраля 2019, 20:14
                            SergeyJu, а что в нем не понравилось?
                            Я его использовал только для сравнения скорости со своим тестером.
                            • SergeyJu
                              05 февраля 2019, 22:26
                              yurikon, очень неудобно ввести системы в торгуемый портфель и вывести из него. Вообще, написано для любителя-одиночки. Но не дешево. Как-то одно с другим не вяжется. Получается так, что делать что-то серьезное с этой прогой не выходит иначе, как все писать самому. А тогда нафига козе баян? 
                  • Friendly Deep Space
                    05 февраля 2019, 20:39
                    Replikant_mih, цепляется до Квика через АПИ, есть платный способ, есть бесплатный, оба рабочие, но с разными возможностями и некоторыми нюансами)
        • SergeyJu
          05 февраля 2019, 11:36
          Sergey Pavlov, если 100 прогонов на одной подгрузке данных 10 лет минутки, то я в 10-30 мин вкладываюсь. Статистики все всегда считаю енд-оф-дей. Картинки рисую по итогу. 
          • Sergey Pavlov
            05 февраля 2019, 15:49
            SergeyJu, на то у вас и СИ. Я пока, если медлительность напрягает, включаю голову и пытаюсь придумать как упростить и убыстрить. Как правило, находится способ адаптивного подсчета всех величин, чтобы от увеличения значений параметров время одного прогона почти не увеличивалось.
            • SergeyJu
              05 февраля 2019, 18:59
              Sergey Pavlov, даже не Си. Программно можно ускориться, но лень. 
              Насчет итерационного подсчета индюков и прочего — согласен, я тоже стараюсь использовать быстрые схемы, если хочу оптимизировать вычисления. 
    • r0man
      06 февраля 2019, 01:38
      Sergey Pavlov, в R самописный тестер или quantstrat?
      • Sergey Pavlov
        06 февраля 2019, 06:39
        r0man, самописный

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

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