[Add] dialog ui for creating new spread
This commit is contained in:
parent
2e4776eceb
commit
b4081eb01e
@ -56,9 +56,13 @@ class SpreadManager(QtWidgets.QWidget):
|
|||||||
self.event_engine
|
self.event_engine
|
||||||
)
|
)
|
||||||
|
|
||||||
|
add_spread_button = QtWidgets.QPushButton("创建价差")
|
||||||
|
add_spread_button.clicked.connect(self.add_spread)
|
||||||
|
|
||||||
vbox1 = QtWidgets.QVBoxLayout()
|
vbox1 = QtWidgets.QVBoxLayout()
|
||||||
vbox1.addWidget(self.algo_dialog)
|
vbox1.addWidget(self.algo_dialog)
|
||||||
vbox1.addStretch()
|
vbox1.addStretch()
|
||||||
|
vbox1.addWidget(add_spread_button)
|
||||||
|
|
||||||
vbox2 = QtWidgets.QVBoxLayout()
|
vbox2 = QtWidgets.QVBoxLayout()
|
||||||
vbox2.addWidget(self.data_monitor)
|
vbox2.addWidget(self.data_monitor)
|
||||||
@ -77,6 +81,11 @@ class SpreadManager(QtWidgets.QWidget):
|
|||||||
|
|
||||||
self.showMaximized()
|
self.showMaximized()
|
||||||
|
|
||||||
|
def add_spread(self):
|
||||||
|
""""""
|
||||||
|
dialog = SpreadDataDialog(self.spread_engine)
|
||||||
|
dialog.exec_()
|
||||||
|
|
||||||
|
|
||||||
class SpreadDataMonitor(BaseMonitor):
|
class SpreadDataMonitor(BaseMonitor):
|
||||||
"""
|
"""
|
||||||
@ -221,3 +230,125 @@ class SpreadAlgoDialog(QtWidgets.QDialog):
|
|||||||
self.spread_engine.start_algo(
|
self.spread_engine.start_algo(
|
||||||
name, direction, price, volume, payup, interval
|
name, direction, price, volume, payup, interval
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
class SpreadDataDialog(QtWidgets.QDialog):
|
||||||
|
""""""
|
||||||
|
|
||||||
|
def __init__(self, spread_engine: SpreadEngine):
|
||||||
|
""""""
|
||||||
|
super().__init__()
|
||||||
|
|
||||||
|
self.spread_engine: SpreadEngine = spread_engine
|
||||||
|
|
||||||
|
self.leg_widgets = []
|
||||||
|
|
||||||
|
self.init_ui()
|
||||||
|
|
||||||
|
def init_ui(self):
|
||||||
|
""""""
|
||||||
|
self.setWindowTitle("创建价差")
|
||||||
|
|
||||||
|
self.name_line = QtWidgets.QLineEdit()
|
||||||
|
self.active_line = QtWidgets.QLineEdit()
|
||||||
|
|
||||||
|
self.grid = QtWidgets.QGridLayout()
|
||||||
|
|
||||||
|
button_add = QtWidgets.QPushButton("创建价差")
|
||||||
|
button_add.clicked.connect(self.add_spread)
|
||||||
|
|
||||||
|
Label = QtWidgets.QLabel
|
||||||
|
|
||||||
|
grid = QtWidgets.QGridLayout()
|
||||||
|
grid.addWidget(Label("价差名称"), 0, 0)
|
||||||
|
grid.addWidget(self.name_line, 0, 1, 1, 3)
|
||||||
|
grid.addWidget(Label("主动腿代码"), 1, 0)
|
||||||
|
grid.addWidget(self.active_line, 1, 1, 1, 3)
|
||||||
|
|
||||||
|
grid.addWidget(Label(""), 2, 0)
|
||||||
|
grid.addWidget(Label("本地代码"), 3, 1)
|
||||||
|
grid.addWidget(Label("价格乘数"), 3, 2)
|
||||||
|
grid.addWidget(Label("交易乘数"), 3, 3)
|
||||||
|
|
||||||
|
int_validator = QtGui.QIntValidator()
|
||||||
|
|
||||||
|
leg_count = 5
|
||||||
|
for i in range(leg_count):
|
||||||
|
symbol_line = QtWidgets.QLineEdit()
|
||||||
|
|
||||||
|
price_line = QtWidgets.QLineEdit()
|
||||||
|
price_line.setValidator(int_validator)
|
||||||
|
|
||||||
|
trading_line = QtWidgets.QLineEdit()
|
||||||
|
trading_line.setValidator(int_validator)
|
||||||
|
|
||||||
|
grid.addWidget(Label("腿{}".format(i + 1)), 4 + i, 0)
|
||||||
|
grid.addWidget(symbol_line, 4 + i, 1)
|
||||||
|
grid.addWidget(price_line, 4 + i, 2)
|
||||||
|
grid.addWidget(trading_line, 4 + i, 3)
|
||||||
|
|
||||||
|
d = {
|
||||||
|
"symbol": symbol_line,
|
||||||
|
"price": price_line,
|
||||||
|
"trading": trading_line
|
||||||
|
}
|
||||||
|
self.leg_widgets.append(d)
|
||||||
|
|
||||||
|
grid.addWidget(Label(""), 4 + leg_count, 0,)
|
||||||
|
grid.addWidget(button_add, 5 + leg_count, 0, 1, 4)
|
||||||
|
|
||||||
|
self.setLayout(grid)
|
||||||
|
|
||||||
|
def add_spread(self):
|
||||||
|
""""""
|
||||||
|
spread_name = self.name_line.text()
|
||||||
|
if not spread_name:
|
||||||
|
QtWidgets.QMessageBox.warning(
|
||||||
|
self,
|
||||||
|
"创建失败",
|
||||||
|
"请输入价差名称",
|
||||||
|
QtWidgets.QMessageBox.Ok
|
||||||
|
)
|
||||||
|
return
|
||||||
|
|
||||||
|
active_symbol = self.active_line.text()
|
||||||
|
|
||||||
|
leg_settings = {}
|
||||||
|
for d in self.leg_widgets:
|
||||||
|
try:
|
||||||
|
vt_symbol = d["symbol"].text()
|
||||||
|
price_multiplier = int(d["price"].text())
|
||||||
|
trading_multiplier = int(d["trading"].text())
|
||||||
|
|
||||||
|
leg_settings[vt_symbol] = {
|
||||||
|
"vt_symbol": vt_symbol,
|
||||||
|
"price_multiplier": price_multiplier,
|
||||||
|
"trading_multiplier": trading_multiplier
|
||||||
|
}
|
||||||
|
except ValueError:
|
||||||
|
pass
|
||||||
|
|
||||||
|
if len(leg_settings) < 2:
|
||||||
|
QtWidgets.QMessageBox.warning(
|
||||||
|
self,
|
||||||
|
"创建失败",
|
||||||
|
"价差最少需要2条腿",
|
||||||
|
QtWidgets.QMessageBox.Ok
|
||||||
|
)
|
||||||
|
return
|
||||||
|
|
||||||
|
if active_symbol not in leg_settings:
|
||||||
|
QtWidgets.QMessageBox.warning(
|
||||||
|
self,
|
||||||
|
"创建失败",
|
||||||
|
"各条腿中找不到主动腿代码",
|
||||||
|
QtWidgets.QMessageBox.Ok
|
||||||
|
)
|
||||||
|
return
|
||||||
|
|
||||||
|
self.spread_engine.add_spread(
|
||||||
|
spread_name,
|
||||||
|
list(leg_settings.values()),
|
||||||
|
active_symbol
|
||||||
|
)
|
||||||
|
self.accept()
|
||||||
|
Loading…
Reference in New Issue
Block a user