3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在 JoinQuant 聚宽平台中,jqlib.technical_analysis 库提供的 MACD 函数设计初衷是为了获取指定时间点(check_date)的截面数据。当您传入 check_date='2020-07-02' 且 unit='1m' 时,函数计算的是截至 2020-07-02 最后一分钟(即 15:00:00)的 MACD 值,因此只会返回一个标量结果,而不是一整天的时间序列。
在量化回测和研究中,如果需要获取一整天(240根1分钟K线)的 MACD 序列,最标准且高效的做法是:先使用 get_price 或 get_bars 获取全天的1分钟 K 线数据,然后使用 talib 库进行批量计算。
以下是获取某只股票全天1分钟 MACD 数据的完整代码示例:
import jqdata
import talib
import pandas as pd
# 1. 设定参数
security = '000001.XSHE'
target_date = '2020-07-02'
# 2. 获取当天的1分钟级别收盘价数据
# 注意:为了让当天的第一根K线也能计算出准确的MACD,通常需要往前多取一些数据(例如前几天的1分钟数据)
# 这里为了演示,我们直接取当天的240根K线。实际应用中建议 count 设大一点(如 count=500)
df = get_price(security,
start_date=target_date + ' 09:30:00',
end_date=target_date + ' 15:00:00',
frequency='1m',
fields=['close'])
# 3. 使用 talib 计算 MACD 序列
# talib.MACD 返回三个数组:macd (对应DIF), macdsignal (对应DEA), macdhist (对应MACD柱子)
macd_dif, macd_dea, macd_hist = talib.MACD(df['close'].values,
fastperiod=12,
slowperiod=26,
signalperiod=9)
# 4. 将计算结果拼接到 DataFrame 中
df['DIF'] = macd_dif
df['DEA'] = macd_dea
# 注意:国内炒股软件的 MACD 柱子通常是 (DIF - DEA) * 2,而 talib 默认没有乘 2,所以这里乘以 2 保持一致
df['MACD'] = macd_hist * 2
# 5. 打印结果(去除前面因为周期不足导致计算为 NaN 的行)
print(df.dropna())
NaN 或与行情软件有误差。建议在 get_price 时往前多取 2-3 天的 1 分钟数据,计算完 MACD 后,再截取您真正需要的 2020-07-02 当天的数据。talib.MACD 计算出的 macdhist 是 DIF - DEA。国内同花顺、通达信等软件显示的 MACD 红绿柱通常是 (DIF - DEA) * 2。如果您需要与国内软件对齐,记得将结果乘以 2。