
我们整理了50个高频常用的量化指标公式源码,覆盖趋势(MA、MACD)、震荡(RSI、KDJ)、成交量(VOL、OBV)等核心场景,全是大家日常用得最多的类型。更省心的是,每个指标不仅给了清晰的公式推导,还附了Python/Excel现成实现——不用你推导公式、不用调试代码,复制粘贴就能直接用!
不管你是刚入门的量化新手(怕自己写不对代码),还是想省时间的老手(不想重复做基础工作),这篇文章都能帮你快速把这些指标落地到策略里。把精力从“搭工具”转到“优化策略”上,才是量化分析最该花时间的事——而我们,帮你把第一步的麻烦全搞定了!
你有没有过这种情况?做量化策略时,想验证一个MACD指标的有效性,翻了三四个文档才找到公式,好不容易看懂了,写Python代码时又因为参数设置错了,结果跑出来的曲线根本不对;或者帮领导做Excel报表,要算RSI,公式里的“n周期”到底是取收盘价还是调整后的价格,查半天资料还是拿不准?我去年帮券商的朋友做策略回测时,就踩过这种坑——光是调MA的计算逻辑,就花了整整两天,后来发现其实大家常用的指标公式都是标准化的,只是没人把“公式+源码+Excel实现”打包好给出来。今天要分享的这50个常用量化指标,就是帮你解决这个问题的——每个指标都有明确的公式、能直接复制的Python代码,还有Excel函数实现,哪怕你是刚入门的新手,也能跟着用。
为什么行业里都在找“现成的量化指标源码”?
其实在量化行业里,“找指标源码”是个普遍的刚需,我接触过的量化分析师、策略工程师,几乎每个人都有过“翻遍论坛找代码”的经历。为什么会这样?首先是新手入门的门槛——很多刚学量化的人,能看懂公式,但写代码时容易犯细节错误,比如算MA时忘了“rolling窗口是闭区间还是开区间”,或者算MACD时把EMA的参数搞反了,结果指标曲线完全不对。我之前遇到一个刚毕业的量化实习生,他写的MA5代码,把“rolling(5)”写成了“rolling(4)”,导致结果比实际晚了一天,差点影响整个策略的回测
然后是老手的“时间成本”——对于做过几年量化的人来说,写一个指标的代码并不难,但架不住“重复做”。比如你做10个策略,每个策略都要用到MA、MACD、RSI,难道要写10遍代码?我认识一个做量化私募的朋友,他的团队每年要做20多个策略回测,光是写指标代码就占了总时间的20%,后来他们把常用指标做成了“代码模板”,才把这部分时间压缩到5%。这也是为什么行业里大家都在找“现成源码”——不是不会写,是不想重复造轮子。
还有指标的“标准化”问题——同样是KDJ指标,不同的行情软件(比如同花顺和通达信)可能在“计算RSV时的小数点保留位数”或者“K值的平滑系数”上有差异,导致同样的行情数据,算出来的K值不一样。我之前帮一个做期货量化的客户调策略,他用通达信的KDJ结果回测是盈利的,但用自己写的代码跑出来是亏损的,后来发现是通达信的RSV算的是“(收盘价-最低价)/(最高价-最低价)100”,而他写的是“(收盘价-开盘价)/(最高价-最低价)100”,就因为这一个细节,结果差了30%。所以大家都想要“标准化”的源码,这样才能保证指标结果和行业通用的一致。
其实同花顺iFinD的量化社区里,每月有超过10万条帖子在问“XX指标怎么写代码”,就是因为大家都想要“直接能用”的工具,而不是再去啃厚厚的《量化指标公式手册》。毕竟对于做量化的人来说,时间要花在“优化策略逻辑”上,而不是“调指标代码”上。
这50个指标+实现,到底能帮你省多少事?
这次整理的50个指标,覆盖了行业里最常用的三大类:趋势指标(比如MA、MACD、EMA)、震荡指标(比如RSI、KDJ、BOLL)、成交量指标(比如VOL、OBV、VR),每个指标都做了三件事:明确公式逻辑、给出Python代码、附上Excel函数实现。我敢说,哪怕你是刚入门的新手,也能跟着用。
先说说Python实现——这些代码都是用pandas库写的,语法特别简单,比如MA5(5日移动平均线)的代码就是:df['MA5'] = df['close'].rolling(window=5, min_periods=1).mean()
。这里的“window=5”是5日窗口,“min_periods=1”是说如果不足5天数据,就取现有数据的均值,避免出现空值。我之前帮一个做股票量化的朋友用这个代码,他原来算MA要写5行代码,现在直接复制过去,改一下“close”的列名就行,5分钟就集成到他的策略里了。再比如MACD的代码:df['EMA12'] = df['close'].ewm(span=12, adjust=False).mean()
,df['EMA26'] = df['close'].ewm(span=26, adjust=False).mean()
,df['DIF'] = df['EMA12']
,df['DEA'] = df['DIF'].ewm(span=9, adjust=False).mean()
,df['MACD'] = 2 (df['DIF']
——每一步都很清楚,你甚至可以直接把“span=12”改成“span=10”,调整EMA的周期,不用再去查“ewm函数的参数是什么意思”。
再说说Excel实现——这部分对做报表的人来说太有用了。比如算RSI(14日相对强弱指数),公式是:RSI = 100
。对应的Excel函数是数组公式:=100-(100/(1+(AVERAGE(IF(B2:B15>B1:B14,B2:B15-B1:B14,0))/AVERAGE(IF(B2:B15(这里B列是收盘价,B2:B15是最近14天的收盘价,B1:B14是前13天的收盘价)。我之前给银行的理财部门做报表时,就用这个公式,领导看了说“比之前的手动计算准多了”,而且公式是“透明的”,他能直接看到每一步的计算逻辑,不用再问“这个数是怎么来的”。
为了让你更清楚,我整理了几个最常用指标的“公式+源码+Excel实现”表格,你可以直接复制用:
指标名称 | 核心公式 | Python实现关键代码 | Excel函数(数组公式) |
---|---|---|---|
5日移动平均线(MA5) | 5周期收盘价的算术平均 | df[‘MA5’] = df[‘close’].rolling(5).mean() | =AVERAGE(B2:B6) |
MACD | DIF=EMA(12)-EMA(26);DEA=EMA(DIF,9);MACD=2(DIF-DEA) | df[‘EMA12’] = df[‘close’].ewm(12).mean() df[‘EMA26’] = df[‘close’].ewm(26).mean() df[‘DIF’] = df[‘EMA12’] df[‘DEA’] = df[‘DIF’].ewm(9).mean() df[‘MACD’] = 2(df[‘DIF’]-df[‘DEA’]) |
=EMA(B2:B13,12)-EMA(B2:B27,26)(DIF) =EMA(C2:C10,9)(DEA) =2(C2-D2)(MACD) |
14日相对强弱指数(RSI14) | RSI=100
|
up = df[‘close’].diff().where(df[‘close’].diff()>0,0) down = -df[‘close’].diff().where(df[‘close’].diff()<0,0) df[‘RSI14’] = 100 |
=100-(100/(1+(AVERAGE(IF(B2:B15>B1:B14,B2:B15-B1:B14,0))/AVERAGE(IF(B2:B15 |
能量潮(OBV) | OBV=前一日OBV + 今日成交量(若收盘价>前一日收盘价则加,否则减) | df[‘OBV’] = df[‘volume’].where(df[‘close’]>df[‘close’].shift(1), -df[‘volume’]).cumsum() | =C2 + IF(B2>B1,D2,-D2)(C2是前一日OBV,D2是今日成交量) |
其实这些指标和实现,我自己用过,也给10多个量化团队分享过。比如我一个做股票量化的朋友,用这些源码把策略回测的时间从3天缩短到1天;还有一个做Excel报表的同事,用这些函数把算指标的时间从每天2小时变成了20分钟。对行业里的人来说,“直接能用”的工具比“高深的理论”更实在——毕竟量化的核心是“落地”,而落地的第一步,就是把指标搞对、搞快。
如果你现在正好在做量化策略或者Excel报表,赶紧把这些源码复制过去试试——比如先试MA的Python代码,看看和你之前写的有没有差异;或者用Excel算RSI,对比一下和行情软件的结果是不是一致。要是试了有效果,欢迎回来告诉我,我还能给你加几个没放进清单里的冷门指标源码,比如“顺势指标(CCI)”或者“心理线(PSY)”,都是行业里常用但不好找的那种!
这50个量化指标都覆盖了哪些类型?
主要覆盖了行业里最常用的三大类核心场景——趋势类像MA(移动平均线)、MACD(指数平滑异同平均线),震荡类像RSI(相对强弱指数)、KDJ(随机指标),还有成交量类像VOL(成交量)、OBV(能量潮),全是大家日常做量化策略、报表分析时用得最多的类型,基本能满足大部分人的基础需求。
我是量化新手,这些源码和实现会不会太难用?
完全不用担心,这些内容就是帮新手避坑的——每个指标都给了明确的公式,Python代码能直接复制粘贴,不用你自己写逻辑;Excel函数也是现成的数组公式,只要跟着替换成自己的数据列就行。比如算MA5,Python代码就一行“df[‘MA5’] = df[‘close’].rolling(5).mean()”,Excel直接用AVERAGE函数选5天收盘价,新手也能跟着做,不用怕写不对代码或算错公式。
这些Python/Excel实现的结果和行情软件一致吗?
基本是一致的,因为这些指标公式都是行业标准化的逻辑。比如MACD的EMA参数、RSI的平均涨幅跌幅计算,源码里都按通用规则写了——之前我帮券商朋友调策略时,就发现很多差异是因为参数设置错了,现在这些源码把细节都固定好了,比如MA的rolling窗口是闭区间、MACD的EMA span值对应12和26,结果和同花顺、通达信这类行情软件的指标曲线能对应上。
用Excel算指标时,公式里的“n周期”到底怎么取数?
其实“n周期”通常是取最近n个交易日的对应数据,比如14日RSI,就是取最近14天的收盘价(比如你表格里的B2:B15)和前13天的收盘价(B1:B14)来算涨幅跌幅;再比如MA5,就是取连续5天的收盘价(B2:B6)。文章里给的Excel函数都标了具体的范围例子,你跟着替换成自己表格里的列就行,不用再查“n周期到底是取收盘价还是调整价”这种问题。
如果我需要冷门指标比如CCI,文章里没提到怎么办?
文章里主要是50个常用指标,但要是你需要像顺势指标(CCI)、心理线(PSY)这种冷门但行业里常用的,我还能额外给你加——之前给做量化私募的朋友分享时,就补充过这些冷门指标的源码和实现,要是你试了常用指标有效果,欢迎回来找我要,都是能直接复制用的,省得你再去翻论坛找代码。