From 2b360865be76115196baa5b1b1605be0ac0b4c4d Mon Sep 17 00:00:00 2001 From: Denis Tereshkin Date: Fri, 14 Dec 2018 12:00:55 +0700 Subject: [PATCH] Implemented TradesListWidget --- build_ui.sh | 1 + src/nailab/ui/strategywidget.py | 10 ++++ src/nailab/ui/tradeslistwidget.py | 36 ++++++++++++++ src/nailab/ui_gen/tradeslistwidget.py | 35 +++++++++++++ ui/tradeslistwidget.ui | 72 +++++++++++++++++++++++++++ 5 files changed, 154 insertions(+) create mode 100644 src/nailab/ui/tradeslistwidget.py create mode 100644 src/nailab/ui_gen/tradeslistwidget.py create mode 100644 ui/tradeslistwidget.ui diff --git a/build_ui.sh b/build_ui.sh index 3a143be..d9ca8e7 100755 --- a/build_ui.sh +++ b/build_ui.sh @@ -5,6 +5,7 @@ /usr/bin/pyuic5 ui/mainwindow.ui > src/nailab/ui_gen/mainwindow.py /usr/bin/pyuic5 ui/newdatasourcedialog.ui > src/nailab/ui_gen/newdatasourcedialog.py /usr/bin/pyuic5 ui/strategywidget.ui > src/nailab/ui_gen/strategywidget.py +/usr/bin/pyuic5 ui/tradeslistwidget.ui > src/nailab/ui_gen/tradeslistwidget.py /usr/bin/pyrcc5 nailab.qrc -o src/nailab/nailab_rc.py diff --git a/src/nailab/ui/strategywidget.py b/src/nailab/ui/strategywidget.py index 11c2fb7..098297f 100644 --- a/src/nailab/ui/strategywidget.py +++ b/src/nailab/ui/strategywidget.py @@ -9,6 +9,7 @@ from ui_gen.strategywidget import Ui_StrategyWidget from ui.newdatasourcedialog import NewDataSourceDialog from ui.equitychartwidget import EquityChartWidget +from ui.tradeslistwidget import TradesListWidget from watchdog.observers import Observer from watchdog.events import FileSystemEventHandler @@ -58,6 +59,7 @@ class StrategyWidget(QtWidgets.QWidget): self.result = [] self.result_widget = None self.equity_widget = None + self.trades_widget = None self.watchdog_handler = FileModifiedHandler(self.file_modified) self.watchdog = None @@ -139,6 +141,7 @@ class StrategyWidget(QtWidgets.QWidget): self.result = result self.update_result() self.update_equity_chart() + self.update_trades_list() def update_equity_chart(self): @@ -149,6 +152,13 @@ class StrategyWidget(QtWidgets.QWidget): self.ui.tabs.addTab(self.equity_widget, "Equity") self.equity_widget.set_data(cumpnl) + + def update_trades_list(self): + if self.trades_widget is None: + self.trades_widget = TradesListWidget(self) + self.ui.tabs.addTab(self.trades_widget, "Trades") + + self.trades_widget.set_trades(self.result[1]) def update_result(self): diff --git a/src/nailab/ui/tradeslistwidget.py b/src/nailab/ui/tradeslistwidget.py new file mode 100644 index 0000000..facb91f --- /dev/null +++ b/src/nailab/ui/tradeslistwidget.py @@ -0,0 +1,36 @@ + +from PyQt5 import QtCore, QtGui, QtWidgets +from PyQt5.Qsci import * + +from ui_gen.tradeslistwidget import Ui_TradesListWidget + +class TradesListWidget(QtWidgets.QWidget): + + def __init__(self, parent=None): + super().__init__(parent) + + self.ui = Ui_TradesListWidget() + self.ui.setupUi(self) + + self.trades = [] + + + def set_trades(self, trades): + self.trades = trades + + self.ui.trades.clear() + + for trade in trades: + item = QtWidgets.QTreeWidgetItem(self.ui.trades) + if trade["is_long"]: + item.setText(0, "L") + else: + item.setText(0, "S") + + item.setText(1, trade["security"]) + item.setText(2, str(trade["entry_time"])) + item.setText(3, str(trade["entry_price"])) + item.setText(4, str(trade["exit_time"])) + item.setText(5, str(trade["exit_price"])) + item.setText(6, str(trade["pnl"])) + diff --git a/src/nailab/ui_gen/tradeslistwidget.py b/src/nailab/ui_gen/tradeslistwidget.py new file mode 100644 index 0000000..4bdc718 --- /dev/null +++ b/src/nailab/ui_gen/tradeslistwidget.py @@ -0,0 +1,35 @@ +# -*- coding: utf-8 -*- + +# Form implementation generated from reading ui file 'ui\tradeslistwidget.ui' +# +# Created by: PyQt5 UI code generator 5.11.3 +# +# WARNING! All changes made in this file will be lost! + +from PyQt5 import QtCore, QtGui, QtWidgets + +class Ui_TradesListWidget(object): + def setupUi(self, TradesListWidget): + TradesListWidget.setObjectName("TradesListWidget") + TradesListWidget.resize(830, 565) + self.gridLayout = QtWidgets.QGridLayout(TradesListWidget) + self.gridLayout.setContentsMargins(1, 1, 1, 1) + self.gridLayout.setObjectName("gridLayout") + self.trades = QtWidgets.QTreeWidget(TradesListWidget) + self.trades.setObjectName("trades") + self.gridLayout.addWidget(self.trades, 0, 0, 1, 1) + + self.retranslateUi(TradesListWidget) + QtCore.QMetaObject.connectSlotsByName(TradesListWidget) + + def retranslateUi(self, TradesListWidget): + _translate = QtCore.QCoreApplication.translate + TradesListWidget.setWindowTitle(_translate("TradesListWidget", "Form")) + self.trades.headerItem().setText(0, _translate("TradesListWidget", "D")) + self.trades.headerItem().setText(1, _translate("TradesListWidget", "Security")) + self.trades.headerItem().setText(2, _translate("TradesListWidget", "Entry time")) + self.trades.headerItem().setText(3, _translate("TradesListWidget", "Entry price")) + self.trades.headerItem().setText(4, _translate("TradesListWidget", "Exit time")) + self.trades.headerItem().setText(5, _translate("TradesListWidget", "Exit price")) + self.trades.headerItem().setText(6, _translate("TradesListWidget", "PnL")) + diff --git a/ui/tradeslistwidget.ui b/ui/tradeslistwidget.ui new file mode 100644 index 0000000..6ec005a --- /dev/null +++ b/ui/tradeslistwidget.ui @@ -0,0 +1,72 @@ + + + TradesListWidget + + + + 0 + 0 + 830 + 565 + + + + Form + + + + 1 + + + 1 + + + 1 + + + 1 + + + + + + D + + + + + Security + + + + + Entry time + + + + + Entry price + + + + + Exit time + + + + + Exit price + + + + + PnL + + + + + + + + +