交易对象¶
交易¶
Freqtrade 建立的持仓会被存储在 Trade 对象中,并持久化到数据库。这是 freqtrade 的核心概念之一,在文档的许多部分都会提到,通常会引导你来到此处。
该对象会在多个 策略回调函数 中传递给策略。传递给策略的对象不能直接修改,但可能会根据回调结果产生间接修改。
交易 - 可用属性¶
以下属性/特性可用于每个单独的交易,可通过 trade.<property> 的形式访问(例如 trade.pair)。
| 属性 | 数据类型 | 描述 |
|---|---|---|
交易对 |
字符串 | 此交易的交易对。 |
is_open |
布尔值 | 交易当前是否处于开放状态,或已经结束。 |
open_rate |
浮点数 | 进入该交易时的价格(若发生交易调整,则为平均入场价)。 |
close_rate |
浮点数 | 平仓价格——仅当 is_open = False 时设置。 |
stake_amount |
浮点数 | 以投注(或报价)货币计的金额。 |
amount |
浮点数 | 当前持有的资产/基础货币数量。初始订单成交前将为 0.0。 |
开仓时间 |
日期时间 | 交易开启的时间戳 请改用 open_date_utc |
open_date_utc |
日期时间 | 交易开启的时间戳(UTC 时间)。 |
close_date |
日期时间 | 交易关闭的时间戳 请改用 close_date_utc |
close_date_utc |
日期时间 | 交易关闭的时间戳(UTC 时间)。 |
close_profit |
浮点数 | 交易关闭时的相对收益。0.01 等于 1% |
close_profit_abs |
浮点数 | 交易关闭时的绝对收益(以投注货币计)。 |
realized_profit |
浮点数 | 交易仍处于开放状态时已实现的绝对收益(以投注货币计)。 |
leverage |
浮点数 | 此交易使用的杠杆——现货市场默认为 1.0。 |
enter_tag |
字符串 | 通过数据框中 enter_tag 列在入场时提供的标签。 |
is_short |
布尔值 | 若是做空交易则为 True,否则为 False。 |
orders |
Order[] | 与此交易关联的订单对象列表(包括已成交和已取消的订单)。 |
date_last_filled_utc |
日期时间 | 最后一次订单成交的时间。 |
entry_side |
"buy" / "sell" | 进入交易时的订单方向。 |
exit_side |
"buy" / "sell" | 将导致交易退出/仓位减少的订单方向。 |
trade_direction |
"long" / "short" | 交易方向的文字描述——多头或空头。 |
nr_of_successful_entries |
int | 成功(已成交)的建仓订单数量。 |
nr_of_successful_exits |
int | 成功(已成交)的平仓订单数量。 |
has_open_orders |
布尔值 | 该交易是否有未成交的挂单(不包括止损单)。 |
类方法¶
以下是类方法 —— 它们返回通用信息,通常会触发对数据库的显式查询。可以使用 Trade.<方法名> 的形式调用,例如:open_trades = Trade.get_open_trade_count()
回测/超参数优化
大多数方法在回测/超参数优化和实盘/模拟模式下均可使用。在回测时,仅限在策略回调函数中使用。不支持在 populate_*() 方法中使用,否则会导致错误结果。
get_trades_proxy¶
当你的策略需要获取有关现有交易(无论是开仓还是已平仓)的信息时,最好使用 Trade.get_trades_proxy()。
用法:
from freqtrade.persistence import Trade
from datetime import timedelta
# ...
trade_hist = Trade.get_trades_proxy(pair='ETH/USDT', is_open=False, open_date=current_date - timedelta(days=2))
get_trades_proxy() 支持以下关键字参数。所有参数均为可选,调用 get_trades_proxy() 时不带参数将返回数据库中所有交易的列表。
pair,例如:pair='ETH/USDT'is_open,例如:is_open=Falseopen_date,例如:open_date=current_date - timedelta(days=2)close_date,例如:close_date=current_date - timedelta(days=5)
get_open_trade_count¶
获取当前处于开仓状态的交易数量
from freqtrade.persistence import Trade
# ...
open_trades = Trade.get_open_trade_count()
get_total_closed_profit¶
获取机器人至今为止的总盈利。该方法会汇总所有已平仓交易的 close_profit_abs 值。
from freqtrade.persistence import Trade
# ...
profit = Trade.get_total_closed_profit()
total_open_trades_stakes¶
获取当前所有交易中投入的总 stake_amount(投注金额)。
from freqtrade.persistence import Trade
# ...
profit = Trade.total_open_trades_stakes()
get_overall_performance¶
获取整体表现情况 —— 类似于 /performance 电报命令。
from freqtrade.persistence import Trade
# ...
if self.config['runmode'].value in ('live', 'dry_run'):
performance = Trade.get_overall_performance()
返回示例值:ETH/BTC 共进行了 5 次交易,总利润为 1.5%(即 0.015 的比率)。
{"pair": "ETH/BTC", "profit": 0.015, "count": 5}
订单对象¶
Order 对象表示交易所上的一个订单(或在模拟模式下的虚拟订单)。每个 Order 对象始终与其对应的 Trade 相关联,仅在交易上下文中才有意义。
订单 - 可用属性¶
一个 Order 对象通常与一笔交易相关联。此处大多数属性可能为 None,因为它们取决于交易所的响应。
| 属性 | 数据类型 | 描述 |
|---|---|---|
交易 |
交易 | 此订单所关联的 Trade 对象 |
ft_pair |
字符串 | 此订单对应的交易对 |
ft_is_open |
布尔值 | 订单是否仍然开放? |
order_type |
字符串 | 交易所定义的订单类型——通常为市价单、限价单或止损单 |
status |
字符串 | 根据ccxt 订单结构定义的状态。通常为 open(开放)、closed(已关闭)、expired(已过期)、canceled(已取消)或 rejected(被拒绝) |
side |
字符串 | 买入或卖出 |
价格 |
浮点数 | 下单时的价格 |
average |
浮点数 | 订单成交的平均价格 |
amount |
浮点数 | 以基础货币计的金额 |
filled |
浮点数 | 已成交数量(以基础货币计)(建议使用 safe_filled) |
safe_filled |
浮点数 | 已成交数量(以基础货币计)——保证不为 None |
remaining |
浮点数 | 剩余数量(建议使用 safe_remaining) |
safe_remaining |
浮点数 | 剩余数量——直接来自交易所或通过计算得出。 |
cost |
浮点数 | 订单成本——通常为 average * filled(期货交易中依赖于交易所,可能包含或不包含杠杆的成本,也可能以合约数量表示) |
stake_amount |
浮点数 | 此订单所使用的 stake 金额。2023.7 版本中新增 |
stake_amount_filled |
浮点数 | 此订单已成交的 stake 金额。2024.11 版本中新增 |
order_date |
日期时间 | 订单创建日期 请使用 order_date_utc 代替 |
order_date_utc |
日期时间 | 订单创建日期(UTC 时间) |
order_fill_date |
日期时间 | 订单成交日期 请使用 order_fill_utc 代替 |
order_fill_date_utc |
日期时间 | 订单成交日期 |