跳至内容

蜡烛图

蜡烛图功能允许用户从某些支持的交易所获取实时市场数据,并以 OHLCV(开盘价、最高价、最低价、收盘价、成交量)形式组成一个滑动窗口。

它结合历史数据和实时数据来生成并维护此窗口,使用户能够利用pandas_ta创建自定义技术指标。

支持的交易所

请参阅蜡烛图数据源查看当前支持的交易所列表。

常见的做法是在去中心化交易所或小型交易所运行机器人时,使用来自其他交易所的蜡烛图数据。

关键配置参数

  • connector:数据来源(例如,binancebinance_perpetual)。
  • trading_pair:交易对(例如,BTC-USDT)。
  • interval:蜡烛图之间的时间间隔(例如,5m 表示 5 分钟)。
  • max_records:存储蜡烛图的最大数量。

下载蜡烛图数据

蜡烛图提供了一种简洁的方式来访问交易所的历史数据。请参见download_candles脚本。

添加技术指标

将技术指标整合到蜡烛图数据中,以增强策略分析能力:

def format_status(self) -> str:
    # Ensure market connectors are ready
    if not self.ready_to_trade:
        return "Market connectors are not ready."
    lines = []
    if self.all_candles_ready:
        # Loop through each candle set
        for candles in [self.eth_1w_candles, self.eth_1m_candles, self.eth_1h_candles]:
            candles_df = candles.candles_df
            # Add RSI, BBANDS, and EMA indicators
            candles_df.ta.rsi(length=14, append=True)
            candles_df.ta.bbands(length=20, std=2, append=True)
            candles_df.ta.ema(length=14, offset=None, append=True)
            # Format and display candle data
            lines.extend([f"Candles: {candles.name} | Interval: {candles.interval}"])
            lines.extend(["    " + line for line in candles_df.tail().to_string(index=False).split("\n")])
    else:
        lines.append("  No data collected.")

    return "\n".join(lines)

多个蜡烛图

对于需要多个时间周期或多个交易对的策略,请初始化多个独立实例:

from hummingbot.data_feed.candles_feed.candles_factory import CandlesFactory, CandlesConfig

class InitializingCandlesExample(ScriptStrategyBase):
    # Configure two different sets of candles
    candles_config_1 = CandlesConfig(connector="binance", trading_pair="BTC-USDT", interval="3m")
    candles_config_2 = CandlesConfig(connector="binance_perpetual", trading_pair="ETH-USDT", interval="1m")

    # Initialize candles using the configurations
    candles_1 = CandlesFactory.get_candle(candles_config_1)
    candles_2 = CandlesFactory.get_candle(candles_config_2)

status中显示蜡烛图

修改format_status方法以显示 K 线数据:

def format_status(self) -> str:
    # Check if trading is ready
    if not self.ready_to_trade:
        return "Market connectors are not ready."

    lines = ["\n############################################ Market Data ############################################\n"]
    # Check if the candle data is ready
    if self.eth_1h_candles.is_ready:
        # Format and display the last few candle records
        candles_df = self.eth_1h_candles.candles_df
        candles_df["timestamp"] = pd.to_datetime(candles_df["timestamp"], unit="ms").dt.strftime('%Y-%m-%d %H:%M:%S')
        display_columns = ["timestamp", "open", "high", "low", "close"]
        formatted_df = candles_df[display_columns].tail()
        lines.append("One-hour Candles for ETH-USDT:")
        lines.append(formatted_df.to_string(index=False))
    else:
        lines.append("  One-hour candle data is not ready.")

    return "\n".join(lines)

定期记录蜡烛图数据

要在on_tick方法中记录蜡烛图数据:

def on_tick(self):
    self.logger().info(self.candles.candles_df)

其他关键方法和属性

  • startstop 方法:控制蜡烛图数据流的启动和终止。
  • is_ready 属性:检查蜡烛图数据是否完整并已准备好使用。
  • candles_df 属性:访问包含最新蜡烛图数据的 DataFrame。