+ if len(selectedItems) > 4:
+ dateTradeOpen = selectedItems[2].text()
+ dateTradeClose = selectedItems[3].text()
+
+ self.fpltWindow[self.current_timeframe].zoomTo(dateTradeOpen,dateTradeClose)
+
pass
#########
@@ -326,13 +343,13 @@ def createOrdersUI(self):
self.orderTableWidget.setHorizontalHeaderLabels( labels )
self.orderTableWidget.horizontalHeader().setStretchLastSection(True)
- self.orderTableWidget.horizontalHeader().setSectionResizeMode(QtWidgets.QHeaderView.Stretch)
+ self.orderTableWidget.horizontalHeader().setSectionResizeMode(QtWidgets.QHeaderView.ResizeMode.Stretch)
self.orderTableWidget.setStyleSheet("alternate-background-color: #AAAAAA;background-color: #CCCCCC;")
self.orderTableWidget.setAlternatingRowColors(True)
self.orderTableWidget.setSortingEnabled(True)
- self.orderTableWidget.setSelectionBehavior(QtWidgets.QAbstractItemView.SelectRows)
- self.orderTableWidget.setEditTriggers(QtWidgets.QAbstractItemView.NoEditTriggers)
+ self.orderTableWidget.setSelectionBehavior(QtWidgets.QAbstractItemView.SelectionBehavior.SelectRows)
+ self.orderTableWidget.setEditTriggers(QtWidgets.QAbstractItemView.EditTrigger.NoEditTriggers)
self.dock_orders.addWidget(self.orderTableWidget)
@@ -359,24 +376,15 @@ def fillOrdersUI(self, orders):
pass
- #########
- # UI parameters for testing stategies
- #########
- def createLoadDataFilesUI(self):
-
- self.loadDataFileUI = loadDataFilesUI.LoadDataFilesUI(self.controller, self.win)
- self.loadDataFileUI.hide()
- pass
-
#########
# UI parameters for testing stategies
#########
def createStrategyTesterUI(self):
- self.strategyTesterUI = strategyTesterUI.StrategyTesterUI(self.controller)
+ self.strategyTesterUI = strategyTesterUI.StrategyTesterUI(self.controller, self.win)
self.dock_strategyTester.addWidget(self.strategyTesterUI)
- self.strategyResultsUI = strategyResultsUI.StrategyResultsUI(self.controller)
+ self.strategyResultsUI = strategyResultsUI.StrategyResultsUI(self.controller, self.win)
self.dock_strategyResultsUI.addWidget(self.strategyResultsUI)
#
@@ -395,7 +403,7 @@ def createStrategyTesterUI(self):
#########
def createSummaryUI(self):
- self.summaryTableWidget = QtWidgets.QTableWidget(self.strategyResultsUI.SummaryGB)
+ self.summaryTableWidget = self.strategyResultsUI.summaryTableWidget
self.summaryTableWidget.setColumnCount(2)
@@ -403,7 +411,7 @@ def createSummaryUI(self):
self.summaryTableWidget.horizontalHeader().hide()
self.summaryTableWidget.setShowGrid(False)
- self.strategyResultsUI.SummaryGB.layout().addWidget(self.summaryTableWidget)
+ self.summaryTableWidget.setStyleSheet("QTableWidget { border: 0; }")
pass
@@ -415,36 +423,52 @@ def fillSummaryUI(self, brokerCash, brokerValue, tradeAnalysis):
self.summaryTableWidget.setRowCount(8)
self.summaryTableWidget.setItem(0,0,QtWidgets.QTableWidgetItem("Cash"))
- self.summaryTableWidget.setItem(0,1,QtWidgets.QTableWidgetItem(str(brokerCash)))
+ item = QtWidgets.QTableWidgetItem(str(round(brokerCash,2)))
+ item.setTextAlignment(QtCore.Qt.AlignmentFlag.AlignHCenter)
+ self.summaryTableWidget.setItem(0,1,item)
self.summaryTableWidget.setItem(1,0,QtWidgets.QTableWidgetItem("Value"))
- self.summaryTableWidget.setItem(1,1,QtWidgets.QTableWidgetItem(str(brokerValue)))
+ item = QtWidgets.QTableWidgetItem(str(round(brokerValue,2)))
+ item.setTextAlignment(QtCore.Qt.AlignmentFlag.AlignHCenter)
+ self.summaryTableWidget.setItem(1,1,item)
# if there are some trades
if len(tradeAnalysis) > 1:
self.summaryTableWidget.setItem(2,0,QtWidgets.QTableWidgetItem("Profit total"))
- self.summaryTableWidget.setItem(2,1,QtWidgets.QTableWidgetItem(str(tradeAnalysis["pnl"]["net"]["total"])))
+ item = QtWidgets.QTableWidgetItem(str(round(tradeAnalysis["pnl"]["net"]["total"],2)))
+ item.setTextAlignment(QtCore.Qt.AlignmentFlag.AlignHCenter)
+ self.summaryTableWidget.setItem(2,1, item )
self.summaryTableWidget.setItem(3,0,QtWidgets.QTableWidgetItem("Number of trades"))
- self.summaryTableWidget.setItem(3,1,QtWidgets.QTableWidgetItem(str(tradeAnalysis["total"]["total"])))
+ item = QtWidgets.QTableWidgetItem(str(round(tradeAnalysis["total"]["total"],2)))
+ item.setTextAlignment(QtCore.Qt.AlignmentFlag.AlignHCenter)
+ self.summaryTableWidget.setItem(3,1,item)
self.summaryTableWidget.setItem(4,0,QtWidgets.QTableWidgetItem("Won"))
- self.summaryTableWidget.setItem(4,1,QtWidgets.QTableWidgetItem(str(tradeAnalysis["won"]['total'])))
+ item = QtWidgets.QTableWidgetItem(str(round(tradeAnalysis["won"]['total'],2)))
+ item.setTextAlignment(QtCore.Qt.AlignmentFlag.AlignHCenter)
+ self.summaryTableWidget.setItem(4,1,item)
self.summaryTableWidget.setItem(5,0,QtWidgets.QTableWidgetItem("Lost"))
- self.summaryTableWidget.setItem(5,1,QtWidgets.QTableWidgetItem(str(tradeAnalysis["lost"]['total'])))
+ item = QtWidgets.QTableWidgetItem(str(round(tradeAnalysis["lost"]['total'],2)))
+ item.setTextAlignment(QtCore.Qt.AlignmentFlag.AlignHCenter)
+ self.summaryTableWidget.setItem(5,1,item)
self.summaryTableWidget.setItem(6,0,QtWidgets.QTableWidgetItem("Long"))
- self.summaryTableWidget.setItem(6,1,QtWidgets.QTableWidgetItem(str(tradeAnalysis["long"]["total"])))
+ item = QtWidgets.QTableWidgetItem(str(round(tradeAnalysis["long"]["total"],2)))
+ item.setTextAlignment(QtCore.Qt.AlignmentFlag.AlignHCenter)
+ self.summaryTableWidget.setItem(6,1,item)
self.summaryTableWidget.setItem(7,0,QtWidgets.QTableWidgetItem("Short"))
- self.summaryTableWidget.setItem(7,1,QtWidgets.QTableWidgetItem(str(tradeAnalysis["short"]["total"])))
+ item = QtWidgets.QTableWidgetItem(str(round(tradeAnalysis["short"]["total"],2)))
+ item.setTextAlignment(QtCore.Qt.AlignmentFlag.AlignHCenter)
+ self.summaryTableWidget.setItem(7,1,item)
self.summaryTableWidget.horizontalHeader().setStretchLastSection(True)
- self.summaryTableWidget.horizontalHeader().setSectionResizeMode(QtWidgets.QHeaderView.Stretch)
+ self.summaryTableWidget.horizontalHeader().setSectionResizeMode(QtWidgets.QHeaderView.ResizeMode.Stretch)
- self.summaryTableWidget.setSelectionBehavior(QtWidgets.QAbstractItemView.SelectRows)
+ self.summaryTableWidget.setSelectionBehavior(QtWidgets.QAbstractItemView.SelectionBehavior.SelectRows)
pass
@@ -529,11 +553,11 @@ def createControlPanel(self):
self.ResetPB.setText("Reset")
self.ResetPB.setCheckable(True)
self.ResetPB.setMaximumWidth(100)
- self.ResetPB.toggled.connect(self.resetChart)
+ self.ResetPB.toggled[bool].connect(self.resetChart)
self.controlPanelLayout.addWidget(self.ResetPB)
# Spacer
- spacer = QtWidgets.QSpacerItem(50,20,QtWidgets.QSizePolicy.Minimum)
+ spacer = QtWidgets.QSpacerItem(50,20,QtWidgets.QSizePolicy.Policy.Minimum)
self.controlPanelLayout.addSpacerItem(spacer)
# SMA
@@ -541,7 +565,7 @@ def createControlPanel(self):
self.SmaPB.setText("SMA")
self.SmaPB.setCheckable(True)
self.SmaPB.setMaximumWidth(100)
- self.SmaPB.toggled.connect(self.addSma)
+ self.SmaPB.toggled[bool].connect(self.addSma)
self.controlPanelLayout.addWidget(self.SmaPB)
# EMA
@@ -549,11 +573,11 @@ def createControlPanel(self):
self.EmaPB.setText("EMA")
self.EmaPB.setCheckable(True)
self.EmaPB.setMaximumWidth(100)
- self.EmaPB.toggled.connect(self.addEma)
+ self.EmaPB.toggled[bool].connect(self.addEma)
self.controlPanelLayout.addWidget(self.EmaPB)
# Spacer
- spacer = QtWidgets.QSpacerItem(50,20,QtWidgets.QSizePolicy.Minimum)
+ spacer = QtWidgets.QSpacerItem(50,20,QtWidgets.QSizePolicy.Policy.Minimum)
self.controlPanelLayout.addSpacerItem(spacer)
# RSI
@@ -561,7 +585,7 @@ def createControlPanel(self):
self.RsiPB.setText("RSI")
self.RsiPB.setCheckable(True)
self.RsiPB.setMaximumWidth(100)
- self.RsiPB.toggled.connect(self.toogleRsi)
+ self.RsiPB.toggled[bool].connect(self.toogleRsi)
self.controlPanelLayout.addWidget(self.RsiPB)
# Stochastic
@@ -569,7 +593,7 @@ def createControlPanel(self):
self.StochasticPB.setText("Stochastic")
self.StochasticPB.setCheckable(True)
self.StochasticPB.setMaximumWidth(100)
- self.StochasticPB.toggled.connect(self.toogleStochastic)
+ self.StochasticPB.toggled[bool].connect(self.toogleStochastic)
self.controlPanelLayout.addWidget(self.StochasticPB)
# Stochastic RSI
@@ -589,7 +613,7 @@ def createControlPanel(self):
self.controlPanelLayout.addWidget(self.IchimokuPB)
# Spacer
- spacer = QtWidgets.QSpacerItem(50,20,QtWidgets.QSizePolicy.Minimum)
+ spacer = QtWidgets.QSpacerItem(50,20,QtWidgets.QSizePolicy.Policy.Minimum)
self.controlPanelLayout.addSpacerItem(spacer)
# Dark mode
@@ -608,7 +632,7 @@ def createControlPanel(self):
self.controlPanelLayout.addWidget(self.volumesCB)
# Spacer
- self.controlPanelLayout.insertSpacerItem(0, QtWidgets.QSpacerItem( 0,0, hPolicy=QtWidgets.QSizePolicy.Expanding, vPolicy=QtWidgets.QSizePolicy.Preferred) )
+ self.controlPanelLayout.insertSpacerItem(0, QtWidgets.QSpacerItem( 0,0, hPolicy=QtWidgets.QSizePolicy.Policy.Expanding, vPolicy=QtWidgets.QSizePolicy.Policy.Preferred) )
return self.controlPanel
@@ -660,7 +684,7 @@ def addSma(self):
paramDialog.addParameterColor("Plot color", "#FFFF00")
paramDialog.adjustSize()
- if (paramDialog.exec() == QtWidgets.QDialog.Accepted ):
+ if paramDialog.exec() == QtWidgets.QDialog.DialogCode.Accepted:
period = paramDialog.getValue("SMA Period")
width = paramDialog.getValue("Plot width")
qColor = paramDialog.getColorValue("Plot color")
@@ -672,8 +696,6 @@ def addSma(self):
def addEma(self):
# Show indicator parameter dialog
-
-
paramDialog = indicatorParametersUI.IndicatorParametersUI()
paramDialog.setWindowFlags(QtCore.Qt.CustomizeWindowHint)
paramDialog.setTitle("EMA Indicator parameters")
@@ -682,7 +704,7 @@ def addEma(self):
paramDialog.addParameterColor("Plot color", "#FFFF00")
paramDialog.adjustSize()
- if (paramDialog.exec() == QtWidgets.QDialog.Accepted ):
+ if paramDialog.exec() == QtWidgets.QDialog.DialogCode.Accepted:
period = paramDialog.getValue("EMA Period")
width = paramDialog.getValue("Plot width")
qColor = paramDialog.getColorValue("Plot color")
@@ -696,13 +718,13 @@ def toogleRsi(self):
if self.RsiPB.isChecked():
# Show indicator parameter dialog
paramDialog = indicatorParametersUI.IndicatorParametersUI()
- paramDialog.setWindowFlags(QtCore.Qt.CustomizeWindowHint)
+ paramDialog.setWindowFlags(QtCore.Qt.WindowType.CustomizeWindowHint)
paramDialog.setTitle("RSI Indicator parameters")
paramDialog.addParameter("RSI Period", 14)
paramDialog.addParameterColor("Plot color", "#FFFF00")
paramDialog.adjustSize()
- if (paramDialog.exec() == QtWidgets.QDialog.Accepted ):
+ if paramDialog.exec() == QtWidgets.QDialog.DialogCode.Accepted:
period = paramDialog.getValue("RSI Period")
qColor = paramDialog.getColorValue("Plot color")
self.fpltWindow[self.current_timeframe].drawRsi( period, qColor )
@@ -722,14 +744,14 @@ def toogleStochastic(self):
if self.StochasticPB.isChecked():
# Show indicator parameter dialog
paramDialog = indicatorParametersUI.IndicatorParametersUI()
- paramDialog.setWindowFlags(QtCore.Qt.CustomizeWindowHint)
+ paramDialog.setWindowFlags(QtCore.Qt.WindowType.CustomizeWindowHint)
paramDialog.setTitle("Stochastic Indicator parameters")
paramDialog.addParameter("Stochastic Period K", 14)
paramDialog.addParameter("Stochastic Smooth K", 3)
paramDialog.addParameter("Stochastic Smooth D", 3)
paramDialog.adjustSize()
- if (paramDialog.exec() == QtWidgets.QDialog.Accepted ):
+ if paramDialog.exec() == QtWidgets.QDialog.DialogCode.Accepted:
period = paramDialog.getValue("Stochastic Period K")
smooth_k = paramDialog.getValue("Stochastic Smooth K")
smooth_d = paramDialog.getValue("Stochastic Smooth D")
@@ -751,14 +773,14 @@ def toogleStochasticRsi(self):
if self.StochasticRsiPB.isChecked():
# Show indicator parameter dialog
paramDialog = indicatorParametersUI.IndicatorParametersUI()
- paramDialog.setWindowFlags(QtCore.Qt.CustomizeWindowHint)
+ paramDialog.setWindowFlags(QtCore.Qt.WindowType.CustomizeWindowHint)
paramDialog.setTitle("Stochastic Indicator parameters")
paramDialog.addParameter("Stochastic Rsi Period K", 14)
paramDialog.addParameter("Stochastic Rsi Smooth K", 3)
paramDialog.addParameter("Stochastic Rsi Smooth D", 3)
paramDialog.adjustSize()
- if (paramDialog.exec() == QtWidgets.QDialog.Accepted ):
+ if (paramDialog.exec() == QtWidgets.QDialog.DialogCode.Accepted ):
period = paramDialog.getValue("Stochastic Rsi Period K")
smooth_k = paramDialog.getValue("Stochastic Rsi Smooth K")
smooth_d = paramDialog.getValue("Stochastic Rsi Smooth D")
@@ -800,21 +822,21 @@ def createTransactionsUI(self, trades):
row = 0
for date,values in trades:
#for trade in trades:
- self.transactionTableWidget.setItem(row,0,QtWidgets.QTableWidgetItem( date.strftime("%Y/%m/%d %H:%M:%S") ))
- self.transactionTableWidget.setItem(row,1,QtWidgets.QTableWidgetItem( str(values[0][0]) ))
- self.transactionTableWidget.setItem(row,2,QtWidgets.QTableWidgetItem( str(values[0][1]) ))
- self.transactionTableWidget.setItem(row,3,QtWidgets.QTableWidgetItem( str(values[0][2]) ))
+ self.transactionTableWidget.setItem(row, 0, QtWidgets.QTableWidgetItem(date.strftime("%Y/%m/%d %H:%M:%S")))
+ self.transactionTableWidget.setItem(row, 1, QtWidgets.QTableWidgetItem(str(values[0][0])))
+ self.transactionTableWidget.setItem(row, 2, QtWidgets.QTableWidgetItem(str(values[0][1])))
+ self.transactionTableWidget.setItem(row, 3, QtWidgets.QTableWidgetItem(str(values[0][2])))
row += 1
self.transactionTableWidget.horizontalHeader().setStretchLastSection(True)
- self.transactionTableWidget.horizontalHeader().setSectionResizeMode(QtWidgets.QHeaderView.Stretch)
+ self.transactionTableWidget.horizontalHeader().setSectionResizeMode(QtWidgets.QHeaderView.ResizeMode.Stretch)
self.transactionTableWidget.setStyleSheet("alternate-background-color: #AAAAAA;background-color: #CCCCCC;")
self.transactionTableWidget.setAlternatingRowColors(True)
self.transactionTableWidget.setSortingEnabled(True)
- self.transactionTableWidget.setSelectionBehavior(QtWidgets.QAbstractItemView.SelectRows)
- self.transactionTableWidget.setEditTriggers(QtWidgets.QAbstractItemView.NoEditTriggers)
+ self.transactionTableWidget.setSelectionBehavior(QtWidgets.QAbstractItemView.SelectionBehavior.SelectRows)
+ self.transactionTableWidget.setEditTriggers(QtWidgets.QAbstractItemView.EditTrigger.NoEditTriggers)
self.dock_transactions.addWidget(self.transactionTableWidget)
@@ -829,24 +851,32 @@ def fillStrategyParameters(self, strategy):
# Insert parameters
row = 0
for parameterName, parameterValue in strategy.params._getitems():
- label = QtWidgets.QLabel(parameterName)
- lineEdit = QtWidgets.QLineEdit(str(parameterValue))
- # Save the parameter to inject it in the addStrategy method
- self.controller.strategyParametersSave(parameterName, parameterValue)
+ if parameterName is not 'model':
+ label = QtWidgets.QLabel(parameterName)
+
+ if type(parameterValue) == bool:
+ checkBox = QtWidgets.QCheckBox(str())
+ checkBox.setObjectName(parameterName)
+ checkBox.setChecked(parameterValue)
+ checkBox.stateChanged.connect(functools.partial(self.controller.strategyParametersChanged, checkBox, parameterName, parameterValue))
+ self.strategyTesterUI.parametersLayout.addRow(label, checkBox )
- # Connect the parameter changed slot
- lineEdit.textChanged.connect(functools.partial(self.controller.strategyParametersChanged, lineEdit, parameterName, parameterValue))
+ else:
+ lineEdit = QtWidgets.QLineEdit(str(parameterValue))
+ lineEdit.setObjectName(parameterName)
+ # Connect the parameter changed slot
+ lineEdit.textChanged.connect(functools.partial(self.controller.strategyParametersChanged, lineEdit, parameterName, parameterValue))
+ self.strategyTesterUI.parametersLayout.addRow(label, lineEdit )
- self.strategyTesterUI.parametersLayout.addRow(label, lineEdit )
- row = row + 1
+ # Save the parameter to inject it in the addStrategy method
+ self.controller.strategyParametersSave(parameterName, parameterValue)
+
+ row = row + 1
pass
# Parameter box size
self.strategyTesterUI.parametersLayout.update()
self.strategyTesterUI.parametersScrollArea.adjustSize()
- pass
-
-
-
\ No newline at end of file
+ pass
\ No newline at end of file
diff --git a/wallet.py b/wallet.py
index 737bed0..5955a6c 100644
--- a/wallet.py
+++ b/wallet.py
@@ -28,6 +28,7 @@ def __init__(self, startingCash):
def reset(self, startingCash):
+ self.starting_cash = startingCash # todo: change it by initial cash settings
self.current_value = startingCash # todo: change it by initial cash settings
self.current_cash = startingCash # todo: change it by initial cash settings
self.current_equity = startingCash # todo: change it by initial cash settings
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