123 lines
3.0 KiB
Bash
Executable File
123 lines
3.0 KiB
Bash
Executable File
#!/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 ""
|