auto-sync: 2026-03-28 12:07:55
This commit is contained in:
Executable
+122
@@ -0,0 +1,122 @@
|
||||
#!/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 ""
|
||||
Reference in New Issue
Block a user