예제 #1
0
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)
예제 #2
0
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, ))
예제 #3
0
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')
예제 #4
0
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)
예제 #5
0
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_()
예제 #6
0
파일: MySave.py 프로젝트: kimiscircle/vnpy
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')
예제 #7
0
파일: vtMain_cmd.py 프로젝트: allenwwg/vnpy
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