使用python定义量化指标公式

使用python定义量化指标公式

2023年7月10日发(作者:)

使⽤python定义量化指标公式使⽤python⾃定义量化指标公式量化数据来源:baostock,tushare主要量化数据来⾃baostock,因为没有积分要求,但是数据多样化暂时不及tushare,但是对于基础量化数据⼯作,已经⾜够,刚刚上⼿操作,tushare的积分并不⾜够的朋友们建议使⽤baostock,如果是已经具有wind api接⼝且拥有基础数据量以上的数据权限的,可以忽略这个。库:pandas,numpy,talib,baostock,pymongo使⽤的数据库为pymongo,实际上mysql也可以,但是使⽤了MongoDB的应该会知道,MongoDB的语法简单,和代码很类似,增删改查的⽅便程度mysql之类并不能⽐拟,所以⽤了之后就觉得很喜欢……学习难度评价:和mysql没有区别的简单pandas,numpy是基础baostock是数据源talib集成了很多指标公式,⾥⾯有的,只要和你⾃⼰的⽬标指标数据数值⼀样,或者区别可以调整,就可以直接使⽤,⽐如MACDMACD def CalculateMACD(self,df,short = 12,long = 26,mid = 9): """ 计算MACD指标,使⽤talib接⼝ 参数: param: short 默认12 param: long 默认26 param: mid 默认9 使⽤特征:close return: DataFrame columns = "code","date","DIF","DEA","MACD" 说明: 异同移动平均线 其意义和双移动平均线基本相同,即由快、慢均线的离散、聚合表征当前的多空状态和股价可能的发展变化趋势 """ DIF,DEA,MACD = (,fastperiod = short,slowperiod = long,signalperiod = mid) [:,"DIF"] = DIF [:,"DEA"] = DEA [:,"MACD"] = MACD * 2

#

只保存结论值 df = [:,["code","date","DIF","DEA","MACD"]] return df这⾥直接使⽤talib的数据,但是和同花顺等数据相⽐,其MACD没有乘2,其实就是更好看⼀点,但是为了对⽐纠错⽅⾯的⽅便,对MACD进⾏乘2处理。KDJ #

计算KDJ

def CalculateKDJ(self,df,m = 9,m1 = 3,m2 = 3): """ 计算KDJ指标 使⽤特征:close,low,high index: code,date return: DataFrame columns = "code","date","K","D","J" 说明: KDJ指标的中⽂名称⼜叫随机指标。 融合了动量观念、强弱指标和移动平均线的⼀些优点,能够⽐较迅速、快捷、直观地研判⾏情,被⼴泛⽤于股市的中短期趋势分析。 """ low_list = df['low'].rolling(m).min() high_list = df['high'].rolling(m).max() rsv = (df['close'] - low_list) / (high_list - low_list) * 100 df['K{}/{}'.format(m,m1)] = ame(rsv).ewm(adjust = False,alpha = 1 / m1).mean() df['D{}/{}'.format(m,m2)] = df['K'].ewm(adjust = False,alpha = 1 / m2).mean() df['J{}'.format(m)] = 3 * df['K'] - 2 * df['D']

#

只取结论值和index值 df = [:,["code","date",'K{}/{}'.format(m,m1),'D{}/{}'.format(m,m2),'J{}'.format(m)]] return df百度了很久这个公式,有采⽤ewm使⽤com = 2的,但是如果使⽤com = 2在默认值的情况下KDJ值是正确的,但是⾮默认值,⽐如调整参数,尝试慢速KDJ时就不对了,最终采⽤alpha = 1/m的情况,对⽐同花顺数据,是正确的。W%R def CalculateWillR(self,df): """ 计算WILLIAMS%R指标 参数:constant = 14 使⽤特征:close,high,low return: DataFrame columns = "code","date","WILLR{}".format(constant) 说明: 利⽤摆动点来量度股市的超买卖现象,可以预测循环期内的⾼点或低点,从⽽提出有效率的投资讯号 """ for wr in illR: df["WILLR{}".format(wr)] = (g(wr).max() - )/(g(wr).max() - g(wr).min()) * (100)

#

按照标准计算应该是负100,但是和同花顺的计算⽅式不⼀致,所以采⽤同花顺的计算⽅式以便核对。 return [:,["code","date"] + ["WILLR{}".format(wr) for wr in illR]]CCI def CalculateCCI(self,df,constant = 14): """ 计算CCI指标 # CCI measures the difference between a security's price change and its average price change.

参数:constant = 0.015 使⽤特征:high low close return: DataFram columns = "code","date","CCI" 说明: 顺势指标 专门测量股价、外汇或者贵⾦属交易是否已超出常态分布范围。属于超买超卖类指标中较特殊的⼀种 CCI指标的运⾏区间也分为三类:+100以上为超买区,—100以下为超卖区,+100到—100之间为震荡区 CCI指标就是专门针对极端情况设计的 是否应该直接计算命中分类

使⽤符合同花顺的公式

"""

TP = ( + + ) / 3 MA = g(14).mean() MD = g(14).apply(lambda x:(x).mad(),raw = False) df["CCI"] = (TP - MA) / (0.015 * MD) df = [:,["code","date","CCI"]] return df⾃定义参数写了很多,觉得有点意义的就以上⼀些,以后有更多觉得有意思的再补(希望我不会忘记)

发布者:admin,转转请注明出处:http://www.yc00.com/xiaochengxu/1688932544a184967.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信