Skip to content

Commit ff675e3

Browse files
committed
Rework initialization to clear cerebro between runs
1 parent 121fe92 commit ff675e3

File tree

2 files changed

+33
-15
lines changed

2 files changed

+33
-15
lines changed

Controller.py

Lines changed: 26 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -42,24 +42,35 @@ class Controller:
4242

4343
def __init__(self):
4444

45+
# init variables
46+
self.data = None
47+
self.startingcash = 10000.0
48+
4549
# Init attributes
4650
self.strategyParameters = {}
4751

48-
# create a "Cerebro" engine instance
49-
self.cerebro = CerebroEnhanced()
50-
5152
# Global is here to update the Ui in observers easily, if you find a better way, don't hesistate to tell me (Skinok)
5253
global interface
5354
interface = Ui.UserInterface(self)
5455
self.interface = interface
5556

56-
# Strategie testing wallet (a little bit different from backtrader broker class)
57-
self.startingcash = 10000.0
58-
5957
global wallet
6058
wallet = Wallet(self.startingcash )
6159
self.wallet = wallet
6260

61+
self.resetCerebro()
62+
63+
# Once everything is created, initialize data
64+
self.interface.initialize()
65+
66+
pass
67+
68+
69+
def resetCerebro(self):
70+
71+
# create a "Cerebro" engine instance
72+
self.cerebro = CerebroEnhanced()
73+
6374
# Then add obersers and analyzers
6475
self.cerebro.addanalyzer(bt.analyzers.TradeAnalyzer, _name = "ta")
6576

@@ -80,9 +91,9 @@ def __init__(self):
8091
# Add an observer to watch the strat running and update the progress bar values
8192
self.cerebro.addobserver( SkinokObserver )
8293

83-
# Once everything is created, initialize data
84-
self.interface.initialize()
85-
94+
# Add data to cerebro
95+
if self.data is not None:
96+
self.cerebro.adddata(self.data) # Add the data feed
8697

8798
pass
8899

@@ -97,6 +108,7 @@ def loadData(self, dataPath):
97108
# Pass it to the backtrader datafeed and add it to the cerebro
98109
self.data = bt.feeds.PandasData(dataname=self.dataframe, timeframe=bt.TimeFrame.Minutes)
99110

111+
# Add data to cerebro
100112
self.cerebro.adddata(self.data) # Add the data feed
101113

102114
# Draw charts based on input data
@@ -146,6 +158,9 @@ def strategyParametersSave(self, parameterName, parameterValue):
146158

147159
def run(self):
148160

161+
#Reset cerebro internal variables
162+
self.resetCerebro()
163+
149164
# UI label
150165
self.interface.strategyTesterUI.runLabel.setText("Running strategy...")
151166

@@ -202,7 +217,8 @@ def displayStrategyResults(self):
202217
pnl_data['time'] = self.dataframe.index
203218

204219
# draw charts
205-
self.interface.displayPnL( pd.DataFrame(pnl_data) )
220+
df = pd.DataFrame(pnl_data)
221+
self.interface.displayPnL( df )
206222

207223
pass
208224

userInterface.py

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -65,12 +65,7 @@ def __init__(self,controller):
6565
# Set width/height of QSplitter
6666
self.app.setStyleSheet(qdarkstyle.load_stylesheet_pyqt5())
6767

68-
# Docks
69-
self.createDocks()
70-
self.createUIs()
7168

72-
# Enable run button
73-
self.strategyTesterUI.runBacktestPB.setEnabled(False)
7469

7570
pass
7671

@@ -391,6 +386,13 @@ def createFinplotWindow(self):
391386
#
392387
def initialize(self):
393388

389+
# Docks
390+
self.createDocks()
391+
self.createUIs()
392+
393+
# Enable run button
394+
self.strategyTesterUI.runBacktestPB.setEnabled(False)
395+
394396
self.strategyTesterUI.initialize()
395397

396398
pass

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy