For code/output blocks: Use ``` (aka backtick or grave accent) in a single line before and after the block. See: http://commonmark.org/help/
Multiple stock visualization using backatrader_plotting
-
Currently, I am backtesting 600 stocks using backtrader, but only 100 stocks have actual trades. When using backtrader_plotting for visualization, all stocks' charts are displayed, including those that have not been traded. This makes the generated file very large and I cannot focus on the stocks that have been traded. I want to only display the stocks that have been traded during the backtest process. This issue has been bothering me for a long time. Can anyone help me with how to achieve my requirement?
if __name__ == "__main__": all_data = pd.read_csv('/output_data_luky8_ocfps.csv') all_data = all_data[(all_data.datetime > '2018-01-01' ) & (all_data.datetime < '2022-01-01')] cerebro = bt.Cerebro() cerebro.addstrategy(MyStrategy) codes = np.unique(all_data.ts_code) random.shuffle(codes) for code in codes: feed = Addmoredata(dataname = get_data(all_data, code), name = code) cerebro.adddata(feed) startcash = 1000000 cerebro.broker.setcash(startcash) cerebro.broker.setcommission(commission=0.001) cerebro.addanalyzer(bt.analyzers.SharpeRatio, _name = 'SharpeRatio') cerebro.addanalyzer(bt.analyzers.DrawDown, _name='DW') cerebro.addanalyzer(bt.analyzers.TimeReturn, timeframe=bt.TimeFrame.Years) cerebro.addanalyzer(TradeAnalyzer) #return_df = pd.DataFrame(cerebro.addanalyzer(bt.analyzers.TimeReturn, timeframe=bt.TimeFrame.Days).items(), columns=['Date', 'DateValue']) results = cerebro.run() strat = results[0] print('SR:', strat.analyzers.SharpeRatio.get_analysis()) print('DW:', strat.analyzers.DW.get_analysis()) tret_analyzer = strat.analyzers.getbyname('timereturn') print(tret_analyzer.get_analysis()) portvalue = cerebro.broker.getvalue() pnl = portvalue - startcash cerebro.addwriter(bt.WriterFile, out = 'bt_log.csv', csv =True) b = Bokeh(style = 'bar', plot_mode='single', scheme=Tradimo()) cerebro.plot(b)
-
anyone help?