更新行情记录工具,新增无图形界面CTA策略运行示例
This commit is contained in:
parent
ed7e7a7728
commit
f58f2be4ee
104
examples/CtaTrading/runCtaTrading.py
Normal file
104
examples/CtaTrading/runCtaTrading.py
Normal file
@ -0,0 +1,104 @@
|
||||
# encoding: UTF-8
|
||||
|
||||
import multiprocessing
|
||||
from time import sleep
|
||||
from datetime import datetime, time
|
||||
|
||||
from vnpy.event import EventEngine2
|
||||
from vnpy.trader.vtEvent import EVENT_LOG
|
||||
from vnpy.trader.vtEngine import MainEngine
|
||||
from vnpy.trader.gateway import ctpGateway
|
||||
from vnpy.trader.app import ctaStrategy
|
||||
from vnpy.trader.app.ctaStrategy.ctaBase import EVENT_CTA_LOG
|
||||
|
||||
#----------------------------------------------------------------------
|
||||
def printLog(content):
|
||||
"""输出日志"""
|
||||
t = datetime.now().strftime('%Y-%m-%d %H:%M:%S')
|
||||
print '%s\t%s' %(t, content)
|
||||
|
||||
#----------------------------------------------------------------------
|
||||
def processLogEvent(event):
|
||||
"""处理日志事件"""
|
||||
log = event.dict_['data']
|
||||
content = '%s:%s' %(log.gatewayName, log.logContent)
|
||||
printLog(content)
|
||||
|
||||
#----------------------------------------------------------------------
|
||||
def runChildProcess():
|
||||
"""子进程运行函数"""
|
||||
print '-'*20
|
||||
printLog(u'启动CTA策略运行子进程')
|
||||
|
||||
ee = EventEngine2()
|
||||
printLog(u'事件引擎创建成功')
|
||||
|
||||
me = MainEngine(ee)
|
||||
me.addGateway(ctpGateway)
|
||||
me.addApp(ctaStrategy)
|
||||
printLog(u'主引擎创建成功')
|
||||
|
||||
ee.register(EVENT_LOG, processLogEvent)
|
||||
ee.register(EVENT_CTA_LOG, processLogEvent)
|
||||
printLog(u'注册日志事件监听')
|
||||
|
||||
me.connect('CTP')
|
||||
printLog(u'连接CTP接口')
|
||||
|
||||
cta = me.appDict[ctaStrategy.appName]
|
||||
|
||||
cta.loadSetting()
|
||||
printLog(u'CTA策略载入成功')
|
||||
|
||||
cta.initAll()
|
||||
printLog(u'CTA策略初始化成功')
|
||||
|
||||
cta.startAll()
|
||||
printLog(u'CTA策略启动成功')
|
||||
|
||||
while True:
|
||||
sleep(1)
|
||||
|
||||
#----------------------------------------------------------------------
|
||||
def runParentProcess():
|
||||
"""父进程运行函数"""
|
||||
printLog(u'启动CTA策略守护父进程')
|
||||
|
||||
DAY_START = time(8, 45) # 日盘启动和停止时间
|
||||
DAY_END = time(15, 30)
|
||||
|
||||
NIGHT_START = time(20, 45) # 夜盘启动和停止时间
|
||||
NIGHT_END = time(2, 45)
|
||||
|
||||
p = None # 子进程句柄
|
||||
|
||||
while True:
|
||||
currentTime = datetime.now().time()
|
||||
recording = False
|
||||
|
||||
# 判断当前处于的时间段
|
||||
if ((currentTime >= DAY_START and currentTime <= DAY_END) or
|
||||
(currentTime >= NIGHT_START) or
|
||||
(currentTime <= NIGHT_END)):
|
||||
recording = True
|
||||
|
||||
# 记录时间则需要启动子进程
|
||||
if recording and p is None:
|
||||
printLog(u'启动子进程')
|
||||
p = multiprocessing.Process(target=runChildProcess)
|
||||
p.start()
|
||||
printLog(u'子进程启动成功')
|
||||
|
||||
# 非记录时间则退出子进程
|
||||
if not recording and p is not None:
|
||||
printLog(u'关闭子进程')
|
||||
p.terminate()
|
||||
p.join()
|
||||
p = None
|
||||
printLog(u'子进程关闭成功')
|
||||
|
||||
sleep(5)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
runParentProcess()
|
@ -7,7 +7,8 @@ from datetime import datetime, time
|
||||
from vnpy.event import EventEngine2
|
||||
from vnpy.trader.vtEvent import EVENT_LOG
|
||||
from vnpy.trader.vtEngine import MainEngine
|
||||
|
||||
from vnpy.trader.gateway import ctpGateway
|
||||
from vnpy.trader.app import dataRecorder
|
||||
|
||||
#----------------------------------------------------------------------
|
||||
def printLog(content):
|
||||
@ -32,6 +33,8 @@ def runChildProcess():
|
||||
printLog(u'事件引擎创建成功')
|
||||
|
||||
me = MainEngine(ee)
|
||||
me.addGateway(ctpGateway)
|
||||
me.addApp(dataRecorder)
|
||||
printLog(u'主引擎创建成功')
|
||||
|
||||
ee.register(EVENT_LOG, processLogEvent)
|
||||
|
11
examples/README.md
Normal file
11
examples/README.md
Normal file
@ -0,0 +1,11 @@
|
||||
# vn.py项目的应用示例
|
||||
|
||||
本文件夹中的内容主要是关于如何在交易业务中使用vn.py的示例
|
||||
|
||||
* VnTrader:最常用的vn.py图形交易界面
|
||||
|
||||
* DataRecording:全自动行情记录工具(无需用户每日定时重启)
|
||||
|
||||
* CtaTrading:纯命令行模式的CTA策略交易(尽管同样实现了无人值守,但强烈建议每天启动时人工检查,为自己的PNL负责)
|
||||
|
||||
* CtaBacktesting:CTA策略的回测和优化
|
@ -465,6 +465,24 @@ class CtaEngine(object):
|
||||
else:
|
||||
self.writeCtaLog(u'策略实例不存在:%s' %name)
|
||||
|
||||
#----------------------------------------------------------------------
|
||||
def initAll(self):
|
||||
"""全部初始化"""
|
||||
for name in self.strategyDict.keys():
|
||||
self.initStrategy(name)
|
||||
|
||||
#----------------------------------------------------------------------
|
||||
def startAll(self):
|
||||
"""全部启动"""
|
||||
for name in self.strategyDict.keys():
|
||||
self.startStrategy(name)
|
||||
|
||||
#----------------------------------------------------------------------
|
||||
def stopAll(self):
|
||||
"""全部停止"""
|
||||
for name in self.strategyDict.keys():
|
||||
self.stopStrategy(name)
|
||||
|
||||
#----------------------------------------------------------------------
|
||||
def saveSetting(self):
|
||||
"""保存策略配置"""
|
||||
|
@ -228,20 +228,17 @@ class CtaEngineManager(QtWidgets.QWidget):
|
||||
#----------------------------------------------------------------------
|
||||
def initAll(self):
|
||||
"""全部初始化"""
|
||||
for name in self.ctaEngine.strategyDict.keys():
|
||||
self.ctaEngine.initStrategy(name)
|
||||
self.ctaEngine.initAll()
|
||||
|
||||
#----------------------------------------------------------------------
|
||||
def startAll(self):
|
||||
"""全部启动"""
|
||||
for name in self.ctaEngine.strategyDict.keys():
|
||||
self.ctaEngine.startStrategy(name)
|
||||
self.ctaEngine.startAll()
|
||||
|
||||
#----------------------------------------------------------------------
|
||||
def stopAll(self):
|
||||
"""全部停止"""
|
||||
for name in self.ctaEngine.strategyDict.keys():
|
||||
self.ctaEngine.stopStrategy(name)
|
||||
self.ctaEngine.stopAll()
|
||||
|
||||
#----------------------------------------------------------------------
|
||||
def load(self):
|
||||
|
Loading…
Reference in New Issue
Block a user