Hi, I'm trying to add a lot of data feed to backtrader, using cerebro.plot() it displays fine, but using backtrader_plotting to output html, I'm getting some performance exceptions, is there a way to fix it?
Thank you!
except:
/backtrader_demo/conda37/lib/python3.7/site-packages/backtrader_plotting/bokeh/bokeh.py:468: PerformanceWarning: DataFrame is highly fragmented. This is usually the result of calling `frame.insert` many times, which has poor performance. Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`
strategydf[source_id] = dataline
code:
import datetime
import time
import backtrader as bt
import backtrader.feeds as btfeed
import pandas as pd
from backtrader_plotting import Bokeh
from backtrader_plotting.schemes import Tradimo
tickers = ['AAPL', 'TSLA', 'ARDX', 'SNDL', 'PHUN', 'ABUS', 'AAL', 'AMD', 'NVDA', 'BABA', 'BAC', 'PBR', 'AMC']
period1 = int(time.mktime(datetime.datetime(2020, 1, 1, 23, 59).timetuple()))
period2 = int(time.mktime(datetime.datetime(2021, 12, 31, 23, 59).timetuple()))
interval = '1d' # 1d, 1m
print('>> download data')
for ticker in tickers:
query_string = f'https://query1.finance.yahoo.com/v7/finance/download/{ticker}?period1={period1}&period2={period2}&interval={interval}&events=history&includeAdjustedClose=true'
df = pd.read_csv(query_string)
# print(df)
df.to_csv('{name}.csv'.format(name=ticker))
time.sleep(2)
print(ticker)
print('>> add data')
cerebro = bt.Cerebro()
for ticker in tickers:
# data = btfeeds.YahooFinanceCSVData(dataname='AAPL.csv')
data = btfeed.GenericCSVData(
dataname='{name}.csv'.format(name=ticker),
fromdate=datetime.datetime(2020, 1, 1),
todate=datetime.datetime(2021, 12, 31),
nullvalue=0.0,
dtformat=('%Y-%m-%d'),
# ,Date,Open,High,Low,Close,Adj Close,Volume
datetime=1,
high=3,
low=4,
open=2,
close=5,
volume=7,
openinterest=-1
)
cerebro.adddata(data) # a 'name' parameter can be passed for plotting purposes
print('>> run')
cerebro.run()
# cerebro.plot() # normal to plot
# export to html
b = Bokeh(style='bar', filename='plot.html', scheme=Tradimo(), output_mode='save')
cerebro.plot(b)
print('>> done')