@@ -42,24 +42,35 @@ class Controller:
42
42
43
43
def __init__ (self ):
44
44
45
+ # init variables
46
+ self .data = None
47
+ self .startingcash = 10000.0
48
+
45
49
# Init attributes
46
50
self .strategyParameters = {}
47
51
48
- # create a "Cerebro" engine instance
49
- self .cerebro = CerebroEnhanced ()
50
-
51
52
# Global is here to update the Ui in observers easily, if you find a better way, don't hesistate to tell me (Skinok)
52
53
global interface
53
54
interface = Ui .UserInterface (self )
54
55
self .interface = interface
55
56
56
- # Strategie testing wallet (a little bit different from backtrader broker class)
57
- self .startingcash = 10000.0
58
-
59
57
global wallet
60
58
wallet = Wallet (self .startingcash )
61
59
self .wallet = wallet
62
60
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
+
63
74
# Then add obersers and analyzers
64
75
self .cerebro .addanalyzer (bt .analyzers .TradeAnalyzer , _name = "ta" )
65
76
@@ -80,9 +91,9 @@ def __init__(self):
80
91
# Add an observer to watch the strat running and update the progress bar values
81
92
self .cerebro .addobserver ( SkinokObserver )
82
93
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
86
97
87
98
pass
88
99
@@ -97,6 +108,7 @@ def loadData(self, dataPath):
97
108
# Pass it to the backtrader datafeed and add it to the cerebro
98
109
self .data = bt .feeds .PandasData (dataname = self .dataframe , timeframe = bt .TimeFrame .Minutes )
99
110
111
+ # Add data to cerebro
100
112
self .cerebro .adddata (self .data ) # Add the data feed
101
113
102
114
# Draw charts based on input data
@@ -146,6 +158,9 @@ def strategyParametersSave(self, parameterName, parameterValue):
146
158
147
159
def run (self ):
148
160
161
+ #Reset cerebro internal variables
162
+ self .resetCerebro ()
163
+
149
164
# UI label
150
165
self .interface .strategyTesterUI .runLabel .setText ("Running strategy..." )
151
166
@@ -202,7 +217,8 @@ def displayStrategyResults(self):
202
217
pnl_data ['time' ] = self .dataframe .index
203
218
204
219
# draw charts
205
- self .interface .displayPnL ( pd .DataFrame (pnl_data ) )
220
+ df = pd .DataFrame (pnl_data )
221
+ self .interface .displayPnL ( df )
206
222
207
223
pass
208
224
0 commit comments