跳至内容

交易对象

交易

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=False
  • open_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 日期时间 订单成交日期