增加CTA模块的策略隔夜持仓保存功能
This commit is contained in:
parent
9e0d28c12a
commit
0dc30ce4e2
@ -29,6 +29,8 @@ STOPORDERPREFIX = 'CtaStopOrder.'
|
||||
|
||||
# 数据库名称
|
||||
SETTING_DB_NAME = 'VnTrader_Setting_Db'
|
||||
POSITION_DB_NAME = 'VnTrader_Position_Db'
|
||||
|
||||
TICK_DB_NAME = 'VnTrader_Tick_Db'
|
||||
DAILY_DB_NAME = 'VnTrader_Daily_Db'
|
||||
MINUTE_DB_NAME = 'VnTrader_1Min_Db'
|
||||
@ -40,6 +42,7 @@ ENGINETYPE_TRADING = 'trading' # 实盘
|
||||
# CTA引擎中涉及的数据类定义
|
||||
from vtConstant import EMPTY_UNICODE, EMPTY_STRING, EMPTY_FLOAT, EMPTY_INT
|
||||
|
||||
|
||||
########################################################################
|
||||
class StopOrder(object):
|
||||
"""本地停止单"""
|
||||
|
@ -481,6 +481,8 @@ class CtaEngine(object):
|
||||
|
||||
for setting in l:
|
||||
self.loadStrategy(setting)
|
||||
|
||||
self.loadPosition()
|
||||
|
||||
#----------------------------------------------------------------------
|
||||
def getStrategyVar(self, name):
|
||||
@ -535,6 +537,35 @@ class CtaEngine(object):
|
||||
content = '\n'.join([u'策略%s触发异常已停止' %strategy.name,
|
||||
traceback.format_exc()])
|
||||
self.writeCtaLog(content)
|
||||
|
||||
#----------------------------------------------------------------------
|
||||
def savePosition(self):
|
||||
"""保存所有策略的持仓情况到数据库"""
|
||||
for strategy in self.strategyDict.values():
|
||||
flt = {'name': strategy.name,
|
||||
'vtSymbol': strategy.vtSymbol}
|
||||
|
||||
d = {'name': strategy.name,
|
||||
'vtSymbol': strategy.vtSymbol,
|
||||
'pos': strategy.pos}
|
||||
|
||||
self.mainEngine.dbUpdate(POSITION_DB_NAME, strategy.className,
|
||||
d, flt, True)
|
||||
|
||||
content = '策略%s持仓保存成功' %strategy.name
|
||||
self.writeCtaLog(content)
|
||||
|
||||
#----------------------------------------------------------------------
|
||||
def loadPosition(self):
|
||||
"""从数据库载入策略的持仓情况"""
|
||||
for strategy in self.strategyDict.values():
|
||||
flt = {'name': strategy.name,
|
||||
'vtSymbol': strategy.vtSymbol}
|
||||
|
||||
cx = self.mainEngine.dbQuery(POSITION_DB_NAME, strategy.className, flt)
|
||||
if cx:
|
||||
for d in cx:
|
||||
strategy.pos = d['pos']
|
||||
|
||||
|
||||
########################################################################
|
||||
|
@ -272,8 +272,9 @@ if __name__ == '__main__':
|
||||
# 跑优化
|
||||
setting = OptimizationSetting() # 新建一个优化任务设置对象
|
||||
setting.setOptimizeTarget('capital') # 设置优化排序的目标是策略净盈利
|
||||
setting.addParameter('atrLength', 11, 20, 1) # 增加第一个优化参数atrLength,起始11,结束12,步进1
|
||||
setting.addParameter('atrLength', 12, 20, 2) # 增加第一个优化参数atrLength,起始11,结束12,步进1
|
||||
setting.addParameter('atrMa', 20, 30, 5) # 增加第二个优化参数atrMa,起始20,结束30,步进1
|
||||
setting.addParameter('rsiLength', 5) # 增加一个固定数值的参数
|
||||
|
||||
# 性能测试环境:I7-3770,主频3.4G, 8核心,内存16G,Windows 7 专业版
|
||||
# 测试时还跑着一堆其他的程序,性能仅供参考
|
||||
@ -281,9 +282,9 @@ if __name__ == '__main__':
|
||||
start = time.time()
|
||||
|
||||
# 运行单进程优化函数,自动输出结果,耗时:359秒
|
||||
#engine.runOptimization(AtrRsiStrategy, setting)
|
||||
engine.runOptimization(AtrRsiStrategy, setting)
|
||||
|
||||
# 多进程优化,耗时:89秒
|
||||
engine.runParallelOptimization(AtrRsiStrategy, setting)
|
||||
#engine.runParallelOptimization(AtrRsiStrategy, setting)
|
||||
|
||||
print u'耗时:%s' %(time.time()-start)
|
@ -174,11 +174,13 @@ class CtaEngineManager(QtGui.QWidget):
|
||||
initAllButton = QtGui.QPushButton(u'全部初始化')
|
||||
startAllButton = QtGui.QPushButton(u'全部启动')
|
||||
stopAllButton = QtGui.QPushButton(u'全部停止')
|
||||
savePositionButton = QtGui.QPushButton(u'保存持仓')
|
||||
|
||||
loadButton.clicked.connect(self.load)
|
||||
initAllButton.clicked.connect(self.initAll)
|
||||
startAllButton.clicked.connect(self.startAll)
|
||||
stopAllButton.clicked.connect(self.stopAll)
|
||||
savePositionButton.clicked.connect(self.ctaEngine.savePosition)
|
||||
|
||||
# 滚动区域,放置所有的CtaStrategyManager
|
||||
self.scrollArea = QtGui.QScrollArea()
|
||||
@ -195,6 +197,7 @@ class CtaEngineManager(QtGui.QWidget):
|
||||
hbox2.addWidget(initAllButton)
|
||||
hbox2.addWidget(startAllButton)
|
||||
hbox2.addWidget(stopAllButton)
|
||||
hbox2.addWidget(savePositionButton)
|
||||
hbox2.addStretch()
|
||||
|
||||
vbox = QtGui.QVBoxLayout()
|
||||
|
Loading…
Reference in New Issue
Block a user