fix(scheduler): 修复格式和代码风格问题,调整默认执行时间
- 规范了代码中的字符串引号统一使用双引号 - 调整了部分代码的参数换行和缩进格式 - 在load_dotenv调用中添加了缺失的空行 - 优化了日志打印字符串内引号使用一致性 - 修改主函数默认执行时间由15:30调整为09:00 - 修正字典取值和列表拼接中的引号使用,避免潜在错误 - 规范函数定义参数列表的格式,提高代码可读性
This commit is contained in:
@@ -26,6 +26,7 @@ project_root = Path(__file__).parent.parent
|
|||||||
sys.path.insert(0, str(project_root))
|
sys.path.insert(0, str(project_root))
|
||||||
|
|
||||||
from dotenv import load_dotenv
|
from dotenv import load_dotenv
|
||||||
|
|
||||||
load_dotenv(project_root / ".env")
|
load_dotenv(project_root / ".env")
|
||||||
|
|
||||||
from loguru import logger
|
from loguru import logger
|
||||||
@@ -64,13 +65,10 @@ def is_trading_day(date_str: str = None) -> bool:
|
|||||||
|
|
||||||
pro = ts.pro_api(token)
|
pro = ts.pro_api(token)
|
||||||
df = pro.trade_cal(
|
df = pro.trade_cal(
|
||||||
exchange='SSE',
|
exchange="SSE", start_date=date_str, end_date=date_str, is_open="1"
|
||||||
start_date=date_str,
|
|
||||||
end_date=date_str,
|
|
||||||
is_open='1'
|
|
||||||
)
|
)
|
||||||
|
|
||||||
is_open = len(df) > 0 and df.iloc[0]['is_open'] == 1
|
is_open = len(df) > 0 and df.iloc[0]["is_open"] == 1
|
||||||
logger.info(f"日期 {date_str} 是否为交易日: {is_open}")
|
logger.info(f"日期 {date_str} 是否为交易日: {is_open}")
|
||||||
return is_open
|
return is_open
|
||||||
|
|
||||||
@@ -97,8 +95,10 @@ def run_strategy(config_path: str = "config/strategies/rotation.yaml") -> dict:
|
|||||||
cmd = [
|
cmd = [
|
||||||
sys.executable,
|
sys.executable,
|
||||||
str(project_root / "scripts" / "run_rotation.py"),
|
str(project_root / "scripts" / "run_rotation.py"),
|
||||||
"--config", config_path,
|
"--config",
|
||||||
"--save-path", f"results/report_{datetime.now().strftime('%Y%m%d')}"
|
config_path,
|
||||||
|
"--save-path",
|
||||||
|
f"results/report_{datetime.now().strftime('%Y%m%d')}",
|
||||||
]
|
]
|
||||||
|
|
||||||
logger.info(f"执行命令: {' '.join(cmd)}")
|
logger.info(f"执行命令: {' '.join(cmd)}")
|
||||||
@@ -109,7 +109,7 @@ def run_strategy(config_path: str = "config/strategies/rotation.yaml") -> dict:
|
|||||||
capture_output=True,
|
capture_output=True,
|
||||||
text=True,
|
text=True,
|
||||||
cwd=project_root,
|
cwd=project_root,
|
||||||
timeout=300 # 5分钟超时
|
timeout=300, # 5分钟超时
|
||||||
)
|
)
|
||||||
|
|
||||||
if result.returncode != 0:
|
if result.returncode != 0:
|
||||||
@@ -120,7 +120,7 @@ def run_strategy(config_path: str = "config/strategies/rotation.yaml") -> dict:
|
|||||||
logger.debug(result.stdout)
|
logger.debug(result.stdout)
|
||||||
|
|
||||||
# 查找生成的报告文件
|
# 查找生成的报告文件
|
||||||
report_date = datetime.now().strftime('%Y%m%d')
|
report_date = datetime.now().strftime("%Y%m%d")
|
||||||
chart_path = project_root / "results" / f"report_{report_date}_chart.png"
|
chart_path = project_root / "results" / f"report_{report_date}_chart.png"
|
||||||
|
|
||||||
# 如果找不到带日期的,尝试默认路径
|
# 如果找不到带日期的,尝试默认路径
|
||||||
@@ -161,14 +161,14 @@ def send_report_to_dingtalk(chart_path: str, summary_text: str = "") -> bool:
|
|||||||
logger.error("钉钉未配置,无法发送")
|
logger.error("钉钉未配置,无法发送")
|
||||||
return False
|
return False
|
||||||
|
|
||||||
today_str = datetime.now().strftime('%Y-%m-%d')
|
today_str = datetime.now().strftime("%Y-%m-%d")
|
||||||
|
|
||||||
# 发送图文消息
|
# 发送图文消息
|
||||||
success = bot.send_image_via_oss(
|
success = bot.send_image_via_oss(
|
||||||
image_path=chart_path,
|
image_path=chart_path,
|
||||||
title=f"ETF轮动策略日报 ({today_str})",
|
title=f"ETF轮动策略日报 ({today_str})",
|
||||||
text=summary_text or f"今日调仓信号已生成",
|
text=summary_text or f"今日调仓信号已生成",
|
||||||
expire_days=7
|
expire_days=7,
|
||||||
)
|
)
|
||||||
|
|
||||||
if success:
|
if success:
|
||||||
@@ -183,7 +183,9 @@ def send_report_to_dingtalk(chart_path: str, summary_text: str = "") -> bool:
|
|||||||
return False
|
return False
|
||||||
|
|
||||||
|
|
||||||
def setup_schedule(target_time: str = "15:30", config_path: str = "config/strategies/rotation.yaml"):
|
def setup_schedule(
|
||||||
|
target_time: str = "15:30", config_path: str = "config/strategies/rotation.yaml"
|
||||||
|
):
|
||||||
"""
|
"""
|
||||||
设置定时任务
|
设置定时任务
|
||||||
|
|
||||||
@@ -209,7 +211,7 @@ def daily_task(config_path: str = "config/strategies/rotation.yaml"):
|
|||||||
Args:
|
Args:
|
||||||
config_path: 配置文件路径
|
config_path: 配置文件路径
|
||||||
"""
|
"""
|
||||||
today_str = datetime.now().strftime('%Y-%m-%d')
|
today_str = datetime.now().strftime("%Y-%m-%d")
|
||||||
logger.info(f"=" * 60)
|
logger.info(f"=" * 60)
|
||||||
logger.info(f"开始执行每日任务: {today_str}")
|
logger.info(f"开始执行每日任务: {today_str}")
|
||||||
logger.info(f"=" * 60)
|
logger.info(f"=" * 60)
|
||||||
@@ -231,8 +233,7 @@ def daily_task(config_path: str = "config/strategies/rotation.yaml"):
|
|||||||
# 3. 发送报告
|
# 3. 发送报告
|
||||||
if result.get("chart_path"):
|
if result.get("chart_path"):
|
||||||
send_report_to_dingtalk(
|
send_report_to_dingtalk(
|
||||||
chart_path=result["chart_path"],
|
chart_path=result["chart_path"], summary_text="今日ETF轮动策略调仓信号"
|
||||||
summary_text="今日ETF轮动策略调仓信号"
|
|
||||||
)
|
)
|
||||||
else:
|
else:
|
||||||
logger.warning("未找到报告图表")
|
logger.warning("未找到报告图表")
|
||||||
@@ -256,7 +257,7 @@ def main():
|
|||||||
parser.add_argument(
|
parser.add_argument(
|
||||||
"--time",
|
"--time",
|
||||||
type=str,
|
type=str,
|
||||||
default="15:30",
|
default="09:00",
|
||||||
help="执行时间 (HH:MM),默认15:30",
|
help="执行时间 (HH:MM),默认15:30",
|
||||||
)
|
)
|
||||||
parser.add_argument(
|
parser.add_argument(
|
||||||
|
|||||||
Reference in New Issue
Block a user