Exemple #1
0
def _load_datafeed(cerebro: bt.Cerebro):
    """Load all feeds into backtrader"""

    # Datas are in a subfolder of the samples. Need to find where the script is located
    # because it could have been called from anywhere
    modpath = os.path.dirname(os.path.abspath(sys.argv[0]))

    feeds = [
        f for f in listdir(DATA_FEED_PATH)
        if isfile(join(DATA_FEED_PATH, f)) and DATA_SUFFIX in f
    ]

    for feed in feeds:
        data_path = os.path.join(modpath, f'{DATA_FEED_PATH}{feed}')

        # Data Feed
        data = bt.feeds.YahooFinanceCSVData(
            dataname=data_path,
            # DO NOT PASS VALUES BEFORE THIS DATE
            fromdate=settings.FROM_DATE,
            # DO NOT PASS VALUES AFTER THIS DATE
            todate=settings.TO_DATE,
            reverse=False)

        cerebro.adddata(data)
    print(f"Added {len(feeds)} data feeds files")
Exemple #2
0
def test_ordered_optimize(cerebro: bt.Cerebro):
    cerebro.optstrategy(bt.strategies.MA_CrossOver,
                        slow=[20],
                        fast=[5, 10, 20])
    res = cerebro.run(optreturn=True)

    def df(optresults):
        a = [x.analyzers.tradeanalyzer.get_analysis() for x in optresults]
        return sum([x.pnl.gross.total if 'pnl' in x else 0 for x in a])

    usercolumns = {
        'Profit & Loss': df,
    }

    b = Bokeh(style='bar', output_mode=_output_mode)

    browser = OptBrowser(b,
                         res,
                         usercolumns=usercolumns,
                         sortcolumn='Profit & Loss')
    model = browser.build_optresult_model()

    # browser.start()

    def count_children(obj):
        numo = 1
        if hasattr(obj, "children"):
            numo = count_children(obj.children)
        if hasattr(obj, '__len__'):
            numo += len(obj)
        return numo

    num = count_children(model)

    assert num == 3
Exemple #3
0
def test_optimize_no_optreturn(cerebro_no_optreturn: bt.Cerebro):
    cerebro_no_optreturn.optstrategy(bt.strategies.MA_CrossOver,
                                     slow=[5, 10, 20],
                                     fast=[5, 10, 20])
    res = cerebro_no_optreturn.run()

    s = backtrader_plotting.schemes.Blackly()
    b = Bokeh(style='bar', output_mode=_output_mode, scheme=s)

    browser = OptBrowser(b, res)
    model = browser.build_optresult_model()

    #browser.start()

    def count_children(obj):
        numo = 1
        if hasattr(obj, "children"):
            numo = count_children(obj.children)
        if hasattr(obj, '__len__'):
            numo += len(obj)
        return numo

    num = count_children(model)

    assert num == 3
Exemple #4
0
def test_std_backtest(cerebro: bt.Cerebro):
    cerebro.addstrategy(bt.strategies.MA_CrossOver)
    cerebro.run()

    s = backtrader_plotting.schemes.Blackly()
    b = Bokeh(style='bar', scheme=s, output_mode=_output_mode)
    figs = cerebro.plot(b)

    assert len(figs) == 1
    assert_num_tabs(figs, 3)
    assert_num_figures(figs, 4)
Exemple #5
0
def test_optimize_2strat(cerebro: bt.Cerebro):
    cerebro.optstrategy(bt.strategies.MA_CrossOver,
                        slow=[5, 10, 20],
                        fast=[5, 10, 20])
    cerebro.optstrategy(ToggleStrategy, modbuy=[12, 15], modsell=[17, 19])
    res = cerebro.run()

    b = Bokeh(style='bar', output_mode=_output_mode)

    browser = OptBrowser(b, res)

    with pytest.raises(RuntimeError):
        browser.build_optresult_model()
Exemple #6
0
    def test_simple(self):

        cerebro = Cerebro()

        cerebro.addstrategy(TestStrategy)

        # 'apiKey' and 'secret' are skipped
        config = {
            'enableRateLimit': True,
            'nonce': lambda: str(int(time.time() * 1000))
        }

        feed = CCXTFeed(
            exchange='binance',
            dataname='BNB/USDT',
            # valid values are:
            # ticks, microseconds, seconds, minutes, daily, weekly, monthly
            timeframe=TimeFrame.Minutes,
            fromdate=dt.datetime(2019, 1, 28, 3, 30),
            todate=dt.datetime(2019, 1, 28, 10, 00),
            compression=15,
            ohlcv_limit=2,  # required to make calls to binance exchange work
            currency='BNB',
            config=config,
            retries=5,
            # drop_newest=True,
            # historical=False,
            debug=True,
        )

        # Add the feed
        cerebro.adddata(feed)

        # Run the strategy
        cerebro.run()
def add_symbol(cerebro: bt.Cerebro, data_path: str, start_date: str,
               end_date: str):
    data = DOHLCVPData(
        dataname=data_path,
        headers=True,
        fromdate=datetime.strptime(start_date, "%Y-%m-%d"),
        todate=datetime.strptime(end_date, "%Y-%m-%d"),
        reverse=False,
    )
    data.plotinfo.plot = False
    data.plotinfo.subplot = False
    data_name = data_path.split("/")[-1][:-4]

    cerebro.adddata(data, name=data_name)
    return data
Exemple #8
0
def test_std_backtest_ind_on_line(cerebro: bt.Cerebro):
    '''In the past it crashed when creating indicators with specific lines case LineSeriesStub was not handled correctly'''
    class TestStrategy(bt.Strategy):
        def __init__(self):
            self._sma = bt.indicators.SMA(self.data.close)

    cerebro.addstrategy(TestStrategy)
    cerebro.run()

    s = backtrader_plotting.schemes.Blackly()
    b = Bokeh(style='bar', scheme=s, output_mode=_output_mode)
    figs = cerebro.plot(b)

    assert len(figs) == 1
    assert_num_tabs(figs, 3)
    assert_num_figures(figs, 3)
Exemple #9
0
def run_bt_multiple():
    cerebro = Cerebro()
    df = get_pickle('tiingo', 'SPY')
    data = PandasData(dataname=df)
    cerebro.adddata(data)
    cerebro.addanalyzer(Returns)
    cerebro.optstrategy(StrategyFetcher, idx=[0, 1])
    results = cerebro.run()

    strats = [x[0] for x in results]
    for i, strat in enumerate(strats):
        rets = strat.analyzers.returns.get_analysis()
        print('Strategy {} Name {}:\n  - analyzer: {}\n'.format(
            i, strat.__class__.__name__, rets))
def run(symbol, prices, strategy):

    # initialize the Cerebro engine
    cerebro = Cerebro()
    cerebro.broker.setcash(100000)

    # add OHLC data feed
    feed = bt.feeds.PandasData(dataname=prices)
    cerebro.adddata(feed)

    cerebro.addstrategy(strategy=strategy, ticker=symbol)
    cerebro.run()
Exemple #11
0
def test_std_backtest_ind_subplot(cerebro: bt.Cerebro):
    cerebro.addstrategy(bt.strategies.MA_CrossOver)
    cerebro.run()

    plotconfig = {
        '#:i-0': {
            'subplot': True,
        }
    }

    s = backtrader_plotting.schemes.Blackly()
    b = Bokeh(style='bar',
              scheme=s,
              output_mode=_output_mode,
              plotconfig=plotconfig)

    figs = cerebro.plot(b)

    assert_num_tabs(figs, 3)
    assert_num_figures(figs, 5)
Exemple #12
0
def addPandasData(codes, cerebro: bt.Cerebro, pandas_data_type=PandasDataBase):
    be = get_data_backend()
    start = get_start_date()
    end = get_current_date()
    freq = get_current_freq()
    if isinstance(codes, str):
        # 统一转换成list类型
        codes = [codes]
    dflist = []
    if hasattr(be, 'get_dataFrames'):
        dflist = be.get_dataFrames(codes, start, end, freq)
    #  else:
        #  todo 调用be.get_price
        #  for code in codes:
        #  data=be.get_price(codes, start, end, freq)
        #  df= pd.Dataframe(data)
        #  dflist.append(df)

    for i, data in enumerate(dflist):
        pdf = pandas_data_type(dataname=data)
        cerebro.adddata(pdf)
Exemple #13
0
def test_backtest_2strats(cerebro: bt.Cerebro):
    cerebro.addstrategy(bt.strategies.MA_CrossOver)
    cerebro.addstrategy(ToggleStrategy)
    cerebro.run()

    b = Bokeh(style='bar', output_mode=_output_mode)

    figs = cerebro.plot(b)

    assert len(figs) == 2
    assert_num_tabs(figs, 3, 3)
    assert_num_figures(figs, 4, 3)
Exemple #14
0
def test_optimize(cerebro: bt.Cerebro):
    cerebro.optstrategy(bt.strategies.MA_CrossOver,
                        slow=[5, 10, 20],
                        fast=[5, 10, 20])
    res = cerebro.run(optreturn=True)

    b = Bokeh(style='bar', output_mode=_output_mode)

    browser = OptBrowser(b, res)
    model = browser.build_optresult_model()

    # browser.start()

    def count_children(obj):
        numo = 1
        if hasattr(obj, "children"):
            numo = count_children(obj.children)
        if hasattr(obj, '__len__'):
            numo += len(obj)
        return numo

    num = count_children(model)

    assert num == 3
Exemple #15
0
def backtesting(config):
    cerebro = Cerebro()

    cerebro.addstrategy(TestStrategy)

    cerebro.adddata(CCXTFeed(exchange='binance',
                             dataname='BNB/USDT',
                             timeframe=TimeFrame.Minutes,
                             fromdate=datetime(2019, 1, 1, 0, 0),
                             todate=datetime(2019, 1, 1, 0, 2),
                             compression=1,
                             ohlcv_limit=2,
                             currency='BNB',
                             config=config,
                             retries=5))

    finished_strategies = cerebro.run()
    return finished_strategies
Exemple #16
0
def test_std_backtest_2datas(cerebro: bt.Cerebro):
    datapath = getdatadir('nvda-1999-2014.txt')
    data = bt.feeds.YahooFinanceCSVData(
        dataname=datapath,
        fromdate=datetime.datetime(1998, 1, 1),
        todate=datetime.datetime(2000, 12, 31),
        reverse=False,
        swapcloses=True,
    )
    cerebro.adddata(data)

    cerebro.addstrategy(bt.strategies.MA_CrossOver)
    cerebro.run()

    s = backtrader_plotting.schemes.Blackly()
    b = Bokeh(style='bar',
              scheme=s,
              output_mode=_output_mode,
              merge_data_hovers=True)
    figs = cerebro.plot(b)

    assert len(figs) == 1
    assert_num_tabs(figs, 3)
    assert_num_figures(figs, 5)
import os, sys, argparse
import pandas
import backtrader
from backtrader import Cerebro
from strategies.BuyAndHold import BuyAndHold
from strategies.GoldenCross import GoldenCross

cerebro = backtrader.Cerebro()

pricesData = pandas.read_csv('SPY.csv', index_col='Date', parse_dates=True)

# initializing Cerebro
cerebro = Cerebro()
cerebro.broker.setcash(100000)

feed = backtrader.feeds.PandasData(dataname=pricesData)  # add data feed
cerebro.adddata(feed)

strategies = {"golden_cross": GoldenCross, "buy_hold": BuyAndHold}

parser = argparse.ArgumentParser()  # parse command line arguments
parser.add_argument("strategy", help="Which strategy to run", type=str)
args = parser.parse_args()

if not args.strategy in strategies:
    print("Invalid strategy, must select one of {}".format(strategies.keys()))
    sys.exit()

cerebro.addstrategy(strategy=strategies[args.strategy])
cerebro.run()
cerebro.plot()  # plot the chart
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)
cerebro = bt.Cerebro()

symbol = 'TSLA'  #CLDR'

prices = get_data(symbol, "01-01-2020", "09-15-2020")
print(prices.head())

prices = pd.read_csv(f'../datasets/data_1yr_sep/{symbol}.csv',
                     index_col='Date',
                     parse_dates=True)

print(prices.head())

# initialize the Cerebro engine
cerebro = Cerebro()
cerebro.broker.setcash(100000)

# add OHLC data feed
feed = bt.feeds.PandasData(dataname=prices)
cerebro.adddata(feed)

strategies = {
    "golden_cross": GoldenCross,
    "buy_hold": BuyHold,
    "macd": MacdStrat,
    "macd_opt": MacdStrat,
    "moving_avg": MovingAverage,
    "sar": Sar,
    "adx_macd": AdxMacd
}
Exemple #20
0
import os, sys, argparse
import pandas as pd
import backtrader as bt
from backtrader import Cerebro
#from strageties.buyHold import BuyHold
from strageties.GoldenCross import GoldenCross
cerebro = bt.Cerebro()
cerebro = Cerebro()
cerebro.broker.setcash(1000000)

spy_prices = pd.read_csv('oracle.csv', index_col='Date', parse_dates=True)
feed = bt.feeds.PandasData(dataname=spy_prices)
cerebro.adddata(feed)

cerebro.addstrategy(GoldenCross)
cerebro.run()
cerebro.plot()
Exemple #21
0
                  # ("FNV", yearly, six_month),# BBB*
                  # ("GOLD", yearly, six_month),# BBB*
                  )
    now = datetime.datetime.now()
    print(f"#################### STARTING {now.strftime('%H:%M:%S')} ##############\n\n")
    # sel_stocks = (("DECK")) # ("TTSH"), ("TSLA"))
    for devfactor in [2.0]: #[1.9, 2.0, 2.1, 2.5, 3.0]:
        print(f'%%%%%%%%%%%%% Devfactor {devfactor} %%%%%%%%%%%%%%%%')
        for yearly in [9]: #[6,7,8,9,10,11,12,15,18,20,22,25,30,32,35,40,45,50]:
            for sel_stock in sel_stocks:
                avg_roi = 0
                buy_or_sell = ""

                for strat in ['bbands1']:
                    # initialize the Cerebro engine
                    cerebro = Cerebro()
                    START_VALUE = 1000
                    cerebro.broker.setcash(START_VALUE)

                    # add OHLC data feed
                    # feed = bt.feeds.PandasData(dataname=prices)


                    strategies = {
                        "golden_cross": GoldenCross,
                        "buy_hold": BuyHold,
                        "strategy": TestStrategy,
                        "rsi_mean": RSIMean,
                        "bbands": BBands,
                        "stop_loss": ManualStopOrStopTrail,
                        "sma_cross": SmaCross,
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)
Exemple #23
0
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',
Exemple #24
0
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(Host='192.168.1.7')
    data = store.getdata(
        dataname=symbol,
        timeframe=TimeFrame.Minutes,
        compression=15,
        fromdate=datetime(
            2018, 1,
            1))  # Исторические данные по самому меньшему временному интервалу
    cerebro.adddata(data)  # Добавляем данные
    cerebro.resampledata(
        data, timeframe=TimeFrame.Days
    )  # Можно добавить больший временной интервал кратный меньшему (добавляется автоматом)
    cerebro.addstrategy(ts.PrintStatusAndBars)  # Добавляем торговую систему

    cerebro.run()  # Запуск торговой системы
    cerebro.plot(
    )  # Рисуем график. Требуется matplotlib версии 3.2.2 (pip install matplotlib==3.2.2)
Exemple #25
0
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)
Exemple #26
0
    parser.add_argument("--historical",
                        action='store_true',
                        help="only run backfill, no live")
    parser.add_argument("--no-backfill",
                        action='store_true',
                        help="skip backfill, only live")
    parser.add_argument("--loglevel",
                        default="INFO",
                        choices=['DEBUG', 'INFO', 'WARNING', 'ERROR'])
    parser.add_argument("--plot", action="store_true")
    args = parser.parse_args()

    logging.basicConfig(level=getattr(logging, args.loglevel))

    # Create a cerebro entity
    cerebro = Cerebro()

    # Set our desired cash start
    cerebro.broker.setcash(100000.0)

    # Set our sizer
    cerebro.addsizer(PercentSizer, percents=90)

    # Load the Kraken data
    pair = args.long + args.short
    datafeed = KrakenData(dataname=pair,
                          timeframe=getattr(TimeFrame, args.timeframe),
                          compression=args.compression,
                          refresh_period=args.refresh,
                          historical=args.historical,
                          backfill_start=not args.no_backfill)
Exemple #27
0
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)  # Добавляем торговую систему
Exemple #28
0
if options.data is not None:
    data_list = options.data.strip()
else:
    data_list = input("Stocks to evaluate >").strip()
    if data_list == "":
        raise ValueError("You must input tickers")
    elif not (data_list in [n.split('.')[0] for n in os.listdir("Data")]):
        raise ValueError("Tickers must part part of {}".format(
            [n.split('.')[0] for n in os.listdir("Data")]))

if options.percent is not None:
    percent = float(options.percent)
else:
    percent = float(input("Percent of money you are investing >"))

strategies_dict[strategy_key].params.ticker = data_list
strategies_dict[strategy_key].params.order_percentage = percent

cerebro = Cerebro()
cerebro.broker.set_cash(100000)

data = pd.read_csv("Data/{}.csv".format(data_list),
                   index_col="date",
                   parse_dates=True)
feed = bt.feeds.PandasData(dataname=data, name=data_list)
cerebro.adddata(feed)

cerebro.addstrategy(strategies_dict[strategy_key])
cerebro.run()
cerebro.plot()
Exemple #29
0
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)
import datetime as dt

from backtrader import Cerebro, TimeFrame
from backtrader_binance import BinanceStore

from .strategy import RSIStrategy

if __name__ == '__main___':
    cerebro = Cerebro(quicknotify=True)

    store = BinanceStore(
        api_key='YOUR_BINANCE_KEY',
        api_secret='YOUR_BINANCE_SECRET',
        coin_refer='BTC',
        coin_target='USDT')
    broker = store.getbroker()
    cerebro.setbroker(broker)

    from_date = dt.datetime.utcnow() - dt.timedelta(minutes=1261)
    data = store.getdata(
        dataname='BTCUSDT',
        fromdate=from_date,
        timeframe=TimeFrame.Minutes,
        compression=60)

    cerebro.addstrategy(RSIStrategy)
    cerebro.adddata(data)
    cerebro.run()