/
ichechet
/
FinLabPy
Обзор
Документация
Войти
/
ichechet
/
FinLabPy
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
BackTrader/Examples/03 - Data.py
54 строки
4 KB
cia76
Оформление
10 дек 2025, 15:34
10 дек 2025, 15:34
406f01f
Код
Авторство
О чём код?
import logging from datetime import date, datetime, timedelta from zoneinfo import ZoneInfo # ВременнАя зона import backtrader as bt # noinspection PyUnusedImports from FinLabPy.Config import brokers, default_broker # Все брокеры и брокер по умолчанию from FinLabPy.Schedule.MOEX import Stocks # Расписание торгов фондового рынка Московской Биржи from FinLabPy.BackTrader import Store # Хранилище BackTrader class LogBars(bt.Strategy): """Торговая система, которая получает бары и выводит их в лог""" logger = logging.getLogger('Data') # Будем вести лог def next(self): """Получение следующего исторического/нового бара""" self.logger.info(f'{bt.num2date(self.data.datetime[0]):%d.%m.%Y %H:%M:%S} O:{self.data.open[0]} H:{self.data.high[0]} L:{self.data.low[0]} C:{self.data.close[0]} V:{int(self.data.volume[0])}') # noinspection PyShadowingNames def notify_data(self, data, status, *args, **kwargs): """Изменение статуса приходящих баров""" # noinspection PyProtectedMember self.logger.info(data._getstatusname(status)) if __name__ == '__main__': # Точка входа при запуске этого скрипта dataname = 'TQBR.SBER' # Тикер week_ago = date.today() - timedelta(days=7) # Дата неделю назад без времени schedule = Stocks() # Расписание биржи logging.basicConfig(format='%(asctime)s - %(name)s - %(levelname)s - %(message)s', # Формат сообщения datefmt='%d.%m.%Y %H:%M:%S', # Формат даты level=logging.DEBUG, # Уровень логируемых событий NOTSET/DEBUG/INFO/WARNING/ERROR/CRITICAL handlers=[logging.FileHandler('Data.log', encoding='utf-8'), logging.StreamHandler()]) # Лог записываем в файл и выводим на консоль logging.Formatter.converter = lambda *args: datetime.now(tz=ZoneInfo('Europe/Moscow')).timetuple() # В логе время указываем по МСК # noinspection PyArgumentList cerebro = bt.Cerebro(stdstats=False) # Инициируем "движок" BackTrader. Стандартная статистика сделок и кривой доходности не нужна store = Store(broker=default_broker) # Хранилище брокера по умолчанию # store = Store(broker=brokers['<Ключ словаря brokers из Config.py>']) # Хранилище выбранного брокера broker = store.getbroker() # Брокер # noinspection PyArgumentList cerebro.setbroker(broker) # Устанавливаем брокера data = store.getdata(dataname=dataname) # 1. Все исторические дневные бары # data = store.getdata(dataname=dataname, timeframe=bt.TimeFrame.Minutes, compression=1, fromdate=week_ago, four_price_doji=True) # 2. Исторические минутные бары за последнюю неделю с дожи 4-х цен # data = store.getdata(dataname=dataname, timeframe=bt.TimeFrame.Minutes, compression=1, fromdate=week_ago, live_bars=True) # 3. Исторические и новые минутные бары за последнюю неделю по подписке # data = store.getdata(dataname=dataname, timeframe=bt.TimeFrame.Minutes, compression=1, fromdate=week_ago, live_bars=True, schedule=schedule) # 4. Исторические и новые минутные бары за последнюю неделю по расписанию cerebro.adddata(data) # Добавляем данные cerebro.addstrategy(LogBars) # Добавляем торговую систему cerebro.run() # Запуск торговой системы