Files
wiki/quant/freqtrade-deploy-guide.md
T

8.5 KiB
Raw Blame History

Freqtrade 实盘部署全流程

从零部署 Freqtrade 交易机器人到 Vultr 服务器,运行 OKX USDT-M 永续合约实盘交易。


1. 服务器信息

项目 详情
服务商 Vultr
IP 104.156.239.5
系统 Ubuntu 22.04
配置 2 vCPU / 2GB RAM / 61GB SSD
部署路径 /opt/freqtrade/
SSH 用户 root
SSH 密钥 本机 ~/.ssh/id_rsa
跳板 通过阿里云 ecs 跳板(ProxyJump

SSH 配置

在本机 ~/.ssh/config 中添加:

Host vultr
  HostName 104.156.239.5
  User root
  IdentityFile ~/.ssh/id_rsa
  IdentitiesOnly yes
  ProxyJump ecs

连接命令:ssh vultr

端口

端口 用途
22 SSH
8080 Freqtrade API Server / freqUI

2. 前置依赖安装

# 更新系统
ssh vultr "apt update && apt install -y software-properties-common"

# 安装 Python 3.12Ubuntu 22.04 默认 3.10 不满足 freqtrade >=3.11
ssh vultr "add-apt-repository -y ppa:deadsnakes/ppa && apt install -y python3.12 python3.12-venv python3.12-dev"

# 安装构建依赖
ssh vultr "apt install -y build-essential git curl"

# 配置防火墙
ssh vultr "ufw allow 22/tcp && ufw allow 8080/tcp"

3. 部署 Freqtrade

3.1 克隆仓库

# 方式一:从 Gitea 克隆(推荐)
ssh vultr "git clone https://git.looq.fun/liam/freqtrade-deploy.git /opt/freqtrade"

# 方式二:从本机 scp 推送
scp -o ProxyJump=ecs -r /root/agents/freqtrade vultr:/opt/freqtrade

3.2 创建虚拟环境并安装

ssh vultr "cd /opt/freqtrade && python3.12 -m venv .venv && .venv/bin/pip install -e ."

3.3 安装 freqUI

ssh vultr "cd /opt/freqtrade && .venv/bin/freqtrade install-ui"

4. 配置

4.1 部署策略文件

将策略文件推送到服务器:

scp -o ProxyJump=ecs user_data/strategies/multi_asset_channel_breakout_v5.py \
    vultr:/opt/freqtrade/user_data/strategies/

4.2 配置 config.json

/opt/freqtrade/user_data/config.json 中配置以下关键项:

{
    "max_open_trades": 2,
    "stake_currency": "USDT",
    "stake_amount": "unlimited",
    "tradable_balance_ratio": 0.99,
    "dry_run": false,
    "timeframe": "15m",
    "stoploss": -0.80,
    "trading_mode": "futures",
    "margin_mode": "isolated",
    "exchange": {
        "name": "okx",
        "key": "e756108d-f14c-4777-8351-cd989f389dd2",
        "secret": "BC4579AEE9816ED4A38218910B6EC278",
        "password": "30l9L666.",
        "ccxt_config": {"hostname": "www.okx.cab"},
        "ccxt_async_config": {"hostname": "www.okx.cab"},
        "pair_whitelist": ["BTC/USDT:USDT", "ETH/USDT:USDT"]
    },
    "pairlists": [{"method": "StaticPairList"}],
    "api_server": {
        "enabled": true,
        "listen_ip_address": "0.0.0.0",
        "listen_port": 8080,
        "username": "liam",
        "password": "30l9L666"
    },
    "webhook": {
        "enabled": true,
        "url": "https://open.feishu.cn/open-apis/bot/v2/hook/2b1bc9a6-b470-447f-b783-1b253dcf522c"
    },
    "strategy": "MultiAssetChannelBreakoutV5",
    "strategy_path": "user_data/strategies/",
    "initial_state": "running"
}

OKX API Key 说明:

  • key: e756108d-f14c-4777-8351-cd989f389dd2
  • secret: BC4579AEE9816ED4A38218910B6EC278
  • password: 30l9L666.
  • hostname: www.okx.cabOKX 国内加速域名,非 www.okx.com
  • 该 key 无 IP 限制(ip: "0"),任何服务器都能用

freqUI 登录:

  • 地址:http://104.156.239.5:8080/
  • 用户名:liam
  • 密码:30l9L666

5. Systemd 服务

5.1 创建服务文件

ssh vultr "cat > /etc/systemd/system/freqtrade.service << 'EOF'
[Unit]
Description=Freqtrade Trading Bot
After=network-online.target
Wants=network-online.target

[Service]
Type=simple
User=root
WorkingDirectory=/opt/freqtrade
ExecStart=/opt/freqtrade/.venv/bin/freqtrade trade -c user_data/config.json
Restart=on-failure
RestartSec=10

[Install]
WantedBy=multi-user.target
EOF"

5.2 启用并启动

ssh vultr "systemctl daemon-reload && systemctl enable freqtrade && systemctl start freqtrade"

6. 验证部署

# 1. 检查服务状态
ssh vultr "systemctl status freqtrade --no-pager"

# 2. 检查 API 响应
curl -s http://104.156.239.5:8080/api/v1/ping
# 应返回: {"status":"pong"}

# 3. 检查策略加载
ssh vultr "journalctl -u freqtrade --no-pager -n 30 | grep -E 'strategy|timeframe|RUNNING'"

# 4. 检查交易对白名单
ssh vultr "journalctl -u freqtrade --no-pager | grep 'Whitelist with'"

# 5. 访问 Web UI
open http://104.156.239.5:8080/

7. 运维命令

# 查看服务状态
ssh vultr "systemctl status freqtrade --no-pager"

# 查看实时日志
ssh vultr "journalctl -u freqtrade.service -f"

# 查看最近 50 行日志
ssh vultr "journalctl -u freqtrade.service --no-pager -n 50"

# 重启服务(部署新策略或修改配置后)
ssh vultr "systemctl restart freqtrade"

# 停止服务
ssh vultr "systemctl stop freqtrade"

# 查看交易记录(SQLite
ssh vultr "cd /opt/freqtrade && python3 -c \"
import sqlite3
conn = sqlite3.connect('tradesv3.sqlite')
conn.row_factory = sqlite3.Row
rows = conn.execute('SELECT id,pair,open_rate,close_rate,close_profit_abs,exit_reason FROM trades ORDER BY id').fetchall()
for r in rows:
    print(dict(r))
conn.close()
\""

8. 当前线上配置摘要

配置项
策略 MultiAssetChannelBreakoutV5
交易所 OKX
交易模式 USDT-M 永续合约 / 逐仓
币对 BTC/USDT, ETH/USDT
时间周期 15m
杠杆 10x(策略内固定)
最大持仓 2
硬止损 -80%config 与策略 stoploss=-0.80 一致;10x 杠杆下=价格 -8%
资金量 unlimited(全仓比例 99%
API Server 0.0.0.0:8080
飞书 Webhook 已启用
UI FreqUI

9. 策略说明(MultiAssetChannelBreakoutV5

9.1 核心逻辑

模块 说明
指标 ATR(10) 波动率 + SMA 长均线 + 通道上下轨 + ADX(14) 动量
入场 收盘价突破动态上轨 在长均线上方 ADX > 28
入场确认 实时下单防追高(偏离信号 K 线收盘价 >1% 取消)+ 防假突破(价格不低于信号 K 线均线和上轨)
出场 收盘价跌破动态退出线(下轨 + ATR × 0.19)
止损 分段:盈利 >5% 保本、>15% 允许 10% 回撤、>30% 允许 10% 回撤,其余靠 -8% 硬止损
杠杆 固定 10x

9.2 关键参数

参数 默认值 说明
up_line_span 340 上轨窗口(15m K 线数,约 3.5 天)
up_line_offset -0.18 上轨 ATR 偏移(负值=上轨低于最高点,降低入场门槛)
buy_stop_profit_span 141 下轨窗口
buy_stop_profit_offset 0.19 下轨 ATR 偏移
ma_span_long_days 2 长均线天数(2×96=192 根 15m K 线)
adx_threshold 28 动量过滤阈值
startup_candle_count 600 预热 K 线数

9.3 策略文件位置

位置 文件
本地 user_data/strategies/multi_asset_channel_breakout_v5.py
服务器 /opt/freqtrade/user_data/strategies/multi_asset_channel_breakout_v5.py
备份 skills/core/

10. 更换策略流程

# 1. 修改策略文件
# 本地编辑 user_data/strategies/xxx.py

# 2. 推送到服务器
scp -o ProxyJump=ecs user_data/strategies/xxx.py vultr:/opt/freqtrade/user_data/strategies/

# 3. 修改 config.json 中的 strategy 名称和 timeframe
ssh vultr "sed -i 's/\"strategy\": \"旧策略\"/\"strategy\": \"新策略\"/' /opt/freqtrade/user_data/config.json"

# 4. 重启服务
ssh vultr "systemctl restart freqtrade"

# 5. 验证
ssh vultr "journalctl -u freqtrade --no-pager -n 20 | grep -E 'strategy|RUNNING|Error'"

11. 注意事项

  • SSH 跳板:必须通过 ProxyJump ecs 走阿里云跳板,直连 Vultr 会超时
  • Python 版本Ubuntu 22.04 默认 3.10,必须装 3.12
  • OKX hostname:用 www.okx.cab 而非 www.okx.com,国内访问 okx.com 受限
  • 时区:服务器保持 UTC,所有交易所时间戳和 freqtrade 内部均用 UTC
  • Warmup:策略启动时通过 REST 拉取历史 K 线(startup_candle_count=600),约 3 次 API 调用,完成后图表立即可用
  • 仅做多can_short = False
  • ROI 禁用minimal_roi = {"0": 100},全部由信号出场和 custom_stoploss 处理
  • 服务自恢复Restart=on-failure + RestartSec=10,进程崩溃 10 秒后自动重启