def runChildProcess(): """子进程运行函数""" print '-' * 20 # 创建日志引擎 le = LogEngine() le.setLogLevel(le.LEVEL_INFO) le.addConsoleHandler() le.info(u'启动行情记录运行子进程') ee = EventEngine2() le.info(u'事件引擎创建成功') me = MainEngine(ee) me.addGateway(ctpGateway) me.addApp(dataRecorder) le.info(u'主引擎创建成功') ee.register(EVENT_LOG, le.processLogEvent) ee.register(EVENT_ERROR, processErrorEvent) le.info(u'注册日志事件监听') me.connect('CTP') le.info(u'连接CTP接口') while True: sleep(1)
class Marketing(object): def __init__(self, reqAddress, pubAddress): self.reqAddr = reqAddress self.pubAddr = pubAddress self.mainEngine = None self.isRunning = False def start(self, gatewayList): """ :param gatewayList: such as ['CHBTC', 'HUOBI'] :type gatewayList: :return: :rtype: """ if self.isRunning: return self.isRunning = True # 创建主引擎对象 self.mainEngine = MainEngine(enableCtaEngine=False, enableDrEngine=True, enableRmEngine=False) # 启动server server = VtServer(self.reqAddr, self.pubAddr, self.mainEngine) server.start() self._connectGateway(gatewayList) printLog('-' * 50) printLog(u'marketing服务器已启动') # 进入主循环 self.isRunning = True self.onRunging() server.stopServer() self.mainEngine.exit() def onRunging(self): cnt = 0 while self.isRunning: if cnt >= 10: cnt = 0 printLog(u'请输入Ctrl-C来关闭服务器') cnt += 1 sleep(1) def _connectGateway(self, gatewayList): for gateway in gatewayList: # Marketing不需要对账户信息和交易信息进行查询 self.mainEngine.gatewayDict[gateway].setQryEnabled(False) self.mainEngine.connect(gateway) printLog('Gateway(%s) connect finished.' % (gateway, ))
def main(): """主程序入口""" # 重载sys模块,设置默认字符串编码方式为utf8 reload(sys) sys.setdefaultencoding('utf8') # 初始化主引擎和主窗口对象 mainEngine = MainEngine() mainEngine.connect('CTP') time.sleep(5) mainEngine.ctaEngine.loadSetting() mainEngine.ctaEngine.initStrategy('tradeTest') mainEngine.ctaEngine.startStrategy('tradeTest')
def run(gateway, strategyName): reload(sys) sys.setdefaultencoding('utf-8') """主程序入口""" mainEngine = MainEngine() logPrint = LogPrint(mainEngine) print "connect MongoDB.........." mainEngine.dbConnect() time.sleep(5) print "connet %s.........." % gateway mainEngine.connect(gateway) time.sleep(5) print "start strategy %s......." % strategyName mainEngine.ctaEngine.loadSetting() mainEngine.ctaEngine.initStrategy(strategyName) mainEngine.ctaEngine.startStrategy(strategyName)
def main(): app = QCoreApplication(sys.argv) mainEngine = MainEngine() # 若需要连接数据库,则启动 mainEngine.dbConnect() # 指定的连接配置 mainEngine.connect('CTP_Prod') # 加载cta的配置 mainEngine.ctaEngine.loadSetting() # 初始化策略,如果多个,则需要逐一初始化多个 mainEngine.ctaEngine.initStrategy(u'S26_PTA套利') # 逐一启动策略 mainEngine.ctaEngine.startStrategy(u'S26_PTA套利') logM = LogMonitor(mainEngine.eventEngine) errorM = ErrorMonitor(mainEngine.eventEngine) tradeM = TradeMonitor(mainEngine.eventEngine) orderM = OrderMonitor(mainEngine.eventEngine, mainEngine) positionM = PositionMonitor(mainEngine.eventEngine) accountM = AccountMonitor(mainEngine.eventEngine) app.exec_()
def main(): """主程序入口""" # 重载sys模块,设置默认字符串编码方式为utf8 reload(sys) sys.setdefaultencoding('utf8') # 设置Windows底部任务栏图标 if platform.uname() == 'Windows': ctypes.windll.shell32.SetCurrentProcessExplicitAppUserModelID('vn.trader') # 初始化Qt应用对象 app = QtCore.QCoreApplication(sys.argv) # 初始化主引擎和主窗口对象 mainEngine = MainEngine() # 在主线程中启动Qt事件循环 sys.exit(app.exec_()) # 连接mongo数据库 mainEngine.dbConnect() # 连接CTP接口 mainEngine.connect('CTP')
class EventLoopManager(object): def __init__(self): self.makeLog('Event loop manager started', False) self.engineStarted = False self.mainEngine = MainEngine() self.eventEngine = EventEngine2() # 注册事件监听 self.registerEvent() self.mainEngine.dbConnect() time.sleep(2) ''' self.mainEngine.connect('CTP') time.sleep(3) self.mainEngine.ctaEngine.loadSetting() self.mainEngine.ctaEngine.initStrategy('double ema') ''' self.eventEngine.start() def start(self): self.eventEngine.start() # 注册事件监听 self.registerEvent() def onEventLog(self, event): log = event.dict_['data'] logContent = ' '.join([log.logTime, log.logContent, '\n']) self.makeLog(logContent) def onEventTimer(self, event): today = date.weekday(datetime.now().date()) if today == 5 or today == 6:#weekends return hour = datetime.now().hour #log in if(self.engineStarted == False and (hour in [9, 10, 11, 13, 20, 21, 22, 23, 24, 1])#trading hour ): #self.makeLog('Starting CTP double ema') self.run() return time.sleep(2) #log out if(self.engineStarted == True and (hour in [14, 2]) ): #self.makeLog('Ending CTP double ema') self.stop() return def registerEvent(self): """注册事件监听""" self.mainEngine.eventEngine.register(EVENT_LOG, self.onEventLog) self.mainEngine.eventEngine.register(EVENT_CTA_LOG, self.onEventLog) self.eventEngine.register(EVENT_TIMER, self.onEventTimer) #self.makeLog('Events registerred',False) def run(self): self.mainEngine.connect('CTP') time.sleep(3) self.mainEngine.drEngine.loadSetting() self.mainEngine.ctaEngine.loadSetting() self.mainEngine.ctaEngine.initStrategy('double ema') self.mainEngine.ctaEngine.startStrategy('double ema') self.engineStarted = True def stop(self): try: #self.mainEngine.ctaEngine.stopStrategy('double ema') #self.mainEngine.exit() #time.sleep(2) self.engineStarted = False except Exception as e: print e def makeLog(self, content, sendemail = False): if sendemail == True: send_email(subject = content) print content