From 3a35004bcf5e07347aacdcf23afd92acec57b286 Mon Sep 17 00:00:00 2001 From: cfdaily Date: Sun, 12 Apr 2026 10:19:56 +0800 Subject: [PATCH] auto-sync: 2026-04-12 10:19:56 --- logs/auto-sync.log | 1 + scripts/start_rpc_server.py | 71 +++++++++++++++++++++++++++++++++++++ 2 files changed, 72 insertions(+) create mode 100644 scripts/start_rpc_server.py diff --git a/logs/auto-sync.log b/logs/auto-sync.log index c43465f7..82158959 100644 --- a/logs/auto-sync.log +++ b/logs/auto-sync.log @@ -174,5 +174,6 @@ + diff --git a/scripts/start_rpc_server.py b/scripts/start_rpc_server.py new file mode 100644 index 00000000..ba540a09 --- /dev/null +++ b/scripts/start_rpc_server.py @@ -0,0 +1,71 @@ +#!/usr/bin/env python3 +""" +VNPY RPC 交易核心服务启动脚本 +启动 vnpy 交易核心,开启 RPC 服务端,供 VNPY Web Trader 连接 + +按照 vnpy 官方标准双进程架构: +- 这个进程:交易核心 + RPC 服务端 (端口 2018/4102) +- 另一个进程:VNPY Web Trader (端口 8000) +""" + +from vnpy.trader.event_engine import EventEngine +from vnpy.trader.main_engine import MainEngine +from vnpy.rpc import RpcServer + +# 导入你的 gateway +from vnpy_ctp import CtpGateway +# from vnpy_tap import TapGateway +# from vnpy_ib import IbGateway +# 其他 gateway 根据需要添加 + +# 导入你的策略应用 +from vnpy_ctastrategy import CtaStrategyApp +# from vnpy_portfoliostrategy import PortfolioStrategyApp +# from vnpy_spreadtrading import SpreadTradingApp + + +def main(): + # 创建事件引擎和主引擎 + event_engine = EventEngine() + main_engine = MainEngine(event_engine) + + # 添加 gateway + main_engine.add_gateway(CtpGateway) + # 如果你有其他gateway,在这里添加 + # main_engine.add_gateway(TapGateway) + + # 添加策略应用 + main_engine.add_app(CtaStrategyApp) + # 如果需要其他应用,在这里添加 + # main_engine.add_app(PortfolioStrategyApp) + + # 启动 RPC 服务端 + # 请求端口: 2018,订阅端口: 4102 + rpc_server = RpcServer( + main_engine, + ("0.0.0.0", 2018), + ("0.0.0.0", 4102) + ) + + print("=" * 50) + print("VNPY RPC 交易核心服务启动") + print(f"RPC 请求地址: tcp://0.0.0.0:2018") + print(f"RPC 订阅地址: tcp://0.0.0.0:4102") + print("请确保已经在 vnpy 配置中配置好你的 gateway") + print("=" * 50) + + # 启动 RPC 服务 + rpc_server.start() + + # 保持进程运行 + print("RPC 服务已启动,按 Ctrl+C 退出") + try: + input() + except (KeyboardInterrupt, EOFError): + pass + + print("RPC 服务退出") + + +if __name__ == "__main__": + main()