Skip to content

Commit f52b88b

Browse files
committed
Strategy parameters change is now working well!
1 parent 18b0659 commit f52b88b

File tree

3 files changed

+45
-23
lines changed

3 files changed

+45
-23
lines changed

Controller.py

Lines changed: 29 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,9 @@ class Controller:
4242

4343
def __init__(self):
4444

45+
# Init attributes
46+
self.strategyParameters = {}
47+
4548
# create a "Cerebro" engine instance
4649
self.cerebro = CerebroEnhanced()
4750

@@ -104,21 +107,44 @@ def addStrategy(self, strategyName):
104107

105108
#For now, only one strategy is allowed at a time
106109
self.cerebro.clearStrategies()
110+
111+
# Reset strategy parameters
112+
self.strategyParameters = {}
107113

108114
mod = __import__(strategyName, fromlist=[strategyName]) # first strategyName is the file name, and second (fromlist) is the class name
109115
self.strategyClass = getattr(mod, strategyName) # class name in the file
110116

111117
# Add strategy parameters
112-
self.interface.fillStrategyParameters(self.strategyClass.params)
118+
self.interface.fillStrategyParameters(self.strategyClass)
119+
120+
pass
121+
122+
def strategyParametersChanged(self, lineEdit, parameterName, parameterOldValue):
123+
124+
# todo something
125+
if len(lineEdit.text()) > 0:
113126

114-
# Add strategy to the cerebro
115-
self.cerebro.addstrategy(self.strategyClass)
127+
param = self.strategyClass.params._get(self.strategyClass.params,parameterName)
128+
129+
if isinstance(param, int):
130+
self.strategyParameters[parameterName] = int(lineEdit.text())
131+
elif isinstance(param, float):
132+
self.strategyParameters[parameterName] = int(lineEdit.text())
133+
else:
134+
self.strategyParameters[parameterName] = lineEdit.text()
116135

117136
pass
118137

138+
def strategyParametersSave(self, parameterName, parameterValue):
139+
self.strategyParameters[parameterName] = parameterValue
140+
pass
119141

120142
def run(self):
121143

144+
# Add strategy here to get modified parameters
145+
test = self.strategyParameters
146+
self.strategyIndex = self.cerebro.addstrategy(self.strategyClass, test)
147+
122148
# Wallet Management : reset between each run
123149
self.cerebro.broker.setcash(self.startingcash)
124150
self.wallet.reset(self.startingcash)
@@ -165,10 +191,8 @@ def displayStrategyResults(self):
165191
self.interface.displayPnL( pd.DataFrame(pnl_data) )
166192

167193
pass
168-
169194

170195
def displayUI(self):
171-
172196
self.interface.show()
173197
pass
174198

strategies/ichimokuStrat1.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,8 +41,14 @@ def notify_order(self, order):
4141
if not order.alive():
4242
self.order = None # indicate no order is pending
4343

44-
def __init__(self):
44+
def __init__(self, parameters = None):
4545

46+
# Set UI modified parameters
47+
if parameters != None:
48+
for parameterName, parameterValue in parameters.items():
49+
setattr(self.params, parameterName, parameterValue)
50+
51+
# Ichi indicator
4652
self.ichi = bt.indicators.Ichimoku(self.datas[0],
4753
tenkan=self.params.tenkan,
4854
kijun=self.params.kijun,

userInterface.py

Lines changed: 9 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -544,18 +544,23 @@ def createTransactionsUI(self, trades):
544544

545545
pass
546546

547-
def fillStrategyParameters(self, parameters):
547+
def fillStrategyParameters(self, strategy):
548548

549549
# Rest widget rows
550550
for indexRow in range(self.strategyTesterUI.parametersLayout.rowCount()):
551551
self.strategyTesterUI.parametersLayout.removeRow(0)
552552

553553
# Insert parameters
554554
row = 0
555-
for parameterName, parameterValue in parameters._getitems():
555+
for parameterName, parameterValue in strategy.params._getitems():
556556
label = QtWidgets.QLabel(parameterName)
557557
lineEdit = QtWidgets.QLineEdit(str(parameterValue))
558-
lineEdit.textChanged.connect(functools.partial(self.parameterChanged, lineEdit, parameters, parameterName, parameterValue))
558+
559+
# Save the parameter to inject it in the addStrategy method
560+
self.controller.strategyParametersSave(parameterName, parameterValue)
561+
562+
# Connect the parameter changed slot
563+
lineEdit.textChanged.connect(functools.partial(self.controller.strategyParametersChanged, lineEdit, parameterName, parameterValue))
559564

560565
self.strategyTesterUI.parametersLayout.addRow(label, lineEdit )
561566
row = row + 1
@@ -564,18 +569,5 @@ def fillStrategyParameters(self, parameters):
564569
pass
565570

566571

567-
def parameterChanged(self, lineEdit, parameters, parameterName, parameterOldValue):
568-
569-
# todo something
570-
if len(lineEdit.text()) > 0:
571-
572-
try:
573-
setattr(parameters,parameterName,float(lineEdit.text()))
574-
except ValueError:
575-
try:
576-
setattr(parameters,parameterName,int(lineEdit.text()))
577-
except ValueError:
578-
setattr(parameters,parameterName,lineEdit.text())
579-
580-
pass
572+
581573

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