Блог им. 3Qu

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

    • 27 августа 2021, 22:25
    • |
    • 3Qu
  • Еще
Люди достаточно часто пишут — я бы конечно моделировал, но где взять тестер стратегии? Не на чем тестировать.
Ну, это самое простое, что может быть, я тестер пишу каждый раз заново — лень искать, быстрее написать заново. Да, и функциональность, возможно, нужна какая-то другая.
Смотрим код тестера стратегии и его вызов:
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, чтобы анализировать данные.
★7
32 комментария
Ловушка. Насколько просто запилить простейший тестер, настолько же сложно реализовать полноценный бэктестер и всю остальную инфраструктуру. А простым наиграешься очень быстро — захочется больше возможностей, а там зыбучие пески. А простейший да, на питоне — изи вообще.
avatar
Replikant_mih, инфраструктура? Какая еще нужна инфраструктура кроме Python, который и предназначен и повсеместно используется для анализа данных.)
avatar
3Qu, Питон для анализа данных, анализ данных — это разведка, дальше бэктесты полноценные, бэктестер это море разных функциональных возможностей, и каждую нужно реализовать, в совокупности — инфраструктура. Питон это разведка и прототипирование, а нормальный бэктестер сам себя не напишет))).
avatar
Replikant_mih, и че может ваш полноценный бэктестер? 
Ну, видел, я, скажем, тестер МТ5 — иначе как убожеством не назовешь.) Его возможности, это, вообще-то, смешно. Попользовался — дальше сохраняй все данные в файлы и иди в Питон за анализом.) А для полноценного анализа хорошо бы в Питоне иметь и стратегию, ну и тестер заодно.)
avatar

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

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

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

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

avatar

Replikant_mih, 

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

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

avatar
Replikant_mih, ну, не знаю, каждому свое. Я делаю на Питоне, потом это все переношу в С++ DLL. Особой разницы в результатах не вижу.
avatar
KУKЛа, 
ref DealIn(i)
    if sdata[i][c] > MA(i) and MA(i) — MA(i-1) > 5:
        return 1
    return 0
Это вам для лонгов, простейшая стратегия с МА.
avatar
3Qu, если есть столь тёмные люди, что не знают о бесплатных WealthLab 5.4.20 и 6.4, может лучше просто ткнуть их носом в Яндекс?
Версия 5.4.20 только 32-бит
amadey-mf.livejournal.com/78084.htmlhttps://amadey-mf.livejournal.com/78084.html
Версия 6.4, есть 64-бит. Но нужно перехакивать каждый месяц. У меня написан командник .cmd — без проблем.
amadey-mf.livejournal.com/114756.html

avatar
KУKЛа, жив и здоров. Просто поменял ник.
avatar
KУKЛа, уже побежал.))
avatar
KУKЛа, а разгадайте. 
avatar
Vanuta, то-то я смотрю у меня в друзьях некто Vanuta появился, и даже какая-то переписка сохранилась, но кто это был раньше — эт загадка.)

Была у детишек плохая черта,
Они как хотели меняли цвета. ©
avatar
3Qu, прям таки загадка. Ближайшее знакомое — Foudroyant, после этого ему талибы* на хвост наступили.
3Qu, ещё неделю назад этот персонаж был «Успел сбежать из Афганистана». 
Изначально был скорее всего «Foudroyant» и кажется мне,
что косил под Zorro тогда.
Короче псих какой-то ментально подвижный персонаж.
Меняет ник примерно каждые 2 недели.
Скушна ему видать.
Бедненький.

Только в этом году был:
***
Криптаны вылезают из могил
Плечевой монстр
Дискотека на костях Мурманска
Вампир-деньгосос
Foudroyant
Облигация
Успел сбежать из Афганистана
***
И возможно ещё несколько ников, лень листать.
А скока их было с момента рега?
Фиг его знает.
Весельчак короче.
эм… че то какой странный тестер. Вы ему на вход что в итоге стравливаете? готовые свечи чтоли?
avatar
Serj90, Ну, да. Хош тики, набери историю и скармливай. Вообще, чем хочешь, тем и корми.
А че странного-то? Есть другие предложения?
avatar
3Qu, я в принципе сторонник того, чтобы любая стратегия от 1min до 1D фрейма включительно проверялась исключительно на тиках. На недельках и месяцах — там да, по тикам проверять мало смысла.
avatar
Serj90, тики можно использовать в рабочей ТС.
Введение тиков в тестирование большого смысла не имеет.
Ну, если конечно система изначально не предназначена для работы на тиках.
avatar
ага, я понял, вы просто троллите начинающих алготрейдеров вот этим кургузым куском кода!
avatar
Чем тслаб не угодил? У него хороший бектестер, и не надо изобретать свой велосипед, и порог вхождения ниже даже чем у и того простого питона
avatar
Не на чем тестировать.
не надо ничего тестировать....
когда я был совсем «юнным» и занимался беттингом, то гонял огромные базы в 300 000 событий в поисках неэффективностей...
ничего не нашел....

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

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

avatar

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

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

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

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

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

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

avatar
akumidv, точно, нужно 4 пробела, соскочили. Спасибо, исправил.
Остальное не имеет смысла.
avatar

теги блога 3Qu

....все тэги



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