Files
2026-03-28 12:07:55 +08:00

123 lines
3.0 KiB
Bash
Executable File
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.
#!/bin/bash
# ============================================
# 同步策略 + 全自动回测,不需要重启 Docker!
# 使用方法:
# ./sync_and_run_backtest.sh --strategy strategies.pangtong-value.strategy_A
# ============================================
set -e
# 配置信息
NAS_IP="192.168.2.154"
NAS_USER="admin"
LOCAL_PROJECT="/Users/chufeng/.openclaw/sanguo_projects/sanguo_quant_live"
NAS_TARGET="/volume1/stock/sanguo_vnpy"
DOCKER_CONTAINER="sanguo_vnpy"
# 颜色
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m'
log_info() {
echo -e "${GREEN}[INFO]${NC} $1"
}
log_warn() {
echo -e "${YELLOW}[WARN]${NC} $1"
}
log_error() {
echo -e "${RED}[ERROR]${NC} $1"
}
# 解析参数
while [[ $# -gt 0 ]]; do
case $1 in
--strategy)
STRATEGY="$2"
shift
shift
;;
*)
shift
;;
esac
done
# 检查参数
if [[ -z "$STRATEGY" ]]; then
log_error "必须指定 --strategy 参数"
echo ""
echo "使用方法:"
echo " $0 --strategy strategies.pangtong-value.strategy_A"
echo ""
exit 1
fi
# 提取策略路径(用于同步)
# strategies.pangtong-value.strategy_A → strategies/pangtong-value
STRATEGY_PATH=$(echo "$STRATEGY" | tr '.' '/')
STRATEGY_PATH=$(dirname "$STRATEGY_PATH")
echo "============================================"
echo " 同步策略 + 全自动回测(无需重启 Docker"
echo "============================================"
echo ""
log_info "策略: $STRATEGY"
log_info "策略路径: $STRATEGY_PATH"
echo ""
# 第一步:同步策略代码到 NAS
log_info "1/3: 同步策略代码到 NAS"
rsync -av --delete \
"$LOCAL_PROJECT/$STRATEGY_PATH"/ \
"$NAS_USER@$NAS_IP:$NAS_TARGET/$STRATEGY_PATH"/ \
--exclude='__pycache__' \
--exclude='*.pyc' \
--exclude='.ipynb_checkpoints' \
--exclude='.DS_Store'
log_info "✅ 同步完成"
echo ""
# 第二步:在容器中运行回测
log_info "2/3: 在运行的容器中执行回测"
echo ""
ssh "$NAS_USER@$NAS_IP" "export PATH=\$PATH:/var/packages/Docker/target/usr/bin && docker exec $DOCKER_CONTAINER python /app/scripts/run_backtest_auto.py $STRATEGY"
log_info "✅ 回测执行完成"
echo ""
# 第三步:同步回测结果回本地
log_info "3/3: 同步回测结果回本地"
echo ""
# 结果目录
RESULT_PATH="$STRATEGY_PATH/backtest_results"
mkdir -p "$LOCAL_PROJECT/$RESULT_PATH"
rsync -av \
"$NAS_USER@$NAS_IP:$NAS_TARGET/$RESULT_PATH"/ \
"$LOCAL_PROJECT/$RESULT_PATH"/ \
--exclude='__pycache__'
log_info "✅ 结果同步完成"
echo ""
echo "============================================"
echo " 🎉 回测完成!"
echo "============================================"
echo ""
echo "📄 结果位置:"
echo " NAS: $NAS_TARGET/$RESULT_PATH/"
echo " 本地: $LOCAL_PROJECT/$RESULT_PATH/"
echo ""
echo "📊 直接查看结果:"
echo " cat $LOCAL_PROJECT/$RESULT_PATH/*.txt"
echo " open $LOCAL_PROJECT/$RESULT_PATH/*.png"
echo ""