Files
NewStock/qmt/start.bat
liaozhaorun 4607555eaf feat: 完善 QMT 交易模块文档和配置展示功能
- 优化前端仪表盘界面
- 添加配置文件可视化展示
- 编写 QMT 模块配置文档
- 完善项目规则体系(KiloCode)
2026-01-27 00:52:35 +08:00

116 lines
3.3 KiB
Batchfile
Raw 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.
@echo off
chcp 65001 >nul
setlocal enabledelayedexpansion
:: ================= 配置选项 =================
:: 1. 自动获取当前脚本所在目录
set "WORK_DIR=%~dp0"
:: 2. 设置启动文件
set "SCRIPT_NAME=run.py"
:: 3. 是否使用 uv 管理器 (1=是, 0=否)
set USE_UV=1
:: 4. 显示输出到屏幕还是日志文件 (1=屏幕, 0=日志文件)
set SHOW_OUTPUT=1
:: 5. 失败重启配置
set MAX_RETRIES=10
set RETRY_COUNT=0
set RETRY_WAIT=10
:: 6. 日志目录 (仅在 SHOW_OUTPUT=0 时生效)
set "LOG_DIR=%WORK_DIR%logs\launcher"
:: ===========================================
cd /d "%WORK_DIR%"
title QMT 自动化交易系统 [准备中]
:: 构建启动命令前缀
if "%USE_UV%"=="1" (
set "CMD_PREFIX=uv run python"
) else (
set "CMD_PREFIX=python"
)
:: 日志与日期初始化
if "%SHOW_OUTPUT%"=="0" (
if not exist "%LOG_DIR%" mkdir "%LOG_DIR%"
for /f "tokens=2 delims==" %%a in ('wmic os get localdatetime /value') do set "dt=%%a"
set "TODAY=!dt:~0,4!-!dt:~4,2!-!dt:~6,2!"
set "LOG_FILE=%LOG_DIR%\!TODAY!.log"
)
:START_LOOP
cls
echo ==================================================
echo QMT 交易系统守护进程启动
echo 工作目录: %WORK_DIR%
echo 启动命令: %CMD_PREFIX% %SCRIPT_NAME%
if "%SHOW_OUTPUT%"=="0" (
echo 输出模式: [日志文件] %LOG_FILE%
echo 注意: 窗口将不会显示运行日志,请查看上方文件。
echo 提示: 如需停止,建议直接关闭窗口。
) else (
echo 输出模式: [屏幕控制台]
echo 提示: 按 Ctrl+C 可终止程序。
)
echo ==================================================
:LOOP_BODY
if %RETRY_COUNT% GEQ %MAX_RETRIES% (
if "%SHOW_OUTPUT%"=="0" echo [%time%] !!! 达到最大重试次数 !!! >> "%LOG_FILE%"
color 0C
echo.
:: 【修复】将圆括号改为中括号,防止 if 块被提前截断
echo [错误] 达到最大重试次数 [%MAX_RETRIES%],系统停止重启。
echo 请检查代码或环境配置。
title QMT 系统 - 已停止
pause
exit /b 1
)
title QMT 系统 [运行中] - 重试: %RETRY_COUNT%
echo [%time%] 正在启动交易引擎...
if "%SHOW_OUTPUT%"=="0" (
echo [%time%] ^>^>^> 启动子进程 >> "%LOG_FILE%"
%CMD_PREFIX% -u "%SCRIPT_NAME%" >> "%LOG_FILE%" 2>&1
) else (
%CMD_PREFIX% -u "%SCRIPT_NAME%"
)
set EXIT_CODE=%errorlevel%
:: 判断退出原因
if %EXIT_CODE% EQU 0 (
echo.
:: 【修复】将圆括号改为中括号
echo [%time%] 程序正常结束 [Exit Code: 0]。
if "%SHOW_OUTPUT%"=="0" echo [%time%] 程序正常结束。 >> "%LOG_FILE%"
title QMT 系统 - 已完成
pause
exit /b 0
) else if %EXIT_CODE% EQU -1073741510 (
echo.
:: 【修复】将圆括号改为中括号
echo [%time%] 检测到用户手动中断 [Ctrl+C]。守护进程将停止。
exit /b 0
)
set /a RETRY_COUNT+=1
title QMT 系统 [等待重启] - 倒计时
echo.
echo --------------------------------------------------
echo [%time%] 警告: 进程意外崩溃! [Code: %EXIT_CODE%]
echo [%time%] 将在 %RETRY_WAIT% 秒后尝试第 %RETRY_COUNT%/%MAX_RETRIES% 次重启...
echo --------------------------------------------------
if "%SHOW_OUTPUT%"=="0" (
echo [%time%] 异常退出 Code:%EXIT_CODE%%RETRY_WAIT%秒后重启... >> "%LOG_FILE%"
)
timeout /t %RETRY_WAIT% >nul
goto LOOP_BODY