3Qu
3Qu личный блог
27 августа 2021, 22:25

Проектирование ТС. 2 Тестер стратегий.

Люди достаточно часто пишут — я бы конечно моделировал, но где взять тестер стратегии? Не на чем тестировать.
Ну, это самое простое, что может быть, я тестер пишу каждый раз заново — лень искать, быстрее написать заново. Да, и функциональность, возможно, нужна какая-то другая.
Смотрим код тестера стратегии и его вызов:
def TradeSystem(ibegin):
    ln = len(sdata)
    i = ibegin
    indata =[]
    dealdata =[]
    while i < ln:
        ls = DealIn(i)
        if ls != 0:
            j = DealControl(i, ls)
            i = j
        i += 1 
    return dealdata, indata
    
DealsData, InData = TradeSystem(100)  #вызов тестера стратегий
Рабочий код, между прочим.)
ibegin — это номер свечи на истории с которой начнет работу тестер.
sdata — история в формате [datetime, o, h, l, c, v]
indata — все параметры открытия сделок для последующего анализа.
dealdata — все необходимые для последующего анализа данные о всех сделках на истории
Дальше идет цикл while() последовательно перебирающий свечи на истории, которые анализируются функцией DealIn(i) (собственно, это и есть ваша стратегия, определяющая момент открытия сделки Лонг или шорт — ls). DealIn() при обнаружении сделки также передает данные для анализа в indata
Далее, если ls = 1 (Long) или -1 (Short), мы попадаем в функцию сопровождения  сделки — DealControl(), которая в соответствии с вашей стратегией закрывает сделку в нужный момент и передает на выход номер свечи закрытия сделки j и данные в dealdata.
indata и dealdata находятся в пределах видимости наших функций DealIn(),  DealControl() и явно передавать их в эти функции нет необходимости.
Ну, и дальше цикл перебора свечей while() начинает считать уже со следующей свечи после закрытия сделки.
Тестер готов. За вами осталась только сама стратегия.
Ну, а анализ данных после тестирования — это можно кто во что горазд. На то он и Python, чтобы анализировать данные.
32 Комментария
  • Replikant_mih
    27 августа 2021, 22:33
    Ловушка. Насколько просто запилить простейший тестер, настолько же сложно реализовать полноценный бэктестер и всю остальную инфраструктуру. А простым наиграешься очень быстро — захочется больше возможностей, а там зыбучие пески. А простейший да, на питоне — изи вообще.
      • Replikant_mih
        27 августа 2021, 23:00
        3Qu, Питон для анализа данных, анализ данных — это разведка, дальше бэктесты полноценные, бэктестер это море разных функциональных возможностей, и каждую нужно реализовать, в совокупности — инфраструктура. Питон это разведка и прототипирование, а нормальный бэктестер сам себя не напишет))).
          • Replikant_mih
            27 августа 2021, 23:16

            3Qu, MT5 когда я пробовал — мне тоже не понравилось.

            Вообще идеальный бэктестер это когда быстро-мощно, функционально богато + возможность докрутить сверху-сбоку что-то свое.

            Я так и делаю, финальный этап — я питоновым скриптом обрабатывают результаты, это можно через API в сам бэктестер зашить, но мне на питоне проще.

            Что может полноценный бэктестер — да тупо он хотя бы свечной график может отрисовать и трейды на нём)), и чтоб его можно было прокручивать, менять таймфремы на лету и т.д. Я конечно могу plt.plot() сделать по клоузам или ещё что-то, но этим наигрываешься за 15 минут. Это так чисто первое что пришло в голову.

            • Foudroyant
              27 августа 2021, 23:19

              Replikant_mih, 

              «Вообще идеальный бэктестер это когда быстро-мощно, функционально богато + возможность докрутить сверху-сбоку что-то свое».

              И ещё чтобы дивиденды от него капали каждый квартал. 

  • Serj90
    28 августа 2021, 01:00
    эм… че то какой странный тестер. Вы ему на вход что в итоге стравливаете? готовые свечи чтоли?
      • Serj90
        28 августа 2021, 09:45
        3Qu, я в принципе сторонник того, чтобы любая стратегия от 1min до 1D фрейма включительно проверялась исключительно на тиках. На недельках и месяцах — там да, по тикам проверять мало смысла.
  • wrmngr
    28 августа 2021, 02:33
    ага, я понял, вы просто троллите начинающих алготрейдеров вот этим кургузым куском кода!
  • Андрей Алферов
    28 августа 2021, 06:55
    Чем тслаб не угодил? У него хороший бектестер, и не надо изобретать свой велосипед, и порог вхождения ниже даже чем у и того простого питона
  • wistopus
    28 августа 2021, 08:07
    Не на чем тестировать.
    не надо ничего тестировать....
    когда я был совсем «юнным» и занимался беттингом, то гонял огромные базы в 300 000 событий в поисках неэффективностей...
    ничего не нашел....

    и только потом… работа одной группы продвинутых аспирантов натолкнула меня на мысль, что всего лишь надо, чтобы ставка имела вероятность более 50%...
    тоже самое и в трейдинге… Ваша позиция при входе должна иметь вероятность в положительную сторону более 50%....

    а тестирование оставьте новорегам — пусть «дети» тешатся…
    • ICWiener
      28 августа 2021, 09:41
      wistopus, это неправильно и в отношении беттинга, и в отношении трейдинга. Если коэффициент на ставку 9.4 вам и 30 процентов много. А для трейдинга достаточно чтобы плюсовая сделка была больше минусовой и можно угадывать менее 50% и торговать в плюс.
      • wistopus
        28 августа 2021, 09:49
        ICWiener, 
        это неправильно и в отношении беттинга, и в отношении трейдинга
        Ваше право -так считать......

  • akumidv
    28 августа 2021, 08:31

    Этот код нерабочий, т.к. i присваивается значение j, которая не определена когда нет сделки или отступ не правильный. Если это DataFrame Pandas можно его функции использовать для перебора значений, будет быстрее, а в таком цикле толку в нём не много.

    Да и в целом не очень конечно стиль программирования, когда в функции используются переменные в ней не объявленные, да и передавать индекс, вместо данных и изменять индекс присваиванием и использовать индекс в цикле while?, почему не for.

    Но в целом зачем этот велосипед?

    Полно готовых, бесплатных, функциональных со встроенными обертками популярных тех. индикаторов и их инициализации, интерфейсами для гипероптимизации параметров, с расчетом всевозможных параметров эффективности сделок. В большинстве еще в туториалах 5ок «наивных» стратегий лежит. И многие сделки еще рисуют и с ботами интегрируются или сразу ими являются, только интерфейсы настроить.

    Вопрос больше в скорости, если параметров и истории много. На мой взгляд начать проще в них, а если будет узко уже свое городить или их код расширять.

    Для примера список альтернатив одного из популярных backtesting.py https://github.com/kernc/backtesting.py/blob/master/doc/alternatives.md

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

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