[Add]抽象剥离算法控制组件父类
This commit is contained in:
parent
08253b087b
commit
19f559f36a
@ -12,7 +12,7 @@ STATUS_ACTIVE = [STATUS_NOTTRADED, STATUS_PARTTRADED, STATUS_UNKNOWN]
|
|||||||
########################################################################
|
########################################################################
|
||||||
class AlgoTemplate(object):
|
class AlgoTemplate(object):
|
||||||
"""算法模板"""
|
"""算法模板"""
|
||||||
name = 'AlgoTemplate'
|
templateName = 'AlgoTemplate'
|
||||||
count = 0
|
count = 0
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
@ -20,7 +20,7 @@ class AlgoTemplate(object):
|
|||||||
def new(cls, engine, setting):
|
def new(cls, engine, setting):
|
||||||
"""创建新对象"""
|
"""创建新对象"""
|
||||||
cls.count += 1
|
cls.count += 1
|
||||||
algoName = '%s_%s' %(cls.name, cls.count)
|
algoName = '%s_%s' %(cls.templateName, cls.count)
|
||||||
|
|
||||||
algo = cls(engine, setting, algoName)
|
algo = cls(engine, setting, algoName)
|
||||||
return algo
|
return algo
|
||||||
|
@ -6,14 +6,15 @@ from collections import OrderedDict
|
|||||||
from vnpy.trader.vtConstant import (DIRECTION_LONG, DIRECTION_SHORT)
|
from vnpy.trader.vtConstant import (DIRECTION_LONG, DIRECTION_SHORT)
|
||||||
from vnpy.trader.uiQt import QtWidgets
|
from vnpy.trader.uiQt import QtWidgets
|
||||||
|
|
||||||
from algoTemplate import AlgoTemplate
|
from .algoTemplate import AlgoTemplate
|
||||||
|
from .uiAlgoWidget import AlgoWidget, QtWidgets
|
||||||
|
|
||||||
|
|
||||||
########################################################################
|
########################################################################
|
||||||
class TwapAlgo(AlgoTemplate):
|
class TwapAlgo(AlgoTemplate):
|
||||||
"""TWAP算法"""
|
"""TWAP算法"""
|
||||||
|
|
||||||
name = 'TWAP'
|
templateName = 'TWAP'
|
||||||
|
|
||||||
#----------------------------------------------------------------------
|
#----------------------------------------------------------------------
|
||||||
def __init__(self, engine, setting, algoName):
|
def __init__(self, engine, setting, algoName):
|
||||||
@ -168,23 +169,19 @@ class TwapAlgo(AlgoTemplate):
|
|||||||
self.putParamEvent(d)
|
self.putParamEvent(d)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
########################################################################
|
########################################################################
|
||||||
class TwapWidget(QtWidgets.QWidget):
|
class TwapWidget(AlgoWidget):
|
||||||
""""""
|
""""""
|
||||||
name = TwapAlgo.name
|
|
||||||
|
|
||||||
#----------------------------------------------------------------------
|
#----------------------------------------------------------------------
|
||||||
def __init__(self, algoEngine):
|
def __init__(self, algoEngine, parent=None):
|
||||||
"""Constructor"""
|
"""Constructor"""
|
||||||
super(TwapWidget, self).__init__()
|
super(TwapWidget, self).__init__(algoEngine, parent)
|
||||||
|
|
||||||
self.algoEngine = algoEngine
|
self.templateName = TwapAlgo.templateName
|
||||||
|
|
||||||
self.initUi()
|
|
||||||
|
|
||||||
#----------------------------------------------------------------------
|
#----------------------------------------------------------------------
|
||||||
def initUi(self):
|
def initAlgoLayout(self):
|
||||||
""""""
|
""""""
|
||||||
self.lineSymbol = QtWidgets.QLineEdit()
|
self.lineSymbol = QtWidgets.QLineEdit()
|
||||||
|
|
||||||
@ -245,14 +242,14 @@ class TwapWidget(QtWidgets.QWidget):
|
|||||||
grid.addWidget(self.spinPriceLevel, 6, 1)
|
grid.addWidget(self.spinPriceLevel, 6, 1)
|
||||||
grid.addWidget(Label(u'数量取整'), 7, 0)
|
grid.addWidget(Label(u'数量取整'), 7, 0)
|
||||||
grid.addWidget(self.spinMinVolume, 7, 1)
|
grid.addWidget(self.spinMinVolume, 7, 1)
|
||||||
grid.addWidget(buttonStart, 8, 0, 1, 2)
|
|
||||||
|
return grid
|
||||||
self.setLayout(grid)
|
|
||||||
|
|
||||||
#----------------------------------------------------------------------
|
#----------------------------------------------------------------------
|
||||||
def addAlgo(self):
|
def getAlgoSetting(self):
|
||||||
""""""
|
""""""
|
||||||
setting = {
|
setting = {
|
||||||
|
'templateName': TwapAlgo.templateName,
|
||||||
'vtSymbol': str(self.lineSymbol.text()),
|
'vtSymbol': str(self.lineSymbol.text()),
|
||||||
'direction': str(self.comboDirection.currentText()),
|
'direction': str(self.comboDirection.currentText()),
|
||||||
'targetPrice': float(self.spinPrice.value()),
|
'targetPrice': float(self.spinPrice.value()),
|
||||||
@ -263,10 +260,6 @@ class TwapWidget(QtWidgets.QWidget):
|
|||||||
'minVolume': float(self.spinMinVolume.value())
|
'minVolume': float(self.spinMinVolume.value())
|
||||||
}
|
}
|
||||||
|
|
||||||
self.algoEngine.addAlgo(TwapAlgo.name, setting)
|
return setting
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -240,4 +240,4 @@ class AlgoManager(QtWidgets.QWidget):
|
|||||||
def addAlgoWidget(self, widgetClass):
|
def addAlgoWidget(self, widgetClass):
|
||||||
""""""
|
""""""
|
||||||
w = widgetClass(self.algoEngine)
|
w = widgetClass(self.algoEngine)
|
||||||
self.tab.addTab(w, w.name)
|
self.tab.addTab(w, w.templateName)
|
66
vnpy/trader/app/algoTrading/uiAlgoWidget.py
Normal file
66
vnpy/trader/app/algoTrading/uiAlgoWidget.py
Normal file
@ -0,0 +1,66 @@
|
|||||||
|
# encoding: UTF-8
|
||||||
|
|
||||||
|
from vnpy.trader.uiQt import QtWidgets
|
||||||
|
|
||||||
|
|
||||||
|
########################################################################
|
||||||
|
class AlgoWidget(QtWidgets.QWidget):
|
||||||
|
"""算法启动组件"""
|
||||||
|
|
||||||
|
#----------------------------------------------------------------------
|
||||||
|
def __init__(self, algoEngine, parent=None):
|
||||||
|
"""Constructor"""
|
||||||
|
super(AlgoWidget, self).__init__(parent)
|
||||||
|
|
||||||
|
self.templateName = ''
|
||||||
|
self.algoEngine = algoEngine
|
||||||
|
|
||||||
|
self.initUi()
|
||||||
|
|
||||||
|
#----------------------------------------------------------------------
|
||||||
|
def initUi(self):
|
||||||
|
""""""
|
||||||
|
algoLayout = self.initAlgoLayout()
|
||||||
|
|
||||||
|
buttonStart = QtWidgets.QPushButton(u'启动算法')
|
||||||
|
buttonStart.clicked.connect(self.addAlgo)
|
||||||
|
buttonStart.setMinimumHeight(100)
|
||||||
|
|
||||||
|
buttonSave = QtWidgets.QPushButton(u'保存配置')
|
||||||
|
buttonSave.clicked.connect(self.saveAlgoSetting)
|
||||||
|
buttonSave.setMinimumHeight(100)
|
||||||
|
|
||||||
|
self.lineSettingName = QtWidgets.QLineEdit()
|
||||||
|
self.lineSettingName.setPlaceholderText(u'算法配置名称')
|
||||||
|
|
||||||
|
vbox = QtWidgets.QVBoxLayout()
|
||||||
|
vbox.addLayout(algoLayout)
|
||||||
|
vbox.addWidget(buttonStart)
|
||||||
|
vbox.addWidget(QtWidgets.QLabel(''))
|
||||||
|
vbox.addWidget(QtWidgets.QLabel(''))
|
||||||
|
vbox.addWidget(self.lineSettingName)
|
||||||
|
vbox.addWidget(buttonSave)
|
||||||
|
|
||||||
|
self.setLayout(vbox)
|
||||||
|
|
||||||
|
#----------------------------------------------------------------------
|
||||||
|
def addAlgo(self):
|
||||||
|
"""启动算法"""
|
||||||
|
setting = self.getAlgoSetting()
|
||||||
|
self.algoEngine.addAlgo(setting)
|
||||||
|
|
||||||
|
#----------------------------------------------------------------------
|
||||||
|
def saveAlgoSetting(self):
|
||||||
|
"""保存算法配置"""
|
||||||
|
setting = self.getAlgoSetting()
|
||||||
|
self.algoEngine.saveAlgoSetting(setting)
|
||||||
|
|
||||||
|
#----------------------------------------------------------------------
|
||||||
|
def initAlgoLayout(self):
|
||||||
|
"""初始化算法相关的组件部分"""
|
||||||
|
pass
|
||||||
|
|
||||||
|
#----------------------------------------------------------------------
|
||||||
|
def getAlgoSetting(self):
|
||||||
|
"""获取算法配置"""
|
||||||
|
pass
|
Loading…
Reference in New Issue
Block a user