diff --git a/prod/linux/index_publisher/run_idx_publisher.py b/prod/linux/index_publisher/run_idx_publisher.py new file mode 100644 index 00000000..74824845 --- /dev/null +++ b/prod/linux/index_publisher/run_idx_publisher.py @@ -0,0 +1,126 @@ +# flake8: noqa + +import os +import sys +import multiprocessing +from time import sleep +from datetime import datetime, time +from logging import INFO,DEBUG + + +# 将repostory的目录i,作为根目录,添加到系统环境中。 +ROOT_PATH = os.path.abspath(os.path.join(os.path.dirname(__file__), '..', '..', '..')) +sys.path.append(ROOT_PATH) +print(f'append {ROOT_PATH} into sys.path') + +from vnpy.event import EventEngine +from vnpy.trader.setting import SETTINGS +from vnpy.trader.engine import MainEngine +from vnpy.gateway.ctp import CtpGateway +from vnpy.app.index_tick_publisher import IndexTickPublisherApp +from vnpy.app.cta_strategy.base import EVENT_CTA_LOG +from vnpy.trader.util_pid import update_pid + +SETTINGS["log.active"] = True +SETTINGS["log.level"] = DEBUG +SETTINGS["log.console"] = True + + +rabbit_setting = { + "host": "192.168.1.211;192.168.1.212" +} +ctp_setting = { + "用户名": "xxxx", + "密码": "xxxx", + "经纪商代码": "0187", + "交易服务器": "tcp://114.80.225.2:41205", + "行情服务器": "tcp://114.80.225.2:41213", + "交易服务器2": "tcp://114.80.225.10:41205", + "行情服务器2": "tcp://114.80.225.10:41213", + "交易服务器_old": "tcp://124.74.247.179:41201", + "行情服务器_old": "tcp://124.74.247.179:41212", + "产品名称": "client_huafu_2.0.0", + "授权编码": "xxxxx", + "产品信息": "" +} + +update_pid() + + +def run_child(): + """ + Running in the child process. + """ + SETTINGS["log.file"] = True + + event_engine = EventEngine() + main_engine = MainEngine(event_engine) + #main_engine.add_gateway(CtpGateway) + publisher_engine = main_engine.add_app(IndexTickPublisherApp) + main_engine.write_log("主引擎创建成功") + + log_engine = main_engine.get_engine("log") + event_engine.register(EVENT_CTA_LOG, log_engine.process_log_event) + main_engine.write_log("注册日志事件监听") + + sleep(10) + main_engine.write_log("启动连接行情 & rabbit") + publisher_engine.connect(md_address=ctp_setting.get("行情服务器"), + userid=ctp_setting.get("用户名"), + password=ctp_setting.get("密码"), + brokerid=ctp_setting.get("经纪商代码"), + rabbit_config=rabbit_setting) + # publisher_engine.connect( + # rabbit_config=rabbit_setting) + while True: + sleep(1) + + +def run_parent(): + """ + Running in the parent process. + """ + print("启动CTA策略守护父进程") + + # Chinese futures market trading period (day/night) + DAY_START = time(8, 45) + DAY_END = time(15, 30) + + NIGHT_START = time(20, 45) + NIGHT_END = time(2, 45) + + child_process = None + + while True: + current_time = datetime.now().time() + trading = False + + # Check whether in trading period + if ( + (current_time >= DAY_START and current_time <= DAY_END) + or (current_time >= NIGHT_START) + or (current_time <= NIGHT_END) + ): + trading = True + + # Start child process in trading period + if trading and child_process is None: + print("启动子进程") + child_process = multiprocessing.Process(target=run_child) + child_process.start() + print("子进程启动成功") + + # 非记录时间则退出子进程 + if not trading and child_process is not None: + print("关闭子进程") + child_process.terminate() + child_process.join() + child_process = None + print("子进程关闭成功") + + sleep(5) + + +if __name__ == "__main__": + run_parent() + #run_child()