Ejemplo n.º 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")
Ejemplo n.º 2
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()
Ejemplo n.º 3
0
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()
Ejemplo n.º 4
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))
Ejemplo n.º 5
0
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
Ejemplo 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
Ejemplo n.º 7
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)
Ejemplo 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)
Ejemplo n.º 9
0
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)  # Добавляем торговую систему

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