Files
NewQuant/strategy_manager/core/path_utils.py
liaozhaorun 711b86d33f 1、新增傅里叶策略
2、新增策略管理、策略重启功能
2025-11-20 16:15:45 +08:00

76 lines
2.4 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import sys
from pathlib import Path
def get_project_root():
"""
获取项目根路径strategy_manager 的父目录)
项目结构:
project/
├── futures_trading_strategies/
└── strategy_manager/
"""
# strategy_manager/core/path_utils.py -> strategy_manager -> project
return Path(__file__).parent.parent.parent
def get_strategy_root(config_path: str = "config/main.json"):
"""
动态获取策略代码根路径
优先级:
1. config/main.json 中配置的绝对路径
2. config/main.json 中配置的相对路径(相对于项目根)
3. AUTO_DETECT: 自动探测项目根目录下的 futures_trading_strategies
"""
config_file = Path(config_path)
strategy_root = None
# 读取配置
if config_file.exists():
import json
try:
with open(config_file, 'r') as f:
config = json.load(f)
strategy_root = config.get("strategy_root", "AUTO_DETECT")
except:
strategy_root = "AUTO_DETECT"
else:
strategy_root = "AUTO_DETECT"
# 如果是绝对路径,直接返回
if strategy_root and Path(strategy_root).is_absolute():
return Path(strategy_root)
# 如果是相对路径,相对于项目根
project_root = get_project_root()
if strategy_root and strategy_root != "AUTO_DETECT":
return project_root / strategy_root
# AUTO_DETECT模式: 探测项目根目录下的 futures_trading_strategies
auto_detect = project_root / "futures_trading_strategies"
if auto_detect.exists():
return auto_detect
# 如果失败,抛出错误
raise RuntimeError(
"无法自动探测策略代码路径,请在 config/main.json 中配置:\n"
'"strategy_root": "/path/to/your/futures_trading_strategies"'
)
def add_project_root_to_path():
"""将项目根路径添加到 sys.path"""
project_root = get_project_root()
if str(project_root) not in sys.path:
sys.path.insert(0, str(project_root))
print(f"[INFO] 已添加项目根路径到sys.path: {project_root}")
return project_root
def add_strategy_root_to_path():
"""将策略根路径添加到 sys.path"""
strategy_root = get_strategy_root()
if str(strategy_root) not in sys.path:
sys.path.insert(0, str(strategy_root))
print(f"[INFO] 已添加策略根路径到sys.path: {strategy_root}")
return strategy_root