Блог им. Albus

Backtrader - первые шаги

Продолжаю учить язык программирования Питон.
Начал разбираться с фреймворком backtrader.
https://www.backtrader.com/
Он позволяет качать котировки с YahooFinance и анализировать их. Можно гонять разные стратегии, считать сколько заработал или потерял. По себе знаю, что самое трудное — сделать первые шаги. Потом всё идёт гораздо легче. Так вот, описываю первые шаги, чтобы получить вот такую картинку. Это код из базового примера с их заглавной страницы, я сам ничего не писал. 
Backtrader - первые шаги
Это стратегия по пересечению скользяшек. На графике видно, что все сделки убыточные (вверху красные кружочки). При удачных сделках они были бы синие. Но дело не в убыточности отдельной стратегии, а в том, чтобы освоить фреймворк.
1. Качаем питон и устанавливаем https://www.python.org/
2. Запускаем чёрное окошко — cmd.exe
3. В командной строке пишем:
pip install backtrader
это установит фреймворк, а потом
pip install requests
без этого не заработает данный пример. Ему нужна эта библиотека, чтобы качать котировки с YahooFinance
4. По идее вся подготовительная работа сделана. Осталось только запустить среду разработки. Она уже есть в установленном вами питоне (IDLE):
Backtrader - первые шаги
С виду это обычный блокнот. В него кидаем этот код и сохраняем с любым именем. Но расширение строго определено:  .py
Backtrader - первые шаги
Сам код:

from datetime import datetime
import backtrader as bt

class SmaCross(bt.SignalStrategy):
	params = (('pfast', 10), ('pslow', 30),)
	def __init__(self):
		sma1, sma2 = bt.ind.SMA(period=self.p.pfast), bt.ind.SMA(period=self.p.pslow)
		self.signal_add(bt.SIGNAL_LONG, bt.ind.CrossOver(sma1, sma2))
cerebro = bt.Cerebro()
data = bt.feeds.YahooFinanceData(dataname='MSFT', fromdate=datetime(2011, 1, 1),todate=datetime(2012, 12, 31))
cerebro.adddata(data)
cerebro.addstrategy(SmaCross)
cerebro.run()
cerebro.plot()
Текст кода интуитивно понятен. Речь идёт про пересечение двух скользяшек с периодом 10 и 30. Анализируются акции Microsoft за 2011 и 2012 годы. Рассматриваются только сигналы на покупку. Покупка происходит при пересечении двух мувингов. Не надо быть программистом, чтобы понять это из данного кода.
Вверху нажимаете Run Module
Backtrader - первые шаги
и получаете картинку как у меня:
Backtrader - первые шаги
Стратегия убыточна. Что и требовалось доказать :)
--
Мой канал на YouTube
  • Ключевые слова:
  • python
★40
33 комментария

Что за кривой код который пропустил сигналы на вход и выход отмеченные красными стрелками?
Сергей Сергаев, да, действительно пропустил. Не знаю почему. Спрошу на форуме. Самому интересно.
Поставьте PyCharm
avatar
Михаил, я когда-то с ним работал, но не зашло. Сейчас я кодю на питоне в Notepad++ или в Visual Studio. 
Albus (Игорь Китаев), первая стрелка это открытие лонга на пересечении, вторая — закрытие лонга на обратном пересечении. Нет никаких шортов 
Если этот сигнал не пропускать то результат теста изменится очень существенно.
Сергей Сергаев, да, увидел. Это из их базового примера на заглавной странице. Спрошу в техподдержке. И правда странно.
Albus (Игорь Китаев), ну я за свою практику навидался таких косяков… Помню еще лет 15 назад в Метастоке напоролся на подставу. Система пропустила онлайн сигнал, а на следующий день когда включил Метасток она его показала, что вот мол надо было вчера покупать 

Сергей Сергаев, альбус не трейдер или программист. Он пытается быть журналистом.

В виду этого он просто не разобрался в коде и просто запулил его на смартлаб.

В коде просто нет сигнала на шорт, онли лонг.

bt.SIGNAL_LONG, bt.ind.CrossOver(sma1, sma2))
Невербальный паровоз, ты не самый внимательный читатель. Я написал, что только на покупку.
Albus (Игорь Китаев), если так, то не самый внимательный. Не увидел.
A Jupiter не пробовали? Мне так кажется он поудобней Note++.
avatar
KNK, год назад ставил Юпитер. Но по каким-то техническим причинам он у меня не пошёл. Точнее какие то модули на загрузились. Может из-за того что я в Крыму. Не стал разбираться и пошёл другим путём.
Albus (Игорь Китаев), понятно. Я его в составе анаконды загрузил, проблем не возникало.
avatar
Что за кривой код который пропустил сигналы на вход и выход отмеченные красными стрелками< все правильно… ошибка — это не ошибка, кривой код и слив — это во благо и защищает потребителя. Учить же матчасть надо.)
avatar
плохому танцору вечно что то мешает)))
Интересно, как тестер знает какой таймфрейм из скачанных данных выбрать? Или «fromdate=datetime(2011, 1, 1),todate=datetime(2012, 12, 31)» подразумевает что мы работаем с дневками? А если надо параллельно еще минутки и часовики анализировать, постепенный набор позиции осуществлять, фильтрацию сигналов производить как-нибудь, индикаторы кастомные добавлять на основе данных от других тикеров, насколько усложнится код класса SmaCross? Не станет проще тогда все самому реализовать, чем пользоваться чужими поделками?)
Ну и вопрос по питону, кто-нибудь в курсе, как инициализируется переменная self.p? Я вижу включенную переменную params, но как интерпретатор знает что ее имя можно сократить до p?
avatar
tranquility, там дневки стоят по дефолту. Можно менять.



А старый добрый метатрейдер чем плох? Там вроде в МТ5 уже и датафиды можно свои прикручивать. Вот изобретаете велосипед. Скользящие средние 
avatar
First, бектрейдер нормальная тула, я думаю он лучше тем что тут питон ) а не мкул
avatar
На их сайте на картинке сигнал не пропущен.


avatar
JITF, ага. Ну, подожду что ответит саппорт.
Тестирование на тиковых графиках идёт?
Йонатан Берсон, там можно разные таймфреймы выбирать, и тики тоже

Albus (Игорь Китаев), я писал одного роботёнка, выдавал он мне стабильный и хороший результат если его на свечках прогонять, но когда запустил тики всё стало печально) 
Ну теперь то торговля попрет в профит резко, разбогаетеешь… брокер уже ссыццо в кустах от страха… коды его безжалостно обанкротят твои…
сергей иванов, слышь, форексоид, на рынке трейдеры играют против трейдеров, это в твоих игровых автоматах лудоманы против букмекера играют
avatar
 нормас тема. Питон рулит. Его по-любасу учить надо. Не только для трейдинга. Но из всех языков для бектеста мне заходил больше матлаб. Ваще тема. Там то, что в питоне — двумя тоннами кода, делается парой строчек обычно. Но матлаб стал слишком какой-то страшный по сис требованиям. 
avatar
finweb,  по мне python, matlab и R — одного поля ягоды. Все с нестрогой типизацией, чрезвычайно медленные, но простые как фанера. Переходить от одного языка к другому труда не составляет от слова совсем.
Я в итоге остановился на питоне, так как у него есть селениум, который позволяет выкачивать отчетность компаний и потом спокойно переводить финансовую информацию в удобный мне вид.  
avatar
Бектрейдер хорош, но, увы, его основной разработчик гуру ООП. Как следствие, некоторые вещи сделаны на слишком высоком уровне абстракции и без 2-3 лет стажа или поллитры не разобраться. Например, оптимизация параметров стратегии задумана разрабом одним способом, а весь народ в коммьюнити делает по-другому. =)
avatar
Сделал попытку пересесть с TradeStation на BackTrader/Python. Вроде бы описание на сайте BackTrader по мне очень неплохое, но попробовал сделать шаг в сторону, и напрочь застрял, на простейшей  ИМХО задаче. Маялся пару недель, задал вопрос в Community-Backtrader. Ничего вразумительного не ответили — то ли я непонятно описал проблему, то ли вопрос не заинтересовал никого. Только на СмартЛабе нашел обсуждение BackTrader в русскоязычном исполнении и возникла надежда, что тут помогут:) Буду очень признателен, если так и произойдет.
Проблему я сформулировал здесь:

community.backtrader.com/topic/2023/help-with-starting-using-bt
В первом сообщении подробно, а внизу — краткое описание задачи

Пол-литры я заначил :)))

avatar

теги блога Albus (Игорь Китаев)

....все тэги



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