Albus
Albus личный блог
28 апреля 2019, 19:12

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
33 Комментария
  • Сергей Сергаев
    28 апреля 2019, 20:11

    Что за кривой код который пропустил сигналы на вход и выход отмеченные красными стрелками?
  • Михаил
    28 апреля 2019, 20:31
    Поставьте PyCharm
  • KNK
    28 апреля 2019, 21:34
    A Jupiter не пробовали? Мне так кажется он поудобней Note++.
      • KNK
        28 апреля 2019, 21:51
        Albus (Игорь Китаев), понятно. Я его в составе анаконды загрузил, проблем не возникало.
  • YuryDok
    28 апреля 2019, 21:37
    Что за кривой код который пропустил сигналы на вход и выход отмеченные красными стрелками< все правильно… ошибка — это не ошибка, кривой код и слив — это во благо и защищает потребителя. Учить же матчасть надо.)
  • Сергей Гутторов
    28 апреля 2019, 21:40
    плохому танцору вечно что то мешает)))
  • tranquility
    29 апреля 2019, 01:41
    Интересно, как тестер знает какой таймфрейм из скачанных данных выбрать? Или «fromdate=datetime(2011, 1, 1),todate=datetime(2012, 12, 31)» подразумевает что мы работаем с дневками? А если надо параллельно еще минутки и часовики анализировать, постепенный набор позиции осуществлять, фильтрацию сигналов производить как-нибудь, индикаторы кастомные добавлять на основе данных от других тикеров, насколько усложнится код класса SmaCross? Не станет проще тогда все самому реализовать, чем пользоваться чужими поделками?)
    Ну и вопрос по питону, кто-нибудь в курсе, как инициализируется переменная self.p? Я вижу включенную переменную params, но как интерпретатор знает что ее имя можно сократить до p?
  • First
    29 апреля 2019, 01:57
    А старый добрый метатрейдер чем плох? Там вроде в МТ5 уже и датафиды можно свои прикручивать. Вот изобретаете велосипед. Скользящие средние 
    • CloseToAlgoTrading
      29 апреля 2019, 12:11
      First, бектрейдер нормальная тула, я думаю он лучше тем что тут питон ) а не мкул
  • JITF
    29 апреля 2019, 08:12
    На их сайте на картинке сигнал не пропущен.


  • Йонатан Берсон
    29 апреля 2019, 10:29
    Тестирование на тиковых графиках идёт?
      • Йонатан Берсон
        29 апреля 2019, 10:38
        Albus (Игорь Китаев), я писал одного роботёнка, выдавал он мне стабильный и хороший результат если его на свечках прогонять, но когда запустил тики всё стало печально) 
  • сергей иванов
    29 апреля 2019, 12:21
    Ну теперь то торговля попрет в профит резко, разбогаетеешь… брокер уже ссыццо в кустах от страха… коды его безжалостно обанкротят твои…
    • umoz
      06 мая 2019, 11:10
      сергей иванов, слышь, форексоид, на рынке трейдеры играют против трейдеров, это в твоих игровых автоматах лудоманы против букмекера играют
  • umoz
    06 мая 2019, 11:13
     нормас тема. Питон рулит. Его по-любасу учить надо. Не только для трейдинга. Но из всех языков для бектеста мне заходил больше матлаб. Ваще тема. Там то, что в питоне — двумя тоннами кода, делается парой строчек обычно. Но матлаб стал слишком какой-то страшный по сис требованиям. 
    • Whispered
      13 августа 2019, 18:23
      finweb,  по мне python, matlab и R — одного поля ягоды. Все с нестрогой типизацией, чрезвычайно медленные, но простые как фанера. Переходить от одного языка к другому труда не составляет от слова совсем.
      Я в итоге остановился на питоне, так как у него есть селениум, который позволяет выкачивать отчетность компаний и потом спокойно переводить финансовую информацию в удобный мне вид.  
  • Whispered
    13 августа 2019, 18:20
    Бектрейдер хорош, но, увы, его основной разработчик гуру ООП. Как следствие, некоторые вещи сделаны на слишком высоком уровне абстракции и без 2-3 лет стажа или поллитры не разобраться. Например, оптимизация параметров стратегии задумана разрабом одним способом, а весь народ в коммьюнити делает по-другому. =)
  • fxDio
    07 сентября 2019, 11:27
    Сделал попытку пересесть с TradeStation на BackTrader/Python. Вроде бы описание на сайте BackTrader по мне очень неплохое, но попробовал сделать шаг в сторону, и напрочь застрял, на простейшей  ИМХО задаче. Маялся пару недель, задал вопрос в Community-Backtrader. Ничего вразумительного не ответили — то ли я непонятно описал проблему, то ли вопрос не заинтересовал никого. Только на СмартЛабе нашел обсуждение BackTrader в русскоязычном исполнении и возникла надежда, что тут помогут:) Буду очень признателен, если так и произойдет.
    Проблему я сформулировал здесь:

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

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

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

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