def runServer(): """运行服务器""" try: log_file_name = os.path.abspath( os.path.join(os.path.dirname(os.path.abspath(__file__)), 'logs', u'noUiMain.log')) except Exception as ex: print(u'Use local dict:{0}'.format(os.getcwd())) log_file_name = os.path.abspath( os.path.join(os.getcwd(), 'logs', u'noUiMain.log')) setup_logger(filename=log_file_name, debug=False) # Req/Publish端口 try: zmqAddressDict = globalSetting['ZMQ'] zmqAddress = zmqAddressDict[AUTO_CONNCET_GW] reqAddress = zmqAddress['ReqAddress'] pubAddress = zmqAddress['PubAddress'] except: reqAddress = 'tcp://*:2014' pubAddress = 'tcp://*:2016' # 创建并启动服务器 server = VtServer(reqAddress, pubAddress) server.start() printLog('-' * 50) printLog(u'Request端口:{0}'.format(reqAddress)) printLog(u'Publish端口:{0}'.format(pubAddress)) printLog(u'Trader服务器已启动')
def createLogger(self, strategy_name=None): """ 创建日志记录 :return: """ currentFolder = os.path.abspath(os.path.join(os.getcwd(), 'logs')) if os.path.isdir(currentFolder): # 如果工作目录下,存在data子目录,就使用data子目录 path = currentFolder else: # 否则,使用缺省保存目录 vnpy/trader/app/ctaStrategy/data path = os.path.abspath( os.path.join(os.path.dirname(__file__), '..', '..', 'logs')) if strategy_name is None: filename = os.path.abspath(os.path.join(path, 'AlgoEngine')) print(u'create logger:{}'.format(filename)) self.logger = setup_logger(filename=filename, name='AlgoEngine', debug=True) else: filename = os.path.abspath(os.path.join(path, str(strategy_name))) print(u'create logger:{}'.format(filename)) self.strategy_loggers[strategy_name] = setup_logger( filename=filename, name=str(strategy_name), debug=True)
def runServer(): """运行服务器""" try: log_file_name = os.path.abspath(os.path.join(os.path.dirname(os.path.abspath(__file__)), 'logs', u'noUiMain.log')) except Exception as ex: print( u'Use local dict:{0}'.format(os.getcwd())) log_file_name = os.path.abspath(os.path.join(os.getcwd(), 'logs', u'noUiMain.log')) setup_logger(filename=log_file_name, debug=False) # Req/Publish端口 try: zmqAddressDict = globalSetting['ZMQ'] zmqAddress = zmqAddressDict[AUTO_CONNCET_GW] reqAddress = zmqAddress['ReqAddress'] pubAddress = zmqAddress['PubAddress'] except: reqAddress = 'tcp://*:2014' pubAddress = 'tcp://*:2016' # 创建并启动服务器 server = VtServer(reqAddress, pubAddress) server.start() printLog('-' * 50) printLog(u'Request端口:{0}'.format(reqAddress)) printLog(u'Publish端口:{0}'.format(pubAddress)) printLog(u'Trader服务器已启动')
def main(): """主程序入口""" logger = setup_logger(filename='logs/vnpy.log', debug=False) # 创建Qt应用对象 qApp = createQApp() # 创建事件引擎 ee = EventEngine2() # 初始化主引擎和主窗口对象 mainEngine = MainEngine(ee) mainEngine.logger = logger # 添加Gatway for gw_name in init_gateway_names['CTP']: print('add {0}'.format(gw_name)) mainEngine.addGateway(ctpGateway, gw_name) # 添加应用 mainEngine.addApp(ctaStrategy) mainEngine.addApp(riskManager) mainEngine.addApp(spreadTrading) mainWindow = MainWindow(mainEngine, ee) mainWindow.showMaximized() # 在主线程中启动Qt事件循环 sys.exit(qApp.exec_())
def main(): """主程序入口""" logger = setup_logger(filename='logs/vnpy', debug=True) # 创建Qt应用对象 qApp = createQApp() # 创建事件引擎 ee = EventEngine2() # 初始化主引擎和主窗口对象 mainEngine = MainEngine(ee) mainEngine.logger = logger # 添加Gatway for gw_name in init_gateway_names.keys(): for gw_conf in init_gateway_names[gw_name]: print('add {}'.format(gw_conf)) mainEngine.addGateway(gateway_model_dict[gw_name], gw_conf) # 自动连接 # mainEngine.connect(gw_conf) # 添加应用 mainEngine.addApp(ctaStrategy) #mainEngine.addApp(riskManager) mainEngine.addApp(spreadTrading) mainWindow = MainWindow(mainEngine, ee) mainWindow.showMaximized() # 在主线程中启动Qt事件循环 sys.exit(qApp.exec_())
def runChildProcess(): """子进程运行函数""" print('-' * 20) # 创建日志引擎 le = setup_logger(filename='logs/vnpy.log', debug=False) # 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)
def createLogger(self): """ 创建日志记录 :return: """ currentFolder = os.path.abspath(os.path.join(os.getcwd(), 'logs')) if os.path.isdir(currentFolder): # 如果工作目录下,存在data子目录,就使用data子目录 path = currentFolder else: # 否则,使用缺省保存目录 vnpy/trader/app/ctaStrategy/data path = os.path.abspath(os.path.join(os.path.dirname(__file__), 'logs')) filename = os.path.abspath(os.path.join(path, 'Gateway')) print(u'create logger:{}'.format(filename)) self.logger = setup_logger(filename=filename, name='vtGateway', debug=True)
def runParentProcess(): """父进程运行函数""" # 创建日志引擎 le = setup_logger(filename='logs/vnpy.log', debug=False) le.info(u'启动行情记录守护父进程') DAY_START = time(8, 57) # 日盘启动和停止时间 DAY_END = time(15, 18) NIGHT_START = time(20, 57) # 夜盘启动和停止时间 NIGHT_END = time(2, 33) 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 ((datetime.today().weekday() == 6) or (datetime.today().weekday() == 5 and currentTime > NIGHT_END) or (datetime.today().weekday() == 0 and currentTime < DAY_START)): recording = False # 记录时间则需要启动子进程 if recording and p is None: le.info(u'启动子进程') p = multiprocessing.Process(target=runChildProcess) p.start() le.info(u'子进程启动成功') # 非记录时间则退出子进程 if not recording and p is not None: le.info(u'关闭子进程') p.terminate() p.join() p = None le.info(u'子进程关闭成功') sleep(5)
pass # 从csv文件进行回测 if __name__ == '__main__': # 提供直接双击回测的功能 # 导入PyQt4的包是为了保证matplotlib使用PyQt4而不是PySide,防止初始化出错 from vnpy.trader.app.ctaStrategy.ctaBacktesting import * from vnpy.trader.setup_logger import setup_logger cta_engine_path = os.path.abspath(os.path.join(os.path.dirname(__file__), '..')) log_file_name = os.path.abspath(os.path.join(cta_engine_path, 'TestLogs', '{0}_{1}.log'.format(OneStep1MAStrategy.className, datetime.now().strftime('%m%d_%H%M')))) setup_logger( filename=log_file_name, debug=False) # 创建回测引擎 engine = BacktestingEngine() # 设置引擎的回测模式为bar engine.setBacktestingMode(engine.BAR_MODE) # 设置回测用的数据起始日期 engine.setStartDate('20180101') # 设置回测用的数据结束日期 engine.setEndDate('20180131') engine.setDatabase(dbName='VnTrader_1Min_Db',symbol='XBTUSD.Bitmex')
# 加载底层接口 from vnpy.trader.gateway import ctpGateway # 初始化的接口模块,以及其指定的名称,CTP是模块,value,是该模块下的多个连接配置文件,如 CTP_JR_connect.json init_gateway_names = { 'CTP': ['CTP', 'CTP_Prod', 'CTP_Post', 'CTP_EBF', 'CTP_JR', 'CTP_JR2'] } # 文件路径名 path = os.path.abspath(os.path.dirname(__file__)) ICON_FILENAME = 'vnpy.ico' ICON_FILENAME = os.path.join(path, ICON_FILENAME) from vnpy.trader.setup_logger import setup_logger setup_logger(filename='logs/vnpy_{0}.log'.format( datetime.now().strftime('%m%d_%H%M')), debug=False) # ---------------------------------------------------------------------- def main(): """主程序入口""" # 重载sys模块,设置默认字符串编码方式为utf8 reload(sys) sys.setdefaultencoding('utf8') """ # 设置Windows底部任务栏图标 if 'Windows' in platform.uname(): ctypes.windll.shell32.SetCurrentProcessExplicitAppUserModelID('vn.trader') # 初始化Qt应用对象