From 1d893aa629d64e80f3b49f5b7a7bf4d3ce3b35c1 Mon Sep 17 00:00:00 2001 From: zhiyong Date: Thu, 22 May 2025 22:30:08 +0800 Subject: [PATCH] =?UTF-8?q?=E9=87=8D=E6=9E=84=E9=A1=B9=E7=9B=AE=E6=96=87?= =?UTF-8?q?=E4=BB=B6=E7=BB=93=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- examples/example_trade.py | 3 ++- src/config.py | 2 +- src/core/app_state.py | 2 +- src/{ => core}/base_trader.py | 2 +- src/{ => core}/local_order.py | 2 +- src/{ => core}/local_position.py | 0 src/{ => core}/position_manager.py | 6 +++--- src/core/scheduler_tasks.py | 4 ++-- src/{ => core}/settlement_type.py | 0 src/{ => core}/trade_constants.py | 0 src/real/real_trader_manager.py | 2 +- src/real/xt_trader.py | 6 +++--- src/routes/trading_routes.py | 4 ++-- src/simulation/simulation_trader.py | 8 ++++---- src/trade_server.py | 15 ++++++++------- 15 files changed, 29 insertions(+), 27 deletions(-) rename src/{ => core}/base_trader.py (99%) rename src/{ => core}/local_order.py (88%) rename src/{ => core}/local_position.py (100%) rename src/{ => core}/position_manager.py (99%) rename src/{ => core}/settlement_type.py (100%) rename src/{ => core}/trade_constants.py (100%) diff --git a/examples/example_trade.py b/examples/example_trade.py index 07320a5..d611fdd 100644 --- a/examples/example_trade.py +++ b/examples/example_trade.py @@ -1,7 +1,8 @@ import requests # 服务器地址 -URL = "http://trader.biggerfish.tech:9527/yu" +# URL = "http://trader.biggerfish.tech:9527/yu" +URL = "http://localhost:9527/yu" # 策略名称常量 STRATEGY = "香港证券ETF网格" diff --git a/src/config.py b/src/config.py index c59af45..b7ebccc 100644 --- a/src/config.py +++ b/src/config.py @@ -9,7 +9,7 @@ class Config: # Trading settings TRADE_TIMEOUT = 5 # 交易超时时间(秒) - SIMULATION_MODE = False + SIMULATION_MODE = True # Trading hours MARKET_OPEN_TIME = "09:10" diff --git a/src/core/app_state.py b/src/core/app_state.py index 47852f8..b390f56 100644 --- a/src/core/app_state.py +++ b/src/core/app_state.py @@ -10,7 +10,7 @@ from config import Config # 使用相对导入 from logger_config import get_logger from real.xt_trader import XtTrader from simulation.simulation_trader import SimulationTrader -from base_trader import BaseTrader +from core.base_trader import BaseTrader from real.real_trader_manager import RealTraderManager # 确保导入 # 获取日志记录器 diff --git a/src/base_trader.py b/src/core/base_trader.py similarity index 99% rename from src/base_trader.py rename to src/core/base_trader.py index be506c7..02d7e24 100644 --- a/src/base_trader.py +++ b/src/core/base_trader.py @@ -2,7 +2,7 @@ import datetime as dt from chinese_calendar import is_workday from abc import ABC, abstractmethod from logger_config import get_logger -from position_manager import PositionManager +from core.position_manager import PositionManager from typing import Dict from config import Config import os diff --git a/src/local_order.py b/src/core/local_order.py similarity index 88% rename from src/local_order.py rename to src/core/local_order.py index 7a36702..c3e2020 100644 --- a/src/local_order.py +++ b/src/core/local_order.py @@ -1,4 +1,4 @@ -from trade_constants import ORDER_STATUS_PENDING, ORDER_TYPE_LIMIT +from core.trade_constants import ORDER_STATUS_PENDING, ORDER_TYPE_LIMIT from datetime import datetime class LocalOrder: diff --git a/src/local_position.py b/src/core/local_position.py similarity index 100% rename from src/local_position.py rename to src/core/local_position.py diff --git a/src/position_manager.py b/src/core/position_manager.py similarity index 99% rename from src/position_manager.py rename to src/core/position_manager.py index d031b70..92104e1 100644 --- a/src/position_manager.py +++ b/src/core/position_manager.py @@ -4,7 +4,7 @@ import threading from datetime import datetime from logger_config import get_logger from config import Config -from trade_constants import ( +from core.trade_constants import ( ORDER_DIRECTION_BUY, ORDER_TYPE_LIMIT, ORDER_TYPE_MARKET, @@ -12,8 +12,8 @@ from trade_constants import ( ORDER_STATUS_CANCELLED, ORDER_STATUS_FAILED, ) -from local_position import LocalPosition -from local_order import LocalOrder +from core.local_position import LocalPosition +from core.local_order import LocalOrder from utils.t0_stocks import is_t0 from typing import Dict diff --git a/src/core/scheduler_tasks.py b/src/core/scheduler_tasks.py index 11cb5ff..25b03ae 100644 --- a/src/core/scheduler_tasks.py +++ b/src/core/scheduler_tasks.py @@ -12,8 +12,8 @@ import os from config import Config from logger_config import get_logger -from base_trader import BaseTrader -from .app_state import login, logout, is_real_mode, _trader_instance, logger as app_logger # 使用 app_state中的logger +from core.base_trader import BaseTrader +from core.app_state import login, logout, is_real_mode, _trader_instance, logger as app_logger # 使用 app_state中的logger # 如果需要独立的 logger,可以取消下面这行的注释 # logger = get_logger("scheduler") diff --git a/src/settlement_type.py b/src/core/settlement_type.py similarity index 100% rename from src/settlement_type.py rename to src/core/settlement_type.py diff --git a/src/trade_constants.py b/src/core/trade_constants.py similarity index 100% rename from src/trade_constants.py rename to src/core/trade_constants.py diff --git a/src/real/real_trader_manager.py b/src/real/real_trader_manager.py index 1b041ac..2e4434e 100644 --- a/src/real/real_trader_manager.py +++ b/src/real/real_trader_manager.py @@ -6,7 +6,7 @@ from xtquant import xtconstant from logger_config import get_logger from config import Config from functools import wraps -from trade_constants import ( +from core.trade_constants import ( ORDER_STATUS_COMPLETED, ORDER_STATUS_CANCELLED, ORDER_STATUS_PENDING, diff --git a/src/real/xt_trader.py b/src/real/xt_trader.py index f805fa3..eb470ea 100644 --- a/src/real/xt_trader.py +++ b/src/real/xt_trader.py @@ -3,14 +3,14 @@ import random import time from datetime import datetime from config import Config -from base_trader import BaseTrader +from core.base_trader import BaseTrader from xtquant.xttrader import XtQuantTrader from xtquant.xttype import StockAccount from xtquant import xtconstant from xtquant.xtdata import get_instrument_detail from logger_config import get_logger from utils.mail_util import MailUtil -from trade_constants import ( +from core.trade_constants import ( ORDER_STATUS_COMPLETED, ORDER_STATUS_CANCELLED, ORDER_STATUS_PENDING, @@ -21,7 +21,7 @@ from trade_constants import ( ORDER_DIRECTION_SELL, ORDER_STATUS_FAILED ) -from local_order import LocalOrder +from core.local_order import LocalOrder # 获取日志记录器 logger = get_logger('real_trader') diff --git a/src/routes/trading_routes.py b/src/routes/trading_routes.py index 05702d0..bc3f2d2 100644 --- a/src/routes/trading_routes.py +++ b/src/routes/trading_routes.py @@ -4,8 +4,8 @@ from flask import Blueprint, request, jsonify, abort from core.app_state import get_trader, get_real_trader_manager, is_real_mode, logger -from base_trader import BaseTrader -from trade_constants import ORDER_TYPE_LIMIT, ORDER_DIRECTION_BUY, ORDER_DIRECTION_SELL +from core.base_trader import BaseTrader +from core.trade_constants import ORDER_TYPE_LIMIT, ORDER_DIRECTION_BUY, ORDER_DIRECTION_SELL trading_bp = Blueprint('trading_routes', __name__, url_prefix='/yu') diff --git a/src/simulation/simulation_trader.py b/src/simulation/simulation_trader.py index acb7825..7ab9f0e 100644 --- a/src/simulation/simulation_trader.py +++ b/src/simulation/simulation_trader.py @@ -1,16 +1,16 @@ from logger_config import get_logger -from trade_constants import ( +from core.trade_constants import ( TRADE_TYPE_SIMULATION, ORDER_DIRECTION_BUY, ORDER_DIRECTION_SELL, ORDER_STATUS_COMPLETED, ORDER_STATUS_CANCELLED, ) -from position_manager import PositionManager -from base_trader import BaseTrader +from core.position_manager import PositionManager +from core.base_trader import BaseTrader import random from typing import Dict -from local_position import LocalPosition +from core.local_position import LocalPosition class SimulationTrader(BaseTrader): diff --git a/src/trade_server.py b/src/trade_server.py index 34c3034..64d873d 100644 --- a/src/trade_server.py +++ b/src/trade_server.py @@ -6,11 +6,9 @@ Flask应用主入口文件。 from flask import Flask, request, abort from config import Config -from logger_config import get_logger # 主应用的logger - -# 核心服务和状态初始化 -from core.app_state import login as initialize_trader_login, logger as app_state_logger, is_real_mode -from core.scheduler_tasks import setup_scheduler, logger as scheduler_logger +from logger_config import get_logger +from core.app_state import login as initialize_trader_login, is_real_mode +from core.scheduler_tasks import setup_scheduler # API 路由蓝图 from routes.health_routes import health_bp @@ -76,8 +74,7 @@ app.register_blueprint(strategy_bp) logger.info("所有API路由蓝图已注册。") -# --- 主程序入口 --- -if __name__ == "__main__": +def run_server(): # 在启动Web服务器之前初始化服务 initialize_app_services() @@ -85,6 +82,10 @@ if __name__ == "__main__": app.run(debug=Config.DEBUG, host=Config.HOST, port=Config.PORT, use_reloader=False) # use_reloader=False 建议在生产或有自定义启动/关闭逻辑时使用,以避免重复初始化。 # 对于开发模式,debug=True 通常会启用重载器。 + +# --- 主程序入口 --- +if __name__ == "__main__": + run_server() else: # 如果是通过 Gunicorn 等 WSGI 服务器运行,则也需要初始化服务 # Gunicorn 通常会为每个 worker 进程加载一次应用模块