跳至内容

订单流数据

本指南将引导您了解如何在 Freqtrade 中使用公共交易数据进行高级订单流分析。

实验性功能

订单流功能目前处于测试阶段,未来版本中可能会有所变更。请在 Freqtrade GitHub 仓库 上报告任何问题或反馈。此外,该功能目前尚未与 freqAI 进行过测试,因此暂不支持将这两个功能结合使用。

性能

订单流需要原始交易数据。这些数据量较大,在 Freqtrade 需要下载最近 X 根 K 线的交易数据时,可能导致初始启动速度较慢。此外,启用此功能会增加内存使用量。请确保设备有足够的资源。

入门指南

启用公共交易

在您的 config.json 文件中,在 exchange 部分下将 use_public_trades 选项设置为 true。

"exchange": {
   ...
   "use_public_trades": true,
}

配置订单流处理

在 config.json 的 orderflow 部分中定义您希望的订单流处理设置。您可以在此调整以下参数:

  • cache_size:指定保留多少根之前的订单流 K 线进入缓存,避免每根新 K 线都重新计算
  • max_candles:过滤您希望获取交易数据的 K 线数量。
  • scale:控制足迹图中价格区间的大小(即价格档位宽度)。
  • stacked_imbalance_range:定义被视为连续失衡的最小价格层数量。
  • imbalance_volume:过滤掉低于此阈值的成交量失衡情况。
  • imbalance_ratio:过滤掉买卖量差额比率低于此值的失衡情况。
"orderflow": {
    "cache_size": 1000, 
    "max_candles": 1500, 
    "scale": 0.5, 
    "stacked_imbalance_range": 3, //  needs at least this amount of imbalance next to each other
    "imbalance_volume": 1, //  filters out below
    "imbalance_ratio": 3 //  filters out ratio lower than
  },

下载用于回测的交易数据

要下载用于回测的历史交易数据,请在 freqtrade download-data 命令中使用 --dl-trades 参数。

freqtrade download-data -p BTC/USDT:USDT --timerange 20230101- --trading-mode futures --timeframes 5m --dl-trades

数据可用性

并非所有交易所都提供公开的交易数据。对于支持的交易所,如果你使用 --dl-trades 参数开始下载数据,而公共交易数据不可用时,freqtrade 会向你发出警告。

访问订单流数据

启用后,你的数据框(dataframe)中将出现多个新列:

dataframe["trades"] # Contains information about each individual trade.
dataframe["orderflow"] # Represents a footprint chart dict (see below)
dataframe["imbalances"] # Contains information about imbalances in the order flow.
dataframe["bid"] # Total bid volume 
dataframe["ask"] # Total ask volume
dataframe["delta"] # Difference between ask and bid volume.
dataframe["min_delta"] # Minimum delta within the candle
dataframe["max_delta"] # Maximum delta within the candle
dataframe["total_trades"] # Total number of trades
dataframe["stacked_imbalances_bid"] # List of price levels of stacked bid imbalance range beginnings
dataframe["stacked_imbalances_ask"] # List of price levels of stacked ask imbalance range beginnings

你可以在策略代码中访问这些列以进行进一步分析。示例如下:

def populate_indicators(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
    # Calculating cumulative delta
    dataframe["cum_delta"] = cumulative_delta(dataframe["delta"])
    # Accessing total trades
    total_trades = dataframe["total_trades"]
    ...

def cumulative_delta(delta: Series):
    cumdelta = delta.cumsum()
    return cumdelta

足迹图 (dataframe["orderflow"])

该列提供了不同价格水平上买入和卖出委托的详细分解,有助于深入了解订单流动态。配置中的 scale 参数决定了此表示的价格区间大小。

orderflow 列包含一个具有以下结构的字典:

{
    "price": {
        "bid_amount": 0.0,
        "ask_amount": 0.0,
        "bid": 0,
        "ask": 0,
        "delta": 0.0,
        "total_volume": 0.0,
        "total_trades": 0
    }
}

订单流列说明

  • 键:价格区间 — 按 scale 设定的间隔进行分组
  • bid_amount:每个价格水平上的总买入成交量。
  • ask_amount:每个价格水平上的总卖出成交量。
  • bid:每个价格水平上的买入订单数量。
  • ask:每个价格水平上的卖出订单数量。
  • delta:每个价格水平上卖单与买单之间的成交量差值。
  • total_volume:每个价格水平上的总成交量(卖方量 + 买方量)。
  • total_trades:每个价格水平上的总交易笔数(卖单数 + 买单数)。

通过利用这些功能,你可以基于订单流分析获得有关市场情绪和潜在交易机会的宝贵洞察。

原始交易数据 (dataframe["trades"])

列出蜡烛图周期内发生的各个逐笔交易。这些数据可用于对订单流动态进行更细致的分析。

每条记录均为一个包含以下键的字典:

  • timestamp:交易的时间戳。
  • date:交易的日期。
  • price:交易价格。
  • amount:交易量。
  • side:买入或卖出。
  • id:交易的唯一标识符。
  • cost:交易的总成本(价格 × 数量)。

失衡信息 (dataframe["imbalances"])

该列提供一个字典,包含有关订单流中失衡情况的信息。当某一价格水平上的卖单量与买单量存在显著差异时,即发生失衡。

每一行如下所示——以价格为索引,对应的买卖失衡值作为列

{
    "price": {
        "bid_imbalance": False,
        "ask_imbalance": False
    }
}