Esempio n. 1
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()
Esempio n. 2
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)
Esempio n. 3
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)
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()
Esempio n. 5
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)
Esempio n. 6
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
Esempio n. 7
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)
Esempio n. 8
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)
Esempio n. 9
0
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
Esempio n. 10
0
    strats = cerebro.optstrategy(
        MacdStrat,
        fast=range(8, 16, 1),
        slow=range(16, 32, 2),
    )
    cerebro.run(maxcpus=1)
    best_fast, best_slow, best_roi = MacdStrat.show_max()
    print('Best params: fast={}, slow={}, roi={}'.format(
        best_fast, best_slow, best_roi))
    """
    elif strategy == "macd":
        cerebro.addstrategy(strategy=strategies[strategy],fast=15, slow=30)
        cerebro.run()
        cerebro.plot()
    """

elif strategy == "moving_avg_opt":
    strats = cerebro.optstrategy(MovingAverage,
                                 fast=range(8, 16, 1),
                                 slow=range(16, 32, 2),
                                 ticker=symbol)
    cerebro.run(maxcpus=1)
    best_fast, best_slow, best_roi = MovingAverage.show_max()
    print('Best params: fast={}, slow={}, roi={}'.format(
        best_fast, best_slow, best_roi))

else:
    cerebro.addstrategy(strategy=strategies[strategy], ticker=symbol)
    cerebro.run()
    cerebro.plot()
Esempio n. 11
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()
Esempio n. 12
0
        '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',
                            'TQBR.LKOH',
                        ))  # Добавляем торговую систему по двум тикерам
    cerebro.addstrategy(
        ts.PrintStatusAndBars,
        name="All Tickers")  # Добавляем торговую систему по всем тикерам

    cerebro.run()  # Запуск торговой системы
    # cerebro.plot()  # Рисуем график. Требуется matplotlib версии 3.2.2 (pip install matplotlib==3.2.2)
Esempio n. 13
0
    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)
    cerebro.adddata(datafeed)

    # Add the strategies to run
    cerebro.addstrategy(TestStrategy)

    # Run the backtest
    result = cerebro.run()

    # Plot the result
    if args.plot:
        cerebro.plot()
Esempio n. 14
0
                    }

                    # parse command line arguments
                    parser = argparse.ArgumentParser()
                    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()

                    # if args.strategy == 'bbands':
                    if strat == 'bbands1':
                        # cerebro.addstrategy(strategy=strategies[args.strategy],
                        cerebro.addstrategy(strategy=BBands,
                                            BBandsperiod=yearly,
                                            DevFactor=devfactor)
                    else:
                        cerebro.addstrategy(strategy=strategies[args.strategy])
                        # cerebro.addstrategy(strategy=GoldenCross)

                    ## Analyzers
                    cerebro.addanalyzer(bt.analyzers.SharpeRatio, _name='sharpe_ratio')
                    cerebro.addanalyzer(bt.analyzers.Returns, _name='returns')
                    cerebro.addanalyzer(bt.analyzers.DrawDown, _name='drawdown')

                    # Add a FixedSize sizer according to the stake

                    cerebro.broker.setcommission(commission=0.000)  # 0.5% of the operation value
                    cerebro.addsizer(bt.sizers.AllInSizer)
Esempio n. 15
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()
Esempio n. 16
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)
Esempio n. 17
0
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()