Tweaking code parameters always gives the same portfolio value
-
Hi there guys, i'm new to backtrader, i have some simple code and no matter what i change i even added a new 'if' condition for the selling in the strategy and the final portfolio value it's always the same. For instance if i change my RSI indicator time period from 14 to 4 the final portfolio value it's still the same. There must been something that i'm doing wrong. Could you help me?
the .csv file it's an historical data of ethusd price that i've dowloaded from Binance with the API. The only thing that i modify of them it's that i convert the timestamps to date.
from __future__ import (absolute_import, division, print_function, unicode_literals) import datetime import backtrader import backtrader.feeds as btfeeds #from Strategy_Example import TestStrategy #from Strategy_Example import BuyAndSell from Strategy_Example import RSIStrategy if __name__ == '__main__': cerebro = backtrader.Cerebro() cerebro.broker.set_cash(100000) data = btfeeds.GenericCSVData( dataname='ETHUSDT-1HOUR.csv', fromdate=datetime.datetime(2021, 1, 1), todate=datetime.datetime(2021, 1, 10), nullvalue=0.0, timeframe=backtrader.TimeFrame.Minutes, compression=1, dtformat=('%Y-%m-%d %H:%M:%S'), datetime=0, high=1, low=2, open=3, close=4, volume=5, openinterest=-1 ) cerebro.adddata(data) cerebro.addstrategy(RSIStrategy) print('Starting Portfolio Value: %.4f' % cerebro.broker.getvalue()) cerebro.run() print('Final Portfolio Value: %.4f' % cerebro.broker.getvalue()) cerebro.plot(iplot=False)
this is the strategy:
class RSIStrategy(bt.Strategy): def log(self, txt, dt=None): ''' Logging function fot this strategy''' dt = dt or self.datas[0].datetime.date(0) print('%s, %s' % (dt.isoformat(), txt)) def __init__(self): # Keep a reference to the "close" line in the data[0] dataseries self.dataclose = self.datas[0].close #RSI indicator self.rsi = bt.talib.RSI(self.data, period = 4) self.buyprice = 0 self.stoploss = self.buyprice * 0.99 def next(self): if (self.rsi > 70 and self.position) or (self.dataclose[0] <= self.stoploss and self.position): self.close() self.log('SELL CREATE, %.2f' % self.dataclose[0]) if self.rsi < 30 and not self.position: self.buy(size = 1) self.log('BUY CREATE, %.2f' % self.dataclose[0]) self.buyprice = self.dataclose[0]
and this are two results that i'm getting from changing the RSI time period:
First time period 14:
Starting Portfolio Value: 100000.0000
2021-01-01, BUY CREATE, 742.15
2021-01-01, SELL CREATE, 736.90
2021-01-01, BUY CREATE, 735.65
2021-01-01, SELL CREATE, 740.69
2021-01-01, BUY CREATE, 737.01
2021-01-01, SELL CREATE, 730.17
2021-01-01, BUY CREATE, 726.13
2021-01-01, SELL CREATE, 725.94
2021-01-02, BUY CREATE, 726.38
2021-01-02, SELL CREATE, 731.98
2021-01-02, BUY CREATE, 728.90
2021-01-02, SELL CREATE, 736.50
2021-01-02, BUY CREATE, 757.27
2021-01-02, SELL CREATE, 771.98
2021-01-02, BUY CREATE, 779.28
2021-01-02, SELL CREATE, 774.10
2021-01-02, BUY CREATE, 768.50
2021-01-02, SELL CREATE, 780.63
2021-01-03, BUY CREATE, 771.85
2021-01-03, SELL CREATE, 775.72
2021-01-03, BUY CREATE, 794.40
2021-01-03, SELL CREATE, 804.99
2021-01-03, BUY CREATE, 883.37
2021-01-03, SELL CREATE, 929.98
2021-01-03, BUY CREATE, 922.99
2021-01-03, SELL CREATE, 930.75
2021-01-03, BUY CREATE, 964.07
2021-01-04, SELL CREATE, 982.21
2021-01-04, BUY CREATE, 1052.02
2021-01-04, SELL CREATE, 977.00
2021-01-04, BUY CREATE, 1018.31
2021-01-04, SELL CREATE, 1017.00
2021-01-04, BUY CREATE, 1019.11
2021-01-04, SELL CREATE, 1022.53
2021-01-04, BUY CREATE, 1001.62
2021-01-04, SELL CREATE, 1018.13
2021-01-04, BUY CREATE, 1072.02
2021-01-05, SELL CREATE, 1021.02
2021-01-05, BUY CREATE, 1022.87
2021-01-05, SELL CREATE, 1053.59
2021-01-05, BUY CREATE, 1023.55
2021-01-05, SELL CREATE, 1036.65
2021-01-05, BUY CREATE, 1063.29
2021-01-05, SELL CREATE, 1097.57
2021-01-05, BUY CREATE, 1082.05
2021-01-05, SELL CREATE, 1108.65
2021-01-05, BUY CREATE, 1086.97
2021-01-06, SELL CREATE, 1088.82
2021-01-06, BUY CREATE, 1094.23
2021-01-06, SELL CREATE, 1121.42
2021-01-06, BUY CREATE, 1128.42
2021-01-06, SELL CREATE, 1145.67
2021-01-06, BUY CREATE, 1176.00
2021-01-06, SELL CREATE, 1193.74
2021-01-06, BUY CREATE, 1177.97
2021-01-06, SELL CREATE, 1201.50
2021-01-06, BUY CREATE, 1189.52
2021-01-07, SELL CREATE, 1208.56
2021-01-07, BUY CREATE, 1197.46
2021-01-07, SELL CREATE, 1203.80
2021-01-07, BUY CREATE, 1209.98
2021-01-07, SELL CREATE, 1232.34
2021-01-07, BUY CREATE, 1231.57
2021-01-07, SELL CREATE, 1237.15
2021-01-07, BUY CREATE, 1245.85
2021-01-08, SELL CREATE, 1171.11
2021-01-08, BUY CREATE, 1143.43
2021-01-08, SELL CREATE, 1178.48
2021-01-08, BUY CREATE, 1226.85
2021-01-08, SELL CREATE, 1263.57
2021-01-08, BUY CREATE, 1232.30
2021-01-08, SELL CREATE, 1183.91
2021-01-08, BUY CREATE, 1204.04
2021-01-09, SELL CREATE, 1209.52
2021-01-09, BUY CREATE, 1195.99
2021-01-09, SELL CREATE, 1211.72
2021-01-09, BUY CREATE, 1214.00
2021-01-09, SELL CREATE, 1221.09
2021-01-09, BUY CREATE, 1221.95
2021-01-09, SELL CREATE, 1241.08
2021-01-09, BUY CREATE, 1270.37
2021-01-09, SELL CREATE, 1302.65
Final Portfolio Value: 100278.4700second time period 4:
Starting Portfolio Value: 100000.0000
2021-01-01, BUY CREATE, 742.15
2021-01-01, SELL CREATE, 736.90
2021-01-01, BUY CREATE, 735.65
2021-01-01, SELL CREATE, 740.69
2021-01-01, BUY CREATE, 737.01
2021-01-01, SELL CREATE, 730.17
2021-01-01, BUY CREATE, 726.13
2021-01-01, SELL CREATE, 725.94
2021-01-02, BUY CREATE, 726.38
2021-01-02, SELL CREATE, 731.98
2021-01-02, BUY CREATE, 728.90
2021-01-02, SELL CREATE, 736.50
2021-01-02, BUY CREATE, 757.27
2021-01-02, SELL CREATE, 771.98
2021-01-02, BUY CREATE, 779.28
2021-01-02, SELL CREATE, 774.10
2021-01-02, BUY CREATE, 768.50
2021-01-02, SELL CREATE, 780.63
2021-01-03, BUY CREATE, 771.85
2021-01-03, SELL CREATE, 775.72
2021-01-03, BUY CREATE, 794.40
2021-01-03, SELL CREATE, 804.99
2021-01-03, BUY CREATE, 883.37
2021-01-03, SELL CREATE, 929.98
2021-01-03, BUY CREATE, 922.99
2021-01-03, SELL CREATE, 930.75
2021-01-03, BUY CREATE, 964.07
2021-01-04, SELL CREATE, 982.21
2021-01-04, BUY CREATE, 1052.02
2021-01-04, SELL CREATE, 977.00
2021-01-04, BUY CREATE, 1018.31
2021-01-04, SELL CREATE, 1017.00
2021-01-04, BUY CREATE, 1019.11
2021-01-04, SELL CREATE, 1022.53
2021-01-04, BUY CREATE, 1001.62
2021-01-04, SELL CREATE, 1018.13
2021-01-04, BUY CREATE, 1072.02
2021-01-05, SELL CREATE, 1021.02
2021-01-05, BUY CREATE, 1022.87
2021-01-05, SELL CREATE, 1053.59
2021-01-05, BUY CREATE, 1023.55
2021-01-05, SELL CREATE, 1036.65
2021-01-05, BUY CREATE, 1063.29
2021-01-05, SELL CREATE, 1097.57
2021-01-05, BUY CREATE, 1082.05
2021-01-05, SELL CREATE, 1108.65
2021-01-05, BUY CREATE, 1086.97
2021-01-06, SELL CREATE, 1088.82
2021-01-06, BUY CREATE, 1094.23
2021-01-06, SELL CREATE, 1121.42
2021-01-06, BUY CREATE, 1128.42
2021-01-06, SELL CREATE, 1145.67
2021-01-06, BUY CREATE, 1176.00
2021-01-06, SELL CREATE, 1193.74
2021-01-06, BUY CREATE, 1177.97
2021-01-06, SELL CREATE, 1201.50
2021-01-06, BUY CREATE, 1189.52
2021-01-07, SELL CREATE, 1208.56
2021-01-07, BUY CREATE, 1197.46
2021-01-07, SELL CREATE, 1203.80
2021-01-07, BUY CREATE, 1209.98
2021-01-07, SELL CREATE, 1232.34
2021-01-07, BUY CREATE, 1231.57
2021-01-07, SELL CREATE, 1237.15
2021-01-07, BUY CREATE, 1245.85
2021-01-08, SELL CREATE, 1171.11
2021-01-08, BUY CREATE, 1143.43
2021-01-08, SELL CREATE, 1178.48
2021-01-08, BUY CREATE, 1226.85
2021-01-08, SELL CREATE, 1263.57
2021-01-08, BUY CREATE, 1232.30
2021-01-08, SELL CREATE, 1183.91
2021-01-08, BUY CREATE, 1204.04
2021-01-09, SELL CREATE, 1209.52
2021-01-09, BUY CREATE, 1195.99
2021-01-09, SELL CREATE, 1211.72
2021-01-09, BUY CREATE, 1214.00
2021-01-09, SELL CREATE, 1221.09
2021-01-09, BUY CREATE, 1221.95
2021-01-09, SELL CREATE, 1241.08
2021-01-09, BUY CREATE, 1270.37
2021-01-09, SELL CREATE, 1302.65
Final Portfolio Value: 100278.4700i have two files in the same working directory. One for the Strategies and other for the main code. I'm using Spyder IDE version: 4.1.5
-
@whitealucard I'm not sure if this is it, but for the
talib
version of RSI, shouldn't the argument betimeperiod
and notperiod
?