跳转至内容

蜡烛图

蜡烛图允许用户从某些支持的交易所获取以 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方法以显示蜡烛图数据:

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。