Strategy PnL is 0 when using optimizer
-
Hello again,
Now that the data can properly be analised (see https://community.backtrader.com/topic/2484/error-with-mt5-csv-file-read), I tried to run the Optimizer provided by Backtest Rookies, but it yielded no results:
Results: Ordered by Profit: Period: 14, PnL: 0.0 Period: 15, PnL: 0.0 Period: 16, PnL: 0.0 Period: 17, PnL: 0.0 Period: 18, PnL: 0.0 Period: 19, PnL: 0.0 Period: 20, PnL: 0.0
This is code of the optimizer that I'm trying to run:
import backtrader as bt from datetime import datetime class firstStrategy(bt.Strategy): params = ( ('period', 21), ) def __init__(self): self.startcash = self.broker.getvalue() self.rsi = bt.indicators.RSI_SMA(self.data.close, period=self.params.period) def next(self): if not self.position: if self.rsi < 30: self.buy(size=100) else: if self.rsi > 70: self.sell(size=100) if __name__ == '__main__': # Variable for our starting cash startcash = 10000 # Create an instance of cerebro cerebro = bt.Cerebro(optreturn=False) # Add our strategy cerebro.optstrategy(firstStrategy, period=range(14, 21)) data = bt.feeds.MT4CSVData( dataname='ETHUSD.csv', fromdate=datetime(2019, 5, 1, 0, 0), todate=datetime(2020, 5, 1, 0, 0), timeframe=bt.TimeFrame.Minutes, compression=120, ) # Add the data to Cerebro cerebro.adddata(data) # Set our desired cash start cerebro.broker.setcash(startcash) # Run over everything opt_runs = cerebro.run() # Generate results list final_results_list = [] for run in opt_runs: for strategy in run: value = round(strategy.broker.get_value(), 2) PnL = round(value - startcash, 2) period = strategy.params.period final_results_list.append([period, PnL]) by_PnL = sorted(final_results_list, key=lambda x: x[1], reverse=True) print('Results: Ordered by Profit:') for result in by_PnL: print('Period: {}, PnL: {}'.format(result[0], result[1]))
It can't be a problem with the data, because if I run the analyzer, it works. I've tried to change the code, but it only broke it even more. Does anyone have any lead?
-
Try to increase your cash.
-
@Eduardo-Menges-Mattje said in Strategy PnL is 0 when using optimizer:
Backtest Rookies
Are they asking for money to help with their scripts?
-
@vladisld Increasing the startcash to 100000 seems to work. Thanks again.
@ab_trader No, the scripts and tutorials that they post are free. I originally used TradingView to test my strategies, but there is no optimizer in it. After some googling (yesterday), I found their site, and now I'm experimenting with Backtrader.
-
@Eduardo-Menges-Mattje I know that their scripts are free. The weird thing is that you ask question here, but not on their website. Which would be logical using their scripts.
-
@ab_trader Since they didn't reply comments from 2018 asking about errors, I figured that I could get better help from here.