Люди достаточно часто пишут — я бы конечно моделировал, но где взять тестер стратегии? Не на чем тестировать.
Ну, это самое простое, что может быть, я тестер пишу каждый раз заново — лень искать, быстрее написать заново. Да, и функциональность, возможно, нужна какая-то другая.
Смотрим код тестера стратегии и его вызов:
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 — иначе как убожеством не назовешь.) Его возможности, это, вообще-то, смешно. Попользовался — дальше сохраняй все данные в файлы и иди в Питон за анализом.) А для полноценного анализа хорошо бы в Питоне иметь и стратегию, ну и тестер заодно.)
3Qu, MT5 когда я пробовал — мне тоже не понравилось.
Вообще идеальный бэктестер это когда быстро-мощно, функционально богато + возможность докрутить сверху-сбоку что-то свое.
Я так и делаю, финальный этап — я питоновым скриптом обрабатывают результаты, это можно через API в сам бэктестер зашить, но мне на питоне проще.
Что может полноценный бэктестер — да тупо он хотя бы свечной график может отрисовать и трейды на нём)), и чтоб его можно было прокручивать, менять таймфремы на лету и т.д. Я конечно могу plt.plot() сделать по клоузам или ещё что-то, но этим наигрываешься за 15 минут. Это так чисто первое что пришло в голову.
Replikant_mih,
«Вообще идеальный бэктестер это когда быстро-мощно, функционально богато + возможность докрутить сверху-сбоку что-то свое».
И ещё чтобы дивиденды от него капали каждый квартал.
ref DealIn(i)
if sdata[i][c] > MA(i) and MA(i) — MA(i-1) > 5:
return 1
return 0
Это вам для лонгов, простейшая стратегия с МА.
Версия 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
Была у детишек плохая черта,
Они как хотели меняли цвета. ©
Изначально был скорее всего «Foudroyant» и кажется мне,
что косил под Zorro тогда.
Короче псих какой-то ментально подвижный персонаж.
Меняет ник примерно каждые 2 недели.
Скушна ему видать.
Бедненький.
Только в этом году был:
***
Криптаны вылезают из могил
Плечевой монстр
Дискотека на костях Мурманска
Вампир-деньгосос
Foudroyant
Облигация
Успел сбежать из Афганистана
***
И возможно ещё несколько ников, лень листать.
А скока их было с момента рега?
Фиг его знает.
Весельчак короче.
А че странного-то? Есть другие предложения?
Введение тиков в тестирование большого смысла не имеет.
Ну, если конечно система изначально не предназначена для работы на тиках.
когда я был совсем «юнным» и занимался беттингом, то гонял огромные базы в 300 000 событий в поисках неэффективностей...
ничего не нашел....
и только потом… работа одной группы продвинутых аспирантов натолкнула меня на мысль, что всего лишь надо, чтобы ставка имела вероятность более 50%...
тоже самое и в трейдинге… Ваша позиция при входе должна иметь вероятность в положительную сторону более 50%....
а тестирование оставьте новорегам — пусть «дети» тешатся…
Этот код нерабочий, т.к. i присваивается значение j, которая не определена когда нет сделки или отступ не правильный. Если это DataFrame Pandas можно его функции использовать для перебора значений, будет быстрее, а в таком цикле толку в нём не много.
Да и в целом не очень конечно стиль программирования, когда в функции используются переменные в ней не объявленные, да и передавать индекс, вместо данных и изменять индекс присваиванием и использовать индекс в цикле while?, почему не for.
Но в целом зачем этот велосипед?
Полно готовых, бесплатных, функциональных со встроенными обертками популярных тех. индикаторов и их инициализации, интерфейсами для гипероптимизации параметров, с расчетом всевозможных параметров эффективности сделок. В большинстве еще в туториалах 5ок «наивных» стратегий лежит. И многие сделки еще рисуют и с ботами интегрируются или сразу ими являются, только интерфейсы настроить.
Вопрос больше в скорости, если параметров и истории много. На мой взгляд начать проще в них, а если будет узко уже свое городить или их код расширять.
Для примера список альтернатив одного из популярных backtesting.py https://github.com/kernc/backtesting.py/blob/master/doc/alternatives.md
Остальное не имеет смысла.