Initial commit: modular trading service architecture
This commit is contained in:
@@ -0,0 +1,97 @@
|
||||
#!/usr/bin/env python3
|
||||
# -*- coding: utf-8 -*-
|
||||
"""
|
||||
交易服务主文件
|
||||
"""
|
||||
|
||||
import sys
|
||||
import os
|
||||
import uvloop
|
||||
import uvicorn
|
||||
from fastapi import FastAPI
|
||||
from fastapi.middleware.cors import CORSMiddleware
|
||||
|
||||
# 使用 uvloop 加速
|
||||
asyncio_policy = uvloop.EventLoopPolicy()
|
||||
import asyncio
|
||||
asyncio.set_event_loop_policy(asyncio_policy)
|
||||
|
||||
from server import TradingServer
|
||||
from routes_ea import create_ea_routes
|
||||
from routes_trader import create_trader_routes
|
||||
from routes_system import create_system_routes
|
||||
|
||||
|
||||
def create_app():
|
||||
"""创建并配置 FastAPI 应用"""
|
||||
|
||||
# 初始化服务
|
||||
server = TradingServer()
|
||||
|
||||
# 创建 FastAPI 应用
|
||||
app = FastAPI(
|
||||
title="高频交易服务 (HFT Trading Service)",
|
||||
description="连接 MT5 EA 和交易指令源的高性能交易中心",
|
||||
version="1.0.0"
|
||||
)
|
||||
|
||||
# 添加 CORS 中间件
|
||||
app.add_middleware(
|
||||
CORSMiddleware,
|
||||
allow_origins=["*"],
|
||||
allow_credentials=True,
|
||||
allow_methods=["*"],
|
||||
allow_headers=["*"],
|
||||
)
|
||||
|
||||
# 注册路由
|
||||
app.include_router(create_ea_routes(server))
|
||||
app.include_router(create_trader_routes(server))
|
||||
app.include_router(create_system_routes(server))
|
||||
|
||||
return app
|
||||
|
||||
|
||||
app = create_app()
|
||||
|
||||
|
||||
def main():
|
||||
"""启动服务"""
|
||||
print("=" * 60)
|
||||
print("高频交易服务启动中...")
|
||||
print("=" * 60)
|
||||
print()
|
||||
|
||||
# 启动参数
|
||||
host = "0.0.0.0"
|
||||
port = 8000
|
||||
workers = 1 # FastAPI + uvloop 场景下通常只需要单个 worker
|
||||
|
||||
print(f"[启动信息] 服务地址: http://{host}:{port}")
|
||||
print(f"[启动信息] Worker 数量: {workers}")
|
||||
print(f"[启动信息] 事件循环: uvloop")
|
||||
print(f"[启动信息] API 文档: http://localhost:{port}/docs")
|
||||
print()
|
||||
print("=" * 60)
|
||||
|
||||
try:
|
||||
uvicorn.run(
|
||||
"main:app",
|
||||
host=host,
|
||||
port=port,
|
||||
workers=workers,
|
||||
# 启用 uvloop
|
||||
loop="uvloop",
|
||||
# 日志配置
|
||||
log_level="info",
|
||||
access_log=True,
|
||||
)
|
||||
except KeyboardInterrupt:
|
||||
print("\n[信息] 服务已停止")
|
||||
except Exception as e:
|
||||
print(f"\n[错误] 启动失败: {e}")
|
||||
sys.exit(1)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Reference in New Issue
Block a user