如何用CCXT获取KuCoin当前未闭合K线(Active Candle)的OHLCV数据?
获取KuCoin未闭合K线(Active Candle)的解决方法
你遇到的问题是CCXT默认fetch_ohlcv只返回已闭合K线,要拿到当前未闭合的活跃K线,核心是手动指定周期起始时间来获取,下面是两种可行方案:
方案一:通过周期起始时间直接获取当前活跃K线
利用CCXT的parse_timeframe计算周期毫秒数,算出当前周期的起始时间戳,再用fetch_ohlcv的since参数获取该周期的K线(就是未闭合的那根),最后和已闭合K线合并:
import ccxt import pandas as pd ex = ccxt.kucoin() def get_combined_ohlcv(symbol, timeframe, closed_limit=20): # 获取最近的已闭合K线 closed_ohlcv = ex.fetch_ohlcv(symbol, timeframe, limit=closed_limit) # 计算当前周期的起始时间戳 period_minutes = ex.parse_timeframe(timeframe) period_ms = period_minutes * 60 * 1000 # 转成毫秒 now_ms = ex.milliseconds() current_period_start = now_ms - (now_ms % period_ms) # 获取当前未闭合的活跃K线 active_ohlcv = ex.fetch_ohlcv(symbol, timeframe, since=current_period_start, limit=1) # 合并已闭合和活跃K线 if active_ohlcv: all_ohlcv = closed_ohlcv + active_ohlcv else: all_ohlcv = closed_ohlcv # 转成DataFrame并格式化时间 df = pd.DataFrame(all_ohlcv, columns=['TIME', 'OPEN', 'HIGH', 'LOW', 'CLOSE', 'VOLUME']) df['TIME'] = pd.to_datetime(df['TIME'], unit='ms') return df # 调用示例 result_df = get_combined_ohlcv('TRX/USDT', '15m', closed_limit=20) print(result_df)
方案二:结合Ticker数据补充活跃K线
如果方案一获取的活跃K线数据不全(比如新周期刚开始还没交易),可以用fetch_ticker拿到实时的最高、最低和最新价,手动构造活跃K线:
import ccxt import pandas as pd ex = ccxt.kucoin() def get_ohlcv_with_active(symbol, timeframe, closed_limit=20): closed_ohlcv = ex.fetch_ohlcv(symbol, timeframe, limit=closed_limit) ticker = ex.fetch_ticker(symbol) # 计算活跃K线的时间戳 last_closed_time = closed_ohlcv[-1][0] period_ms = ex.parse_timeframe(timeframe) * 60 * 1000 active_time = last_closed_time + period_ms # 构造活跃K线:开盘价优先用周期起始价,无数据则用上一根收盘价近似 active_candle = [ active_time, ticker.get('open', closed_ohlcv[-1][1]), ticker['high'], ticker['low'], ticker['last'], ticker['quoteVolume'] ] all_ohlcv = closed_ohlcv + [active_candle] df = pd.DataFrame(all_ohlcv, columns=['TIME', 'OPEN', 'HIGH', 'LOW', 'CLOSE', 'VOLUME']) df['TIME'] = pd.to_datetime(df['TIME'], unit='ms') return df # 调用示例 result_df = get_ohlcv_with_active('TRX/USDT', '15m', closed_limit=20) print(result_df)
关键说明
- KuCoin的公开API默认不返回未闭合K线,所以必须通过指定
since参数或者结合实时数据来构造。 parse_timeframe是CCXT的工具函数,能自动把'15m'、'1h'这类字符串转换成对应的分钟数,避免手动计算出错。- 方案一获取的是交易所官方统计的当前K线数据,准确性更高;方案二更适合需要实时补全的场景。
内容的提问来源于stack exchange,提问作者H.Ka
相关产品推荐
相关产品推荐

