myTestFreqAI/tools/dryrun.sh
zhangkun9038@dingtalk.com 08f5bfb70b fix dryrun.sh
2025-08-13 23:51:26 +08:00

98 lines
3.4 KiB
Bash
Executable File

#!/bin/bash
set -e # 出错立即停止
# 检查 .env 文件
if [ ! -f ".env" ]; then
echo "⚠️ 本地缺少 .env 文件,请创建并配置。示例内容如下:"
echo ""
echo "STRATEGY_NAME=TheForceV7"
echo "CONFIG_FILE=basic.json"
echo "TEST_BRANCH=theforce-noai-test"
echo "DRYRUN_BRANCH=theforce-noai-dryrun"
echo ""
exit 1
fi
# 加载 .env 文件中的变量(位于项目根目录)
if [ -f ".env" ]; then
export $(grep -v '^#' .env | xargs)
else
echo "⚠️ 缺少 .env 文件,请创建并配置 TEST_BRANCH 和 DRYRUN_BRANCH"
exit 1
fi
# 获取当前分支名
current_branch=$(git rev-parse --abbrev-ref HEAD)
# 检查当前分支是否匹配 TEST_BRANCH 或 DRYRUN_BRANCH
if [[ "$current_branch" != "$TEST_BRANCH" && "$current_branch" != "$DRYRUN_BRANCH" ]]; then
echo "⚠️ 错误:当前分支 '$current_branch' 不符合环境变量配置要求。"
echo "请确保当前分支与 .env 文件中的 TEST_BRANCH 或 DRYRUN_BRANCH 配置一致。"
echo "TEST_BRANCH=$TEST_BRANCH"
echo "DRYRUN_BRANCH=$DRYRUN_BRANCH"
exit 1
else
echo "✅ 当前分支 '$current_branch' 符合环境变量配置要求。"
fi
# 如果当前分支名称包含 "dryrun",执行 git reset --hard
if [[ "$CURRENT_BRANCH" == *"dryrun"* ]]; then
echo "当前分支为 '$CURRENT_BRANCH',正在执行 git reset --hard 以确保代码干净..."
git reset --hard
if [ $? -ne 0 ]; then
echo "⚠️ 执行 git reset --hard 失败,请检查 Git 状态。"
exit 1
fi
echo "Git 工作区已清理。"
fi
# 加载 .env 文件中的变量
export $(grep -v '^#' .env | xargs)
# 设置默认值
STRATEGY_NAME=${STRATEGY_NAME:-TheForceV7}
CONFIG_FILE=${CONFIG_FILE:-basic.json}
# 设置 PARAMS_NAME 为 STRATEGY_NAME 的小写形式
PARAMS_NAME=$(echo "$STRATEGY_NAME" | tr '[:upper:]' '[:lower:]')
echo "Using strategy: $STRATEGY_NAME"
echo "Using config: $CONFIG_FILE"
echo "Using testBranch: $TEST_BRANCH"
# Parse command line arguments
START_DATE=${1:-$(date -d "2 days ago" +"%Y%m%d")}
END_DATE=${2:-$(date -d "tomorrow" +"%Y%m%d")}
cd ../
source .venv/bin/activate
rm -rf user_data/models/*
rm -rf ./freqtrade/user_data/data/backtest_results/*
rm -fr ./user_data/dryrun_results/*
rm result/* || true
hyperopt_config="${STRATEGY_NAME%.py}.json"
docker rm $(docker ps -aq) -f || true
# 获取当前 Git Commit 的前 8 位
GIT_COMMIT_SHORT=$(git rev-parse HEAD | cut -c 1-8)
echo "docker-compose run -d --rm --name freqtrade-dryrun-${GIT_COMMIT_SHORT} -p 8080:8080 freqtrade trade \
--logfile /freqtrade/user_data/logs/freqtrade.log \
--db-url sqlite:////freqtrade/user_data/tradesv3.sqlite \
--freqaimodel LightGBMRegressorMultiTarget \
--fee 0.0008
--dryun \
--config /freqtrade/config_examples/$CONFIG_FILE \
--config /freqtrade/templates/${PARAMS_NAME}.json \
--config /freqtrade/config_examples/live.json \
--strategy $STRATEGY_NAME \
--strategy-path /freqtrade/templates"
docker-compose run -d --rm --name freqtrade-dryrun-${GIT_COMMIT_SHORT} -p 8080:8080 freqtrade trade \
--logfile /freqtrade/user_data/logs/freqtrade.log \
--db-url sqlite:////freqtrade/user_data/tradesv3.sqlite \
--freqaimodel LightGBMRegressorMultiTarget \
--fee 0.0008 \
--dryun \
--config /freqtrade/config_examples/$CONFIG_FILE \
--config /freqtrade/templates/${PARAMS_NAME}.json \
--config /freqtrade/config_examples/live.json \
--strategy $STRATEGY_NAME \
--strategy-path /freqtrade/templates