vnpy/examples/DataRecording/runDataRecording.py

94 lines
2.7 KiB
Python
Raw Normal View History

# 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, LogEngine
from vnpy.trader.gateway import ctpGateway
from vnpy.trader.app import dataRecorder
2017-09-20 13:33:12 +00:00
#----------------------------------------------------------------------
def runChildProcess():
"""子进程运行函数"""
print '-'*20
2017-09-20 13:33:12 +00:00
# 创建日志引擎
le = LogEngine()
le.setLogLevel(le.LEVEL_INFO)
le.addConsoleHandler()
le.info(u'启动行情记录运行子进程')
2017-09-20 13:33:12 +00:00
ee = EventEngine2()
le.info(u'事件引擎创建成功')
2017-09-20 13:33:12 +00:00
me = MainEngine(ee)
me.addGateway(ctpGateway)
me.addApp(dataRecorder)
le.info(u'主引擎创建成功')
2017-09-20 13:33:12 +00:00
ee.register(EVENT_LOG, le.processLogEvent)
le.info(u'注册日志事件监听')
2017-09-20 13:33:12 +00:00
me.connect('CTP')
le.info(u'连接CTP接口')
2017-09-20 13:33:12 +00:00
while True:
sleep(1)
#----------------------------------------------------------------------
def runParentProcess():
"""父进程运行函数"""
# 创建日志引擎
le = LogEngine()
le.setLogLevel(le.LEVEL_INFO)
le.addConsoleHandler()
le.info(u'启动行情记录守护父进程')
2017-09-20 13:33:12 +00:00
DAY_START = time(8, 57) # 日盘启动和停止时间
DAY_END = time(15, 18)
NIGHT_START = time(20, 57) # 夜盘启动和停止时间
NIGHT_END = time(2, 33)
2017-09-20 13:33:12 +00:00
p = None # 子进程句柄
2017-09-20 13:33:12 +00:00
while True:
currentTime = datetime.now().time()
recording = False
2017-09-20 13:33:12 +00:00
# 判断当前处于的时间段
if ((currentTime >= DAY_START and currentTime <= DAY_END) or
(currentTime >= NIGHT_START) or
(currentTime <= NIGHT_END)):
recording = True
2017-09-20 13:33:12 +00:00
# 过滤周末时间段:周六全天,周五夜盘,周日日盘
if ((datetime.today().weekday() == 6) or
(datetime.today().weekday() == 5 and currentTime > NIGHT_END) or
(datetime.today().weekday() == 0 and currentTime < DAY_START)):
2017-09-12 05:12:58 +00:00
recording = False
2017-09-20 13:33:12 +00:00
# 记录时间则需要启动子进程
if recording and p is None:
le.info(u'启动子进程')
p = multiprocessing.Process(target=runChildProcess)
p.start()
le.info(u'子进程启动成功')
2017-09-20 13:33:12 +00:00
# 非记录时间则退出子进程
if not recording and p is not None:
le.info(u'关闭子进程')
p.terminate()
p.join()
p = None
le.info(u'子进程关闭成功')
2017-09-20 13:33:12 +00:00
sleep(5)
if __name__ == '__main__':
#runChildProcess()
2017-09-12 05:12:58 +00:00
runParentProcess()