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
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
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()
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 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
"golden_cross": GoldenCross, "buy_hold": BuyHold, "macd": MacdStrat, "macd_opt": MacdStrat, "moving_avg": MovingAverage, "sar": Sar, "adx_macd": AdxMacd } #check against - golden_cross, buy_hold, macd, moving_avg, sar strategy = "sar" if strategy == "golden_cross_opt": cerebro.optstrategy( GoldenCross, fast=range(40, 60, 10), slow=range(160, 220, 20), #fast=range(10, 30, 10), slow=range(50, 90, 20), ) cerebro.run(maxcpus=1) GoldenCross.show_max() elif strategy == "macd_opt": 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)) """