十二、插件系统
十二、插件系统
12.1 插件系统概述
OpenQuant提供了强大的插件系统,支持功能扩展和定制化需求。插件系统允许用户通过配置文件启用或禁用特定功能,实现模块化的系统架构。
11.1.1 插件配置
⚠️ 重要说明:
- 折扣币自动购买插件默认关闭,如需使用请手动在配置中设置
enabled = true - 该功能需要同时启用插件配置和交易所配置中的折扣币功能
- 建议在测试环境验证配置无误后再在实盘环境使用
在 config.toml 中配置插件:
[[plugin.plugins]]
name = "插件名称"
enabled = true
priority = 100
auto_restart = false
restart_delay = 5
max_restarts = 3
[plugin.plugins.config]
# 插件特定配置
11.1.2 插件参数说明
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
name | 字符串 | - | 插件名称,必须字段 |
enabled | 布尔值 | true | 是否启用插件 |
priority | 整数 | 100 | 插件优先级,数值越小优先级越高 |
auto_restart | 布尔值 | false | 插件异常时是否自动重启 |
restart_delay | 整数 | 5 | 重启延迟时间(秒) |
max_restarts | 整数 | 3 | 最大重启次数 |
12.2 折扣币自动购买插件
折扣币自动购买插件是一个智能化的交易费用优化工具,通过自动购买和管理交易所原生代币(如BNB等),为用户提供交易手续费折扣,降低交易成本。
11.2.1 功能特性
- 自动购买:根据配置的阈值自动购买折扣币
- 智能管理:自动维持指定数量的折扣币余额
- 多交易所支持:支持现货、合约等不同账户类型
- 故障恢复:具备状态持久化和断点续传功能
- 安全可靠:内置重试机制和完整的错误处理
11.2.2 配置说明
插件基础配置
在 config.toml 中添加插件配置:
[[plugin.plugins]]
name = "DiscountCoin"
enabled = true
priority = 100
auto_restart = false
restart_delay = 5
max_restarts = 3
[plugin.plugins.config]
check_interval = 60 # 检查间隔(秒)
交易所折扣币配置
⚠️ 重要说明:
- 折扣币自动购买功能默认关闭,如需使用请手动在配置中设置
enabled = true - 该功能需要插件系统支持,请确保已正确配置插件
- 建议在测试环境验证配置无误后再在实盘环境使用
支持的交易所:
- BinanceSwap: 支持BNB折扣币自动购买
- BinanceSpot: 支持BNB折扣币自动购买
- OkxSwap: 支持OKB折扣币自动购买
- OkxSpot: 支持OKB折扣币自动购买
- BybitSwap: 支持BIT折扣币自动购买
- GateSwap: 支持GT折扣币自动购买
- BitgetSwap: 支持BGB折扣币自动购买
在交易所配置中添加折扣币配置:
[[exchanges]]
exchange = "BinanceSwap"
key = "your_api_key"
secret = "your_secret_key"
# ... 其他交易所配置
[exchanges.discount_coin_config]
enabled = true # ⚠️ 重要:必须手动设置为true才能启用折扣币功能
unit = "Quote" # 计算单位:Quote(计价币价值) 或 Token(代币数量)
maintenance = 16.0 # 维持数量
buy_multiplier = 0.6 # 购买触发阈值倍数(可选,默认0.6)
quote_currency = "USDT" # 计价货币(可选,默认USDT)
quote_back_threshold = 50.0 # 剩余资金回转阈值(可选,默认50.0)
spot_index = 0 # 现货API索引(可选)
配置参数详解
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
enabled | 布尔值 | false | 是否启用折扣币自动购买功能 ⚠️ 重要:默认关闭,如需使用请手动设置为 true |
unit | 枚举 | "Quote" | 计算维持数量的单位:"Quote"(计价币价值)或 "Token"(代币数量) |
maintenance | 浮点数 | 200.0 | 维持数量:当 unit = "Quote" 时为计价币价值,当 unit = "Token" 时为代币数量 |
buy_multiplier | 浮点数 | 0.6 | 购买触发阈值倍数:购买触发阈值 = maintenance × buy_multiplier |
quote_currency | 字符串 | "USDT" | 用于购买折扣币的计价货币 |
quote_back_threshold | 浮点数 | 50.0 | 当现货账户剩余计价币低于此值时,自动转回合约账户 |
spot_index | 可选整数 | None | 指定现货API配置索引(当合约和现货使用不同API密钥时) |
check_interval | 整数 | 60 | 检查间隔时间(秒) |
11.2.3 内部流程
初始化流程
主流程:现货账户
主流程:合约账户
详细步骤:
-
步骤1:转入资金到现货账户
- 从合约账户转入购买所需的计价币
- 转入金额 = 购买金额 × 1.02(增加2%滑点保护)
- 支持重试机制,最多3次
-
步骤2:购买折扣币
- 在现货账户创建市价买单
- 等待订单完成并记录实际购买数量
- 保存订单状态以便恢复
-
步骤3:转回折扣币
- 将购买的折扣币转回合约账户
- 转账数量取实际购买数量和现货余额的较小值
- 处理可能的手续费扣除
-
步骤4:转回剩余资金
- 检查现货账户剩余计价币
- 如果余额低于
quote_back_threshold,转回合约账户 - 保持现货账户资金最小化
11.2.4 故障恢复机制
插件具备完善的故障恢复能力:
状态文件位置: data/discount_states/{exchange}.json
状态文件内容:
{
"current_step": "TransferIn",
"symbol": "BNBUSDT",
"amount": 0.1,
"need_quote": 30.5,
"order_id": "123456789",
"actual_amount": 0.1,
"last_update": 1640995200
}
11.2.5 购买触发条件
Quote 模式示例(默认)
配置:maintenance = 16, buy_multiplier = 0.6
触发条件:当前BNB价值 < 9.6 USDT (16 × 0.6)
购买数量:(16 - 当前价值) / BNB价格
Token 模式示例
配置:maintenance = 50, buy_multiplier = 0.6
触发条件:当前BNB余额 < 30 (50 × 0.6)
购买数量:50 - 当前余额
11.2.6 日志说明
Info 级别日志 只有一条配置信息日志:
[DiscountCoin] BinanceSwap 折扣币配置: 币种=BNB, 计价币=USDT, 维持数量=16, 阈值=9.60, 回转阈值=50
Debug 级别日志 详细的操作流程:
- 余额查询:
[DiscountCoin] BinanceSwap 当前BNB余额: 0.123456 - 购买计算:
[DiscountCoin] BinanceSwap 准备购买: 数量=0.123456 BNB, 价格=1234.5678, 总金额=152.34 - 订单创建:
[DiscountCoin] BinanceSwap 创建市价买单: 交易所=Binance, 数量=0.123456 BNB, 交易对=BNBUSDT - 转账操作:
[DiscountCoin] BinanceSwap 转入资金: 币种=USDT, 数量=152.34, 从=UsdtFuture 到=Spot - 步骤完成:
[DiscountCoin] BinanceSwap 转入资金步骤完成
Warning 级别日志 异常情况:
- 余额不足:
[DiscountCoin] 当前USDT余额不足, 余额: 5.00, 需要: 152.34 - 重试失败:
[DiscountCoin] 转入资金到现货账户 在 3 次重试后仍然失败 - 订单异常:
[DiscountCoin] 订单未完成,状态: PartiallyFilled
11.2.7 配置示例
币安合约账户配置
[[exchanges]]
exchange = "BinanceSwap"
key = "your_api_key"
secret = "your_secret_key"
use_ws_api = false
# 可选:配置代理
proxy = "http://127.0.0.1:7890"
[exchanges.discount_coin_config]
enabled = true
unit = "Quote"
maintenance = 16.0
buy_multiplier = 0.6
quote_currency = "USDT"
quote_back_threshold = 10.0
[[plugin.plugins]]
name = "DiscountCoin"
enabled = true
priority = 100
[plugin.plugins.config]
check_interval = 60
欧易合约账户配置
[[exchanges]]
exchange = "OkxSwap"
key = "your_api_key"
secret = "your_secret_key"
passphrase = "your_passphrase"
[exchanges.discount_coin_config]
enabled = true
unit = "Token"
maintenance = 50.0
buy_multiplier = 0.7
quote_currency = "USDT"
quote_back_threshold = 20.0
spot_index = 1 # 使用不同的现货API配置
11.2.8 最佳实践
参数设置建议
保守设置(适合大额账户):
maintenance = 100.0
buy_multiplier = 0.8
quote_back_threshold = 50.0
check_interval = 120
激进设置(适合小额账户):
maintenance = 10.0
buy_multiplier = 0.5
quote_back_threshold = 5.0
check_interval = 30
交易所特定建议
币安(Binance):
- 推荐使用BNB,手续费折扣25%
- maintenance建议设置为月交易量的0.01%
- 使用Quote模式更精确控制成本
Bybit:
- 推荐使用BIT,享受费率优惠
- 合约和现货可使用统一账户
监控建议
- 定期检查余额:确保维持足够的计价币用于购买
- 监控日志:关注warning级别日志,及时处理异常
- 验证折扣:定期确认交易手续费确实享受了折扣
- 检查状态文件:确保没有卡住的流程
11.2.9 故障排除
常见问题
-
插件未启动
[DiscountCoin] 插件未启动或配置错误解决方案:
- 检查插件配置中的
enabled = true - 检查交易所配置中的
discount_coin.enabled = true - 确认插件系统已正确加载
- 检查插件配置中的
-
余额不足警告
[DiscountCoin] 当前USDT余额不足, 余额: 5.00, 需要: 152.34解决方案:向账户转入足够的计价币
-
最小交易金额限制
[DiscountCoin] BNB 需要购买 0.001 小于最小名义价值 5, 当前价值: 0.30解决方案:调整maintenance参数或增加购买金额
-
API权限不足 解决方案:确保API密钥具有交易和转账权限
-
状态文件损坏 解决方案:删除
data/discount_states/目录下对应文件 -
插件未启动 解决方案:检查插件配置中的
enabled = true
调试步骤
- 启用Debug日志:设置日志级别为debug
- 检查配置:验证所有参数设置正确
- 测试连接:确保API连接正常
- 手动验证:手动执行购买操作验证权限
- 检查状态文件:查看是否有未完成的流程
11.2.10 安全注意事项
-
API安全:
- 使用只读+交易权限,避免提现权限
- 定期轮换API密钥
- 使用IP白名单限制
-
资金安全:
- 设置合理的maintenance数量
- 避免过大的购买金额
- 定期检查账户资金流向
-
监控安全:
- 设置余额监控告警
- 监控异常交易活动
- 保持日志审计
11.2.11 性能优化
- 检查间隔:根据交易频率调整check_interval
- 重试次数:根据网络状况调整重试策略
- 状态清理:定期清理过期的状态文件
- 日志级别:生产环境使用info级别,调试时使用debug级别