3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
MA 函数的 security_list 可以换成其他指标吗?在 JoinQuant 的技术指标库(jqlib.technical_analysis)中,MA(security_list, check_date, timeperiod=5) 这个函数的底层逻辑是**专门针对股票代码(Security)**去获取其历史收盘价,然后再计算移动平均的。因此,你不能直接把 security_list 替换成一个已经计算好的指标序列或数值列表,否则函数会因为无法识别股票代码而报错。
如果你已经计算出了某个自定义指标的时间序列(例如一个 pandas.Series 或 list),想要对它求移动平均,最标准且高效的方法是使用 Python 数据分析库 Pandas 的 rolling 方法。
代码示例:
import pandas as pd
# 假设 custom_indicator 是你计算出来的一个包含历史数据的 pandas.Series
# 计算5日简单移动平均 (SMA)
ma_5 = custom_indicator.rolling(window=5).mean()
# 获取最新一天的 MA 值
latest_ma = ma_5.iloc[-1]
mean() 算出来的结果和通达信差很大?如果你自己用 mean() 算出来的 MA 结果与通达信软件上的数据差异很大,通常是由以下几个原因造成的:
set_option('use_real_price', True),通过 attribute_history 或 get_price 拿到的依然是基于当天的前复权价格。get_price(..., fq=None) 获取不复权数据进行对比验证。attribute_history),默认 skip_paused=True(跳过停牌日)。但如果使用 get_price 且未设置跳过,停牌日会用前一天的收盘价填充。skip_paused 的设置与通达信的展示逻辑一致。MA 是简单移动平均(Simple Moving Average)。如果你在 JoinQuant 中不小心使用了 EMA(指数移动平均)或 VWAP(成交量加权平均价),结果自然不同。rolling(window=N).mean(),这等价于通达信的 MA(C, N)。对于自定义指标的均线计算,放弃内置的 MA 函数,直接使用 pandas 的 rolling().mean()。同时,严格核对 JoinQuant 获取底层数据时的复权参数(fq)和停牌处理参数(skip_paused),使其与通达信的设置保持一致,数据差异自然就会消除。