self.log(f'Bought @{order.executed.price:.2f}, Cost={order.executed.value:.2f}, Comm={order.executed.comm:.2f}') elif order.issell(): # Заявка на продажу self.log(f'Sold @{order.executed.price:.2f}, Cost={order.executed.value:.2f}, Comm={order.executed.comm:.2f}') self.order = None # Сбрасываем заявку на вход в позицию def notify_trade(self, trade): """Изменение статуса позиции""" if trade.isclosed: # Если позиция закрыта self.log(f'Trade Profit, Gross={trade.pnl:.2f}, NET={trade.pnlcomm:.2f}') if __name__ == '__main__': # Точка входа при запуске этого скрипта cerebro = bt.Cerebro() # Инициируем "движок" BackTrader clientCode = '<Ваш код клиента>' # Код клиента (присваивается брокером) firmId = '<Код фирмы>' # Код фирмы (присваивается брокером) # symbol = 'TQBR.GAZP' symbol = 'SPBFUT.SiH2' cerebro.addstrategy(Brackets, LimitPct=1) # Добавляем торговую систему с лимитным входом в n% store = QKStore() # Хранилище QUIK (QUIK на локальном компьютере) # store = QKStore(Host='<Ваш IP адрес>') # Хранилище QUIK (К QUIK на удаленном компьютере обращаемся по IP или названию) broker = store.getbroker(use_positions=False) # Брокер со счетом по умолчанию (срочный рынок РФ) # broker = store.getbroker(use_positions=False, ClientCode=clientCode, FirmId=firmId, TradeAccountId='L01-00000F00', LimitKind=2, CurrencyCode='SUR', IsFutures=False) # Брокер со счетом фондового рынка РФ cerebro.setbroker(broker) # Устанавливаем брокера data = store.getdata(dataname=symbol, timeframe=bt.TimeFrame.Minutes, compression=1, fromdate=datetime(2022, 2, 16), sessionstart=time(7, 0), LiveBars=True) # Исторические и новые минутные бары за все время cerebro.adddata(data) # Добавляем данные cerebro.addsizer(bt.sizers.FixedSize, stake=1000) # Кол-во акций для покупки/продажи cerebro.run() # Запуск торговой системы
from backtrader import Cerebro, TimeFrame from BackTraderQuik.QKStore import QKStore # Хранилище QUIK import Strategy as ts # Торговые системы if __name__ == '__main__': # Точка входа при запуске этого скрипта cerebro = Cerebro() # Инициируем "движок" BackTrader # Склейка фьючерсов (Rollover) symbols = ['SPBFUT.SiH9', 'SPBFUT.SiM9', 'SPBFUT.SiU9', 'SPBFUT.SiZ9', 'SPBFUT.SiH0', 'SPBFUT.SiM0', 'SPBFUT.SiU0', 'SPBFUT.SiZ0', 'SPBFUT.SiH1', 'SPBFUT.SiM1', 'SPBFUT.SiU1', 'SPBFUT.SiZ1'] # Тикеры для склейки store = QKStore() # Хранилище QUIK (QUIK на локальном компьютере) # store = QKStore(Host='<Ваш IP адрес>') # Хранилище QUIK (К QUIK на удаленном компьютере обращаемся по IP или названию) data = [store.getdata(dataname=symbol, timeframe=TimeFrame.Minutes, compression=5) for symbol in symbols] # Получаем по ним исторические данные cerebro.rolloverdata(name='Si', *data, checkdate=True, checkcondition=True) # Склеенный тикер cerebro.addstrategy(ts.PrintStatusAndBars) # Добавляем торговую систему cerebro.run() # Запуск торговой системы cerebro.plot() # Рисуем график. Требуется matplotlib версии 3.2.2 (pip install matplotlib==3.2.2)
from datetime import datetime from backtrader import Cerebro, TimeFrame from BackTraderQuik.QKStore import QKStore # Хранилище QUIK import Strategy as ts # Торговые системы if __name__ == '__main__': # Точка входа при запуске этого скрипта cerebro = Cerebro() # Инициируем "движок" BackTrader # Несколько временнЫх интервалов, прямая загрузка symbol = 'TQBR.GAZP' store = QKStore(Host='192.168.1.7') data = store.getdata( dataname=symbol, timeframe=TimeFrame.Minutes, compression=1, fromdate=datetime(2020, 1, 1) ) # Исторические данные по малому временнОму интервалу (должен идти первым) cerebro.adddata(data) # Добавляем данные data = store.getdata( dataname=symbol, timeframe=TimeFrame.Days, fromdate=datetime( 2020, 1, 1)) # Исторические данные по большому временнОму интервалу cerebro.adddata(data) # Добавляем данные cerebro.addstrategy(ts.PrintStatusAndBars) # Добавляем торговую систему cerebro.run() # Запуск торговой системы cerebro.plot( ) # Рисуем график. Требуется matplotlib версии 3.2.2 (pip install matplotlib==3.2.2)
from datetime import datetime from backtrader import Cerebro, TimeFrame from BackTraderQuik.QKStore import QKStore # Хранилище QUIK import Strategy as ts # Торговые системы if __name__ == '__main__': # Точка входа при запуске этого скрипта cerebro = Cerebro() # Инициируем "движок" BackTrader # Несколько временнЫх интервалов: получение большего временнОго интервала из меньшего (Resample) symbol = 'TQBR.GAZP' store = QKStore() # Хранилище QUIK (QUIK на локальном компьютере) # store = QKStore(Host='<Ваш IP адрес>') # Хранилище QUIK (К QUIK на удаленном компьютере обращаемся по IP или названию) data = store.getdata( dataname=symbol, timeframe=TimeFrame.Minutes, compression=1, fromdate=datetime( 2021, 11, 19)) # Исторические данные по самому меньшему временному интервалу cerebro.adddata(data) # Добавляем данные из QUIK для проверки исходников cerebro.resampledata( data, timeframe=TimeFrame.Minutes, compression=5, boundoff=1 ) # Можно добавить больший временной интервал кратный меньшему (добавляется автоматом) data1 = store.getdata(dataname=symbol, timeframe=TimeFrame.Minutes, compression=5, fromdate=datetime(2021, 11, 19)) cerebro.adddata( data1 ) # Добавляем данные из QUIK для проверки правильности работы Resample cerebro.addstrategy(ts.PrintStatusAndBars) # Добавляем торговую систему
from datetime import datetime from backtrader import Cerebro, TimeFrame from BackTraderQuik.QKStore import QKStore # Хранилище QUIK # from BackTraderQuik.QKData import QKData # Данные QUIK для вызвова напрямую (не рекомендуется) import Strategy as ts # Торговые системы if __name__ == '__main__': # Точка входа при запуске этого скрипта cerebro = Cerebro() # Инициируем "движок" BackTrader # Один тикер, один временной интервал # symbol = 'TQBR.GAZP' symbol = 'SPBFUT.SiM1' # data = QKData(dataname=symbol, timeframe=TimeFrame.Days, Host='192.168.1.7') # Можно вызывать данные напрямую (не рекомендуется) store = QKStore(Host='192.168.1.7') # Хранилище QUIK # data = store.getdata(dataname=symbol, timeframe=TimeFrame.Days, fromdate=datetime(2018, 1, 1), LiveBars=False) # Исторические дневные бары с заданной даты # data = store.getdata(dataname=symbol, timeframe=TimeFrame.Minutes, compression=1, LiveBars=False) # Исторические минутные бары за все время data = store.getdata( dataname=symbol, timeframe=TimeFrame.Minutes, fromdate=datetime(2021, 3, 16, 7, 0), compression=1, LiveBars=True) # Исторические и новые минутные бары за все время cerebro.adddata(data) # Добавляем данные cerebro.addstrategy(ts.PrintStatusAndBars) # Добавляем торговую систему cerebro.run() # Запуск торговой системы # cerebro.plot() # Рисуем график. Требуется matplotlib версии 3.2.2 (pip install matplotlib==3.2.2)
from backtrader import Cerebro, TimeFrame from BackTraderQuik.QKStore import QKStore # Хранилище QUIK import Strategy as ts # Торговые системы if __name__ == '__main__': # Точка входа при запуске этого скрипта cerebro = Cerebro() # Инициируем "движок" BackTrader # Тестирование на меньшем временнОм интервале (Replay) symbol = 'TQBR.GAZP' store = QKStore(Host='192.168.1.7') data = store.getdata( dataname=symbol, timeframe=TimeFrame.Minutes, compression=5 ) # Исторические данные по самому меньшему временному интервалу cerebro.replaydata( data, timeframe=TimeFrame.Days ) # На графике видим большой интервал, прогоняем ТС на меньшем cerebro.addstrategy(ts.PrintStatusAndBars) # Добавляем торговую систему cerebro.run() # Запуск торговой системы cerebro.plot( ) # Рисуем график. Требуется matplotlib версии 3.2.2 (pip install matplotlib==3.2.2)
from datetime import datetime from backtrader import Cerebro, TimeFrame from BackTraderQuik.QKStore import QKStore # Хранилище QUIK import Strategy as ts # Торговые системы if __name__ == '__main__': # Точка входа при запуске этого скрипта cerebro = Cerebro() # Инициируем "движок" BackTrader symbols = ( 'TQBR.SBER', 'TQBR.GAZP', 'TQBR.LKOH', 'TQBR.GMKN', ) # Кортеж тикеров store = QKStore() # Хранилище QUIK (QUIK на локальном компьютере) # store = QKStore(Host='<Ваш IP адрес>') # Хранилище QUIK (К QUIK на удаленном компьютере обращаемся по IP или названию) for symbol in symbols: # Пробегаемся по всем тикерам data = store.getdata( dataname=symbol, timeframe=TimeFrame.Minutes, compression=1, fromdate=datetime(2021, 10, 4), LiveBars=True) # Исторические и новые бары по первому тикеру cerebro.adddata(data) # Добавляем данные cerebro.addstrategy( ts.PrintStatusAndBars, name="One Ticker", symbols=('TQBR.SBER', )) # Добавляем торговую систему по одному тикеру cerebro.addstrategy(ts.PrintStatusAndBars, name="Two Tickers", symbols=( 'TQBR.GAZP',
from datetime import datetime from backtrader import Cerebro, TimeFrame from BackTraderQuik.QKStore import QKStore # Хранилище QUIK import Strategy as ts # Торговые системы if __name__ == '__main__': # Точка входа при запуске этого скрипта cerebro = Cerebro() # Инициируем "движок" BackTrader # Несколько тикеров, один временной интервал symbol1 = 'TQBR.GAZP' symbol2 = 'TQBR.LKOH' store = QKStore(Host='192.168.1.7') # Хранилище QUIK data = store.getdata( dataname=symbol1, timeframe=TimeFrame.Days, fromdate=datetime(2018, 1, 1)) # Исторические данные по первому тикеру cerebro.adddata(data) # Добавляем данные data = store.getdata( dataname=symbol2, timeframe=TimeFrame.Days, fromdate=datetime(2018, 1, 1)) # Исторические данные по второму тикеру cerebro.adddata(data) # Добавляем данные cerebro.addstrategy(ts.PrintStatusAndBars) # Добавляем торговую систему cerebro.run() # Запуск торговой системы cerebro.plot( ) # Рисуем график. Требуется matplotlib версии 3.2.2 (pip install matplotlib==3.2.2)
from datetime import datetime from backtrader import Cerebro, TimeFrame from BackTraderQuik.QKStore import QKStore # Хранилище QUIK # from BackTraderQuik.QKData import QKData # Данные QUIK для вызвова напрямую (не рекомендуется) import Strategy as ts # Торговые системы if __name__ == '__main__': # Точка входа при запуске этого скрипта cerebro = Cerebro() # Инициируем "движок" BackTrader # Один тикер, один временной интервал # symbol = 'TQBR.GAZP' symbol = 'SPBFUT.SiH2' # data = QKData(dataname=symbol, timeframe=TimeFrame.Days, Host='192.168.1.7') # Можно вызывать данные напрямую (не рекомендуется) store = QKStore() # Хранилище QUIK (QUIK на локальном компьютере) # store = QKStore(Host='<Ваш IP адрес>') # Хранилище QUIK (К QUIK на удаленном компьютере обращаемся по IP или названию) # data = store.getdata(dataname=symbol, timeframe=TimeFrame.Days, fromdate=datetime(2018, 1, 1), LiveBars=False) # Исторические дневные бары с заданной даты # data = store.getdata(dataname=symbol, timeframe=TimeFrame.Minutes, compression=1, LiveBars=False) # Исторические минутные бары за все время data = store.getdata(dataname=symbol, timeframe=TimeFrame.Minutes, fromdate=datetime(2022, 2, 15, 7, 0), compression=1, LiveBars=True) # Исторические и новые минутные бары за все время cerebro.adddata(data) # Добавляем данные cerebro.addstrategy(ts.PrintStatusAndBars) # Добавляем торговую систему cerebro.run() # Запуск торговой системы # cerebro.plot() # Рисуем график. Требуется matplotlib версии 3.2.2 (pip install matplotlib==3.2.2)
return # то статус позиции не изменился, выходим, дальше не продолжаем self.log( f'Trade Profit, Gross={trade.pnl:.2f}, NET={trade.pnlcomm:.2f}') if __name__ == '__main__': # Точка входа при запуске этого скрипта cerebro = bt.Cerebro() # Инициируем "движок" BackTrader clientCode = 'D61904' # Код клиента (присваивается брокером) symbol = 'SPBFUT.SiH1' # symbol = 'TQBR.GAZP' cerebro.addstrategy(LimitCancel, LimitPct=1) # Добавляем торговую систему с параметрами store = QKStore(Host='192.168.1.7') # Хранилище QUIK broker = store.getbroker( use_positions=False ) # Брокер со счетом по умолчанию (срочный рынок РФ) cerebro.setbroker(broker) # Устанавливаем брокера data = store.getdata( dataname=symbol, timeframe=bt.TimeFrame.Minutes, compression=1, fromdate=datetime(2021, 2, 15, 10, 00), LiveBars=True) # Исторические и новые минутные бары за все время cerebro.adddata(data) # Добавляем данные cerebro.addsizer(bt.sizers.FixedSize, stake=1000) # Кол-во акций для покупки/продажи cerebro.run() # Запуск торговой системы
from datetime import datetime from backtrader import Cerebro, TimeFrame from BackTraderQuik.QKStore import QKStore # Хранилище QUIK import Strategy as ts # Торговые системы if __name__ == '__main__': # Точка входа при запуске этого скрипта cerebro = Cerebro() # Инициируем "движок" BackTrader # Несколько временнЫх интервалов, прямая загрузка symbol = 'TQBR.GAZP' store = QKStore() # Хранилище QUIK (QUIK на локальном компьютере) # store = QKStore(Host='<Ваш IP адрес>') # Хранилище QUIK (К QUIK на удаленном компьютере обращаемся по IP или названию) data = store.getdata( dataname=symbol, timeframe=TimeFrame.Minutes, compression=1, fromdate=datetime(2020, 1, 1) ) # Исторические данные по малому временнОму интервалу (должен идти первым) cerebro.adddata(data) # Добавляем данные data = store.getdata( dataname=symbol, timeframe=TimeFrame.Days, fromdate=datetime( 2020, 1, 1)) # Исторические данные по большому временнОму интервалу cerebro.adddata(data) # Добавляем данные cerebro.addstrategy(ts.PrintStatusAndBars) # Добавляем торговую систему cerebro.run() # Запуск торговой системы cerebro.plot( ) # Рисуем график. Требуется matplotlib версии 3.2.2 (pip install matplotlib==3.2.2)