跳至内容

SQL 帮助

本页面提供了一些帮助信息,供您查询 sqlite 数据库时使用。

其他数据库系统

如需使用 PostgreSQL 或 MariaDB 等其他数据库系统,您可以使用相同的查询语句,但需要使用对应数据库系统的客户端工具。点击此处了解如何在 freqtrade 中配置不同的数据库系统。

警告

如果您不熟悉 SQL,请务必谨慎执行数据库查询。
在运行任何查询之前,请确保已备份您的数据库。

安装 sqlite3

Sqlite3 是一个基于终端的 sqlite 应用程序。如果您更习惯图形化操作,也可以使用 SqliteBrowser 等可视化数据库编辑器。

Ubuntu/Debian 安装

sudo apt-get install sqlite3

通过 Docker 使用 sqlite3

Freqtrade 的 Docker 镜像已包含 sqlite3,因此您无需在主机上安装任何软件即可编辑数据库。

docker compose exec freqtrade /bin/bash
sqlite3 <database-file>.sqlite

打开数据库

sqlite3
.open <filepath>

表结构

列出所有表

.tables

显示表结构

.schema <table_name>

获取表中所有交易记录

SELECT * FROM trades;

破坏性查询

写入数据库的查询。通常不需要执行这些查询,因为 freqtrade 会自行处理所有数据库操作,或通过 API 或 Telegram 命令提供接口。

警告

在运行以下任何查询之前,请务必备份您的数据库。

危险

当机器人连接到数据库时,绝不要执行任何写入操作(updateinsertdelete)。这将导致数据损坏,并且很可能无法恢复。

修复交易所手动退出后仍显示为打开的交易

警告

在交易所手动卖出交易对不会被机器人检测到,它仍会尝试进行卖出操作。尽可能使用 /forceexit 来实现相同目的。
在进行任何手动更改之前,强烈建议备份您的数据库文件。

注意

在使用 /forceexit 后不应再需要此操作,因为强制退出订单会在下一次循环中由机器人自动关闭。

UPDATE trades
SET is_open=0,
  close_date=<close_date>,
  close_rate=<close_rate>,
  close_profit = close_rate / open_rate - 1,
  close_profit_abs = (amount * <close_rate> * (1 - fee_close) - (amount * (open_rate * (1 - fee_open)))),
  exit_reason=<exit_reason>
WHERE id=<trade_ID_to_update>;

示例

UPDATE trades
SET is_open=0,
  close_date='2020-06-20 03:08:45.103418',
  close_rate=0.19638016,
  close_profit=0.0496,
  close_profit_abs = (amount * 0.19638016 * (1 - fee_close) - (amount * (open_rate * (1 - fee_open)))),
  exit_reason='force_exit'  
WHERE id=31;

从数据库中删除交易

使用 RPC 方法删除交易

建议通过 Telegram 或 REST API 使用 /delete <tradeid>。这是删除交易的推荐方式。

如果您仍希望直接从数据库中删除交易,可以使用以下查询。

危险

某些系统(如 Ubuntu)在其 sqlite3 打包版本中禁用了外键。如果使用 sqlite,请确保在执行上述查询前运行 PRAGMA foreign_keys = ON 以启用外键。

DELETE FROM trades WHERE id = <tradeid>;

DELETE FROM trades WHERE id = 31;

警告

这将从数据库中删除该交易。请确保您输入了正确的 ID,并且绝不要在没有 where 子句的情况下运行此查询。