+ if len(selectedItems) > 4:
+ dateTradeOpen = selectedItems[2].text()
+ dateTradeClose = selectedItems[3].text()
+
+ self.fpltWindow[self.current_timeframe].zoomTo(dateTradeOpen,dateTradeClose)
+
pass
#########
@@ -274,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)
@@ -307,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)
#
@@ -343,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)
@@ -351,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
@@ -363,58 +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.setSelectionBehavior(QtWidgets.QAbstractItemView.SelectRows)
-
- pass
-
- #########
- # Fin plot Window
- #########
- def createFinplotWindow(self):
- self.fpltWindow = finplotWindow.FinplotWindow(self.dockArea, self.dock_chart, self)
- self.fpltWindow.createPlotWidgets()
- pass
-
- #
- def initialize(self):
-
- # Docks
- self.createDocks()
- self.createUIs()
-
- # Enable run button
- self.strategyTesterUI.runBacktestPB.setEnabled(False)
+ self.summaryTableWidget.horizontalHeader().setSectionResizeMode(QtWidgets.QHeaderView.ResizeMode.Stretch)
- self.strategyTesterUI.initialize()
+ self.summaryTableWidget.setSelectionBehavior(QtWidgets.QAbstractItemView.SelectionBehavior.SelectRows)
pass
@@ -423,8 +477,8 @@ def initialize(self):
# Show all
#########
def show(self):
- self.fpltWindow.show() # prepares plots when they're all setup
- #fpltWindow.autoviewrestore()
+
+ #self.fpltWindow[timeframe].show() # prepares plots when they're all setup
self.win.show()
self.app.exec_()
@@ -439,17 +493,17 @@ def getProgressBar(self):
#########
# Draw chart
#########
- def drawChart(self, data):
- self.fpltWindow.setChartData(data)
- self.fpltWindow.updateChart()
+ def drawChart(self, data, timeframe):
+ self.fpltWindow[timeframe].setChartData(data)
+ self.fpltWindow[timeframe].updateChart()
pass
#########
# Draw orders on chart
#########
def setOrders(self, orders):
- #self.fillOrdersUI(self.myOrders)
- self.fpltWindow.drawOrders(orders)
+ for timeframe,fpltWindow in self.fpltWindow.items():
+ fpltWindow.drawOrders(orders)
pass
#########
@@ -458,21 +512,24 @@ def setOrders(self, orders):
# But anyway... it works...
#########
def displayPnL(self, pnl_dataframe):
-
# draw charts
- self.fpltWindow.drawPnL(pnl_dataframe)
+ for timeframe, fpltwindow in self.fpltWindow.items():
+ fpltwindow.drawPnL(pnl_dataframe)
+
+ self.togglePnLWidget()
+
pass
#########
# Control panel overlay on top/above of the finplot window
#########
def createControlPanel(self):
+
+ self.controlPanel = QtWidgets.QWidget(self.dock_stackedCharts)
+ self.dock_stackedCharts.addWidget(self.controlPanel,0,0)
- self.panel = QtWidgets.QWidget(self.dock_chart)
- self.dock_chart.addWidget(self.panel,0,0,1,1)
-
- layout = QtWidgets.QHBoxLayout(self.panel)
-
+ self.controlPanelLayout = QtWidgets.QHBoxLayout(self.controlPanel)
+
'''
panel.symbol = QtWidgets.QComboBox(panel)
[panel.symbol.addItem(i+'USDT') for i in 'BTC ETH XRP DOGE BNB SOL ADA LTC LINK DOT TRX BCH'.split()]
@@ -492,121 +549,146 @@ def createControlPanel(self):
'''
# Rest
- self.ResetPB = QtWidgets.QPushButton(self.panel)
+ self.ResetPB = QtWidgets.QPushButton(self.controlPanel)
self.ResetPB.setText("Reset")
self.ResetPB.setCheckable(True)
self.ResetPB.setMaximumWidth(100)
- self.ResetPB.toggled.connect(self.resetChart)
- layout.addWidget(self.ResetPB)
+ self.ResetPB.toggled[bool].connect(self.resetChart)
+ self.controlPanelLayout.addWidget(self.ResetPB)
# Spacer
- spacer = QtWidgets.QSpacerItem(50,20,QtWidgets.QSizePolicy.Minimum)
- layout.addSpacerItem(spacer)
+ spacer = QtWidgets.QSpacerItem(50,20,QtWidgets.QSizePolicy.Policy.Minimum)
+ self.controlPanelLayout.addSpacerItem(spacer)
# SMA
- self.SmaPB = QtWidgets.QPushButton(self.panel)
+ self.SmaPB = QtWidgets.QPushButton(self.controlPanel)
self.SmaPB.setText("SMA")
self.SmaPB.setCheckable(True)
self.SmaPB.setMaximumWidth(100)
- self.SmaPB.toggled.connect(self.addSma)
- layout.addWidget(self.SmaPB)
+ self.SmaPB.toggled[bool].connect(self.addSma)
+ self.controlPanelLayout.addWidget(self.SmaPB)
# EMA
- self.EmaPB = QtWidgets.QPushButton(self.panel)
+ self.EmaPB = QtWidgets.QPushButton(self.controlPanel)
self.EmaPB.setText("EMA")
self.EmaPB.setCheckable(True)
self.EmaPB.setMaximumWidth(100)
- self.EmaPB.toggled.connect(self.addEma)
- layout.addWidget(self.EmaPB)
+ self.EmaPB.toggled[bool].connect(self.addEma)
+ self.controlPanelLayout.addWidget(self.EmaPB)
# Spacer
- spacer = QtWidgets.QSpacerItem(50,20,QtWidgets.QSizePolicy.Minimum)
- layout.addSpacerItem(spacer)
+ spacer = QtWidgets.QSpacerItem(50,20,QtWidgets.QSizePolicy.Policy.Minimum)
+ self.controlPanelLayout.addSpacerItem(spacer)
# RSI
- self.RsiPB = QtWidgets.QPushButton(self.panel)
+ self.RsiPB = QtWidgets.QPushButton(self.controlPanel)
self.RsiPB.setText("RSI")
self.RsiPB.setCheckable(True)
self.RsiPB.setMaximumWidth(100)
- self.RsiPB.toggled.connect(self.toogleRsi)
- layout.addWidget(self.RsiPB)
+ self.RsiPB.toggled[bool].connect(self.toogleRsi)
+ self.controlPanelLayout.addWidget(self.RsiPB)
# Stochastic
- self.StochasticPB = QtWidgets.QPushButton(self.panel)
+ self.StochasticPB = QtWidgets.QPushButton(self.controlPanel)
self.StochasticPB.setText("Stochastic")
self.StochasticPB.setCheckable(True)
self.StochasticPB.setMaximumWidth(100)
- self.StochasticPB.toggled.connect(self.toogleStochastic)
- layout.addWidget(self.StochasticPB)
+ self.StochasticPB.toggled[bool].connect(self.toogleStochastic)
+ self.controlPanelLayout.addWidget(self.StochasticPB)
# Stochastic RSI
- self.StochasticRsiPB = QtWidgets.QPushButton(self.panel)
+ self.StochasticRsiPB = QtWidgets.QPushButton(self.controlPanel)
self.StochasticRsiPB.setText("Stochastic RSI")
self.StochasticRsiPB.setCheckable(True)
self.StochasticRsiPB.setMaximumWidth(100)
self.StochasticRsiPB.toggled.connect(self.toogleStochasticRsi)
- layout.addWidget(self.StochasticRsiPB)
+ self.controlPanelLayout.addWidget(self.StochasticRsiPB)
# Ichimoku
- self.IchimokuPB = QtWidgets.QPushButton(self.panel)
+ self.IchimokuPB = QtWidgets.QPushButton(self.controlPanel)
self.IchimokuPB.setText("Ichimoku")
self.IchimokuPB.setCheckable(True)
self.IchimokuPB.setMaximumWidth(100)
self.IchimokuPB.toggled.connect(self.toogleIchimoku)
- layout.addWidget(self.IchimokuPB)
+ self.controlPanelLayout.addWidget(self.IchimokuPB)
# Spacer
- spacer = QtWidgets.QSpacerItem(50,20,QtWidgets.QSizePolicy.Minimum)
- layout.addSpacerItem(spacer)
+ spacer = QtWidgets.QSpacerItem(50,20,QtWidgets.QSizePolicy.Policy.Minimum)
+ self.controlPanelLayout.addSpacerItem(spacer)
# Dark mode
- self.darkmodeCB = QtWidgets.QCheckBox(self.panel)
+ self.darkmodeCB = QtWidgets.QCheckBox(self.controlPanel)
self.darkmodeCB.setText('Dark mode')
self.darkmodeCB.toggled.connect(self.dark_mode_toggle)
- # init checked after connecting the slot
self.darkmodeCB.setChecked(True)
- layout.addWidget(self.darkmodeCB)
+ self.controlPanelLayout.addWidget(self.darkmodeCB)
# Volumes
- self.volumesCB = QtWidgets.QCheckBox(self.panel)
+ self.volumesCB = QtWidgets.QCheckBox(self.controlPanel)
self.volumesCB.setText('Volumes')
self.volumesCB.toggled.connect(self.volumes_toggle)
# init checked after connecting the slot
- self.volumesCB.setChecked(True)
- layout.addWidget(self.volumesCB)
+ self.volumesCB.setChecked(False)
+ self.controlPanelLayout.addWidget(self.volumesCB)
- layout.insertSpacerItem( 0, QtWidgets.QSpacerItem( 0,0, hPolicy=QtWidgets.QSizePolicy.Expanding, vPolicy=QtWidgets.QSizePolicy.Preferred) )
+ # Spacer
+ self.controlPanelLayout.insertSpacerItem(0, QtWidgets.QSpacerItem( 0,0, hPolicy=QtWidgets.QSizePolicy.Policy.Expanding, vPolicy=QtWidgets.QSizePolicy.Policy.Preferred) )
- return self.panel
+ return self.controlPanel
#########
# Toggle anther UI Theme
#########
def dark_mode_toggle(self):
- self.fpltWindow.activateDarkMode(self.darkmodeCB.isChecked())
+ for key,window in self.fpltWindow.items():
+ window.activateDarkMode(self.darkmodeCB.isChecked())
pass
##########
# INDICATORS
##########
+ def toogleTimeframe(self, timeframe):
+
+ if self.timeFramePB[timeframe].isChecked():
+ print("Display " + timeframe)
+ self.current_timeframe = timeframe
+ index = self.stackedCharts.indexOf( self.dockAreaTimeframes[timeframe])
+ self.stackedCharts.setCurrentIndex( index )
+ self.togglePnLWidget()
+
+ pass
+
+ def togglePnLWidget(self):
+
+ # hide all PnL windows & Show the good one
+ for tf, fpltWindow in self.fpltWindow.items():
+ if tf != self.current_timeframe:
+ fpltWindow.hidePnL()
+ else:
+ fpltWindow.showPnL()
+
def resetChart(self):
- self.fpltWindow.resetChart()
- self.fpltWindow.updateChart()
+ self.fpltWindow[self.current_timeframe].resetChart()
+ self.fpltWindow[self.current_timeframe].updateChart()
pass
# On chart indicators
def addSma(self):
# Show indicator parameter dialog
- paramDialog = indicatorParametersUI.IndicatorParametersUI(self.dock_chart)
+ paramDialog = indicatorParametersUI.IndicatorParametersUI()
paramDialog.setWindowFlags(QtCore.Qt.CustomizeWindowHint)
paramDialog.setTitle("SMA Indicator parameters")
paramDialog.addParameter("SMA Period", 14)
+ paramDialog.addParameter("Plot width", 1)
+ 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")
- self.fpltWindow.drawSma( period )
+ width = paramDialog.getValue("Plot width")
+ qColor = paramDialog.getColorValue("Plot color")
+ self.fpltWindow[self.current_timeframe].drawSma( period, qColor, width)
pass
@@ -614,15 +696,19 @@ def addSma(self):
def addEma(self):
# Show indicator parameter dialog
- paramDialog = indicatorParametersUI.IndicatorParametersUI(self.dock_chart)
+ paramDialog = indicatorParametersUI.IndicatorParametersUI()
paramDialog.setWindowFlags(QtCore.Qt.CustomizeWindowHint)
paramDialog.setTitle("EMA Indicator parameters")
paramDialog.addParameter("EMA Period", 9)
+ paramDialog.addParameter("Plot width", 1)
+ 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")
- self.fpltWindow.drawEma( period )
+ width = paramDialog.getValue("Plot width")
+ qColor = paramDialog.getColorValue("Plot color")
+ self.fpltWindow[self.current_timeframe].drawEma( period, qColor, width )
pass
@@ -631,24 +717,25 @@ def toogleRsi(self):
if self.RsiPB.isChecked():
# Show indicator parameter dialog
- paramDialog = indicatorParametersUI.IndicatorParametersUI(self.dock_chart)
- paramDialog.setWindowFlags(QtCore.Qt.CustomizeWindowHint)
+ paramDialog = indicatorParametersUI.IndicatorParametersUI()
+ 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")
-
- self.fpltWindow.drawRsi( period )
- self.dock_rsi.show()
+ qColor = paramDialog.getColorValue("Plot color")
+ self.fpltWindow[self.current_timeframe].drawRsi( period, qColor )
+ self.dock_rsi[self.current_timeframe].show()
else:
# Cancel
self.RsiPB.setChecked(False)
- self.dock_rsi.hide()
+ self.dock_rsi[self.current_timeframe].hide()
else:
- self.dock_rsi.hide()
+ self.dock_rsi[self.current_timeframe].hide()
pass
@@ -656,28 +743,28 @@ def toogleStochastic(self):
if self.StochasticPB.isChecked():
# Show indicator parameter dialog
- paramDialog = indicatorParametersUI.IndicatorParametersUI(self.dock_chart)
- paramDialog.setWindowFlags(QtCore.Qt.CustomizeWindowHint)
+ paramDialog = indicatorParametersUI.IndicatorParametersUI()
+ 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")
- self.fpltWindow.drawStochastic( period, smooth_k, smooth_d )
- self.dock_stochastic.show()
+ self.fpltWindow[self.current_timeframe].drawStochastic( period, smooth_k, smooth_d )
+ self.dock_stochastic[self.current_timeframe].show()
else:
# Cancel
self.RsiPB.setChecked(False)
- self.dock_stochastic.hide()
+ self.dock_stochastic[self.current_timeframe].hide()
else:
- self.dock_stochastic.hide()
+ self.dock_stochastic[self.current_timeframe].hide()
pass
@@ -685,48 +772,41 @@ def toogleStochasticRsi(self):
if self.StochasticRsiPB.isChecked():
# Show indicator parameter dialog
- paramDialog = indicatorParametersUI.IndicatorParametersUI(self.dock_chart)
- paramDialog.setWindowFlags(QtCore.Qt.CustomizeWindowHint)
+ paramDialog = indicatorParametersUI.IndicatorParametersUI()
+ 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")
- self.fpltWindow.drawStochasticRsi( period, smooth_k, smooth_d)
- self.dock_stochasticRsi.show()
+ self.fpltWindow[self.current_timeframe].drawStochasticRsi( period, smooth_k, smooth_d)
+ self.dock_stochasticRsi[self.current_timeframe].show()
else:
# Cancel
self.RsiPB.setChecked(False)
- self.dock_stochasticRsi.hide()
+ self.dock_stochasticRsi[self.current_timeframe].hide()
else:
- self.dock_stochasticRsi.hide()
+ self.dock_stochasticRsi[self.current_timeframe].hide()
pass
# On chart indicators
def toogleIchimoku(self):
- self.fpltWindow.setIndicator("Ichimoku", self.IchimokuPB.isChecked() )
+ self.fpltWindow[self.current_timeframe].setIndicator("Ichimoku", self.IchimokuPB.isChecked() )
pass
def volumes_toggle(self):
- self.fpltWindow.setIndicator("Volumes", self.volumesCB.isChecked())
+ self.fpltWindow[self.current_timeframe].setIndicator("Volumes", self.volumesCB.isChecked())
pass
-
-
- #########
- # Load data files UI slots
- #########
-
-
#########
# Obsolete (Strategy results : transcations tab)
#########
@@ -742,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)
@@ -771,25 +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