Блог им. 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, чтобы анализировать данные.
5.3К | ★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

Читайте на SMART-LAB:
Рентабельность на рынке МФО и в Займере
Банк России в своем ежеквартальном обзоре  ключевых показателей МФО указывает на важную тенденцию: на рынке растет разрыв в рентабельности...
Фото
Высокие ставки прошли пик давления, но кредитный отбор стал жестче
По оценке аналитиков Газпромбанка, 2025 год стал периодом ухудшения кредитного профиля некоторых российских корпоративных заемщиков, хотя...
Фото
Продажи коротких полисов ОСАГО показывают «иксы»
В 1 квартале 2026 года количество проданных коротких полисов ОСАГО для такси достигло 5,9 млн, превысив в 7 раз показатель предшествующего года,...

теги блога 3Qu

....все тэги



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