Files
beast-trader/docs/gitea_workflow_design.md

16 KiB
Raw Permalink Blame History

Beast Trader — Gitea 仓库结构与自动化工作流设计

版本v1.0 | 日期2026-06-11 | 作者FXY


一、背景

Gitea 1.24.2 已部署于东京服务器43.163.225.30:3000库存为空数据库为 SQLite。现有量化交易系统freqtrade + Binance Futures的后端基础设施已就位需建立完整的版本管理、研发工作流和自动化运维体系。


二、仓库结构

总体方案单仓库Monorepo

理由:单人使用场景下多仓库增加管理成本,且策略、回测、文档之间存在强耦合关系。

(二)目录结构

beast-trader/                         # 根仓库
│
├── strategies/                       # ── 策略代码 ──
│   ├── current/                      #   当前活跃策略(软链指向具体版本)
│   ├── v1.6/                         #   历史版本(从 versions/ 迁移)
│   ├── v2.1/
│   ├── v2.2b/
│   ├── v2.2c/
│   ├── v2.2d/                        #   🔥 当前最优基线
│   └── swing/                        #   波段策略系列
│       ├── v3.0/
│       └── v3.1/
│
├── backtests/                        # ── 回测结果 ──
│   ├── full/                         #   全周期回测2021-2026
│   │   ├── v2_2c_full.txt
│   │   ├── v2_2c_full.meta.json
│   │   └── v2_2d_full.txt
│   ├── yearly/                       #   逐年回测
│   │   ├── v2_2d_2021.txt
│   │   ├── v2_2d_2022.txt
│   │   └── ...
│   └── swing/                        #   波段策略回测
│
├── trades/                           # ── 实盘交易记录(自动生成)──
│   ├── 2026/
│   │   ├── 06/
│   │   │   ├── trades_2026-06-11.md
│   │   │   ├── trades_2026-06-12.md
│   │   │   └── ...
│   │   └── ...
│   ├── monthly/                      #   月度汇总(自动生成)
│   │   ├── 2026-06.md
│   │   └── ...
│   └── INDEX.md                      #   交易记录索引(自动维护)
│
├── daily_briefs/                     # ── 日报 ──
│   ├── 2026/
│   │   ├── 06/
│   │   │   ├── brief_2026-06-11.md
│   │   │   └── ...
│   │   └── ...
│   └── INDEX.md
│
├── docs/                             # ── 文档 ──
│   ├── manual/                       #   策略说明书
│   │   ├── v2_2d_manual.pdf
│   │   └── v2_2d_manual.html
│   ├── reports/                      #   阶段性报告
│   │   ├── today_report_2026-06-11.md
│   │   └── ...
│   └── guides/                       #   操作指南
│       ├── api_deployment.md
│       └── workflow_reference.md
│
├── config/                           # ── 配置文件 ──
│   ├── freqtrade/
│   │   ├── config.json               #   Docker内配置去掉密钥占位
│   │   ├── config.pairlist.json
│   │   └── config.backtest.json
│   ├── docker/
│   │   ├── docker-compose.yml
│   │   └── Dockerfile
│   └── dashboard/
│       ├── nginx.conf
│       └── dashboard.env
│
├── scripts/                          # ── 自动化脚本(服务器可执行)──
│   ├── export_trades.sh              #   实盘交易导出 → git push
│   ├── generate_brief.sh             #   日报生成 → git push
│   ├── deploy_strategy.sh            #   策略部署到 Docker
│   ├── archive_backtest.py           #   回测结果自动归档
│   └── init_gitea_repo.sh            #   首次初始化脚本
│
├── .gitea/workflows/                 # ── Gitea Actions 工作流 ──
│   ├── deploy-on-tag.yml             #   tag 推送时自动部署
│   └── daily-backup.yml              #   每日自动备份
│
├── .gitignore
└── README.md

(三)设计原则

  1. 按时间组织trades/、daily_briefs/ 按年/月两级目录自然归档
  2. 按版本归档strategies/ 每个版本独立子目录(延续现有原则)
  3. 自动写入,人工阅读:实盘记录和日报是程序自动写入的,格式要规范可读
  4. 一台服务器,一套体系:开发者 = 用户不需要分支策略master/main 即可
  5. 紧耦合不分离:策略代码和它的回测结果放在不同目录但同一仓库,禁止拆分

三、完整工作流设计

(一)生命周期总览

┌────────────────────────────────────────────────────────────────────────┐
│                                                                        │
│   [研发] ──→ [回测] ──→ [评估] ──→ [发布] ──→ [实盘] ──→ [复盘]     │
│     ↑                                                    │             │
│     └──────────────────── 迭代 ──────────────────────────┘             │
│                                                                        │
└────────────────────────────────────────────────────────────────────────┘

(二)各阶段详细流程

Phase 1策略研发

步骤 操作 自动化
1.1 在 WorkBuddy 中编写/修改策略代码
1.2 git add strategies/current/ && git commit -m "v2.3: XXXX"
1.3 git push 到 Gitea 触发 Gitea Webhook 通知

Phase 2回测验证

步骤 操作 自动化
2.1 Docker 内回测:freqtrade backtesting ... 可脚本化
2.2 回测结果保存到 backtests/full/ 脚本自动写入
2.3 回测结果推送到 Gitea git push

标准回测命令(固化):

# 策略层 full 测试
freqtrade backtesting --strategy StructureFlowStrategyV2_2d \
  --timerange 20210101-20260601 \
  --config /freqtrade/user_data/config.backtest.json \
  --export trades

Phase 3评估决策

步骤 操作 自动化
3.1 查看回测结果(对比 v2.2d 基线)
3.2 决定是否部署
3.3 如优化,回到 Phase 1如发布进入 Phase 4

Phase 4代码发布Release

步骤 操作 自动化
4.1 更新 strategies/current/ 指向新版本
4.2 git tag v2.3.0 && git push --tags 触发 Actions 自动部署
4.3 服务器拉取 → 复制策略到 user_data/strategies/ Shell 脚本
4.4 重启 freqtrade Docker 容器 docker-compose down && up -d

Phase 5实盘运行

步骤 操作 自动化
5.1 freqtrade 启动 live/dry-run
5.2 每笔成交 → 自动记录到 trades/ 每小时 cron 导出
5.3 每日日报 → Server酱推送微信 daily_brief.py + cron
5.4 日报 → 推送至 Gitea cron + git push

Phase 6复盘优化

步骤 操作 自动化
6.1 查看 trades/ 实盘记录
6.2 分析盈亏分布、胜率、出场原因
6.3 提出新思路 → 回到 Phase 1

四、自动化架构

(一)总体架构图

┌───────────────────────────────────────────────────┐
│              WorkBuddy智能调度层                 │
│  ┌──────────────┐    ┌───────────────────────┐    │
│  │ 每日08:00读取 │    │  Webhook 接收通知      │    │
│  │ Gitea 最新日报│    │  → 触发回测/分析       │    │
│  └──────────────┘    └───────────────────────┘    │
└───────────────────────────────────────────────────┘
                        │
                        ▼
┌───────────────────────────────────────────────────┐
│              东京服务器(执行层)                    │
│                                                    │
│  ┌─────────┐  ┌──────────┐  ┌──────────────────┐  │
│  │  Cron   │  │  Gitea   │  │  Gitea Actions   │  │
│  │ (系统级)│  │ Webhooks │  │ CI/CD 可选)   │  │
│  └────┬────┘  └────┬─────┘  └───────┬──────────┘  │
│       │            │                │              │
│       ▼            ▼                ▼              │
│  ┌─────────────────────────────────────────────┐   │
│  │              Shell 脚本层                     │   │
│  │  export_trades.sh  │  generate_brief.sh     │   │
│  │  deploy.sh         │  archive_results.sh    │   │
│  └────────────────────┼────────────────────────┘   │
│                       │                            │
│                       ▼                            │
│  ┌─────────────────────────────────────────────┐   │
│  │              Docker/Freqtrade                │   │
│  │         实盘执行 / 回测引擎                   │   │
│  └─────────────────────────────────────────────┘   │
└───────────────────────────────────────────────────┘

Cron 任务表

任务 调度 脚本 功能
实盘导出 每小时 export_trades.sh 查 Freqtrade DB → 写入 trades/ → git commit+push
日报生成 每日 23:55 UTC daily_brief.py(已有) 现行系统,扩充写入 Gitea
日报推送 日报生成后 generate_brief.sh 日报文件 → git push
仓库备份 每日 03:00 backup_repo.sh Gitea 内 git bundle → 备份到独立存储

(三)实盘交易记录自动导出机制

这是本次设计的核心创新点。方案如下:

Freqtrade SQLite DB
    │  tradesv3.sqliteDocker内 /freqtrade/user_data/
    │
    ▼
export_trades.sh每小时 cron 执行)
    │
    ├── 1. 拉取最新成交记录(自上次导出时间戳之后)
    ├── 2. 格式化为 Markdown 表格
    ├── 3. 写入 trades/2026/06/trades_2026-06-11.md
    ├── 4. 更新 INDEX.md追加本日记录入口
    ├── 5. git add + git commit + git push
    │
    ▼
Gitea 仓库自动更新

每条记录的字段:

字段 说明 来源
序号 #001, #002... 自动递增
时间 入场/出场时间戳 Freqtrade DB
方向 做多/做空 Freqtrade DB
入场价 Freqtrade DB
出场价 Freqtrade DB
数量 ETH 数量 Freqtrade DB
盈亏 绝对金额USDT Freqtrade DB
收益率 % 计算
出场原因 take_profit / stop_loss / trailing_stop / signal Freqtrade DB
冷却期 交易后冷却剩余 策略上下文
备注 人工填写 手动

查询 SQL

SELECT id, pair, open_time, close_time, open_rate, close_rate,
       amount, close_profit, close_profit_abs, exit_reason
FROM trades
WHERE close_time > {last_export_timestamp}
ORDER BY close_time ASC;

(四)首次初始化脚本

首次搭建时,需要将服务器上现有的所有文件推送到 Gitea。这需要一个一次性脚本

#!/bin/bash
# init_gitea_repo.sh — 首次初始化

# 1. 在 Gitea 创建仓库
# 2. git init + 建立目录结构
# 3. 复制现有策略文件到 strategies/
# 4. 复制回测结果到 backtests/
# 5. 复制文档到 docs/
# 6. 复制配置文件到 config/
# 7. 复制 Dashboard 代码到 dashboard/
# 8. 首次 commit + push

(五)关键自动化脚本设计

5.1 export_trades.sh — 实盘交易记录导出

#!/bin/bash
# 每小时执行,从 Freqtrade DB 导出新成交记录到 Gitea 仓库

LAST_EXPORT_FILE="/var/lib/gitea/export_timestamp.txt"
TRADES_DB="/home/ubuntu/freqtrade/user_data/tradesv3.sqlite"
REPO_DIR="/home/ubuntu/beast-trader"
TRADES_DIR="$REPO_DIR/trades/$(date +%Y/%m)"

# 1. 读取上次导出时间
if [ -f "$LAST_EXPORT_FILE" ]; then
    LAST_TS=$(cat "$LAST_EXPORT_FILE")
else
    LAST_TS=0
fi

# 2. 查询新成交记录(需在 Docker 内或直接读 SQLite
# 注意tradesv3.sqlite 在 Docker volume 内,需从宿主机访问
# 如果 Docker 挂载了目录,可直接读取

# 3. 格式化写入 Markdown
# ...

# 4. 更新 INDEX.md
# ...

# 5. git push
cd "$REPO_DIR" && git add . && git commit -m "trades: auto export $(date +%Y-%m-%d %H:%M)" && git push

5.2 deploy_strategy.sh — 策略自动部署

#!/bin/bash
# 在 git tag push 后触发

TAG=$1  # 例如 v2.3.0

# 1. 从 Gitea 拉取最新代码
cd /home/ubuntu/beast-trader && git pull

# 2. 将策略复制到 freqtrade 目录
cp strategies/current/*.py /home/ubuntu/freqtrade/user_data/strategies/

# 3. 重启 freqtrade Docker
cd /home/ubuntu/freqtrade && docker-compose down && docker-compose up -d

# 4. 记录部署版本
echo "Deployed: $TAG at $(date)" >> deploy_history.log

五、实现优先级建议

建议分三个阶段推进:

第一阶段数据入仓1-2天

优先级 任务 产出
P0 写好 init_gitea_repo.sh,将现有全部文件推送到 Gitea Gitea 仓库完整初始化
P0 建立目录结构 目录框架
P1 迁移 strategies/ 下所有版本 版本历史完整
P1 迁移 backtest_results/ 下的结果 回测历史完整
P2 迁移 docs/ 说明书和报告 文档完整

第二阶段自动化搭建2-3天

优先级 任务 产出
P0 编写 export_trades.sh + 配置 cron 实盘记录每小时自动归档
P0 日报增加 git push 步骤 → Gitea 日报自动入仓
P1 编写 deploy_strategy.sh 一键部署
P1 实现 scripts/archive_backtest.py 回测结果自动归档

第三阶段:工作流闭环(持续)

优先级 任务 产出
P1 Gitea Webhook → WorkBuddy 通知 变更即感知
P2 月度交易报告自动生成 复盘辅助
P2 Gitea Actions 搭建 CI/CD 能力
P3 策略对比看板Gitea Pages 可视化演进

六、附则

  1. 密钥不入库Exchange API key/secret、Server酱 SendKey 等敏感信息禁止提交到 Gitea
  2. 回测数字仅供参考:回测结果说明"过去表现好",不代表未来收益
  3. 只增不删trades/ 和 daily_briefs/ 是单向录入,禁止手动删除
  4. 日志即文档Gitea 的 commit log 本身就是研发日志commit message 写清楚改动内容