本文编写了 几个基本的指标,供大家参考,有移动平均指标MA、指数平滑指标EMA、趋势指标MACD指数平滑异同移动平均、超买超卖KDJ、RSI、摆动指标AD(集散量)、ATR(真实波幅),均用python语言实现出来了。

包装成类,其中类名tech,

data为DateFrame的形式,要有close收盘价,low最低价,high最高价,pre_close前一天收盘价,eob为bar数据的结束数据,bob为bar数据的开始时间。

股票行情数据,分为bar数据和tick数据,bar数据为相对低频的数据,一般以分钟级别的,tick数据为高频数据,一般为秒级别的,最高频数据为、l2数据l2中tick只有价格price和成交量volume,没有最高价和最低价;

class tech(object):def __init__(self, data):self.data = dataself.close = self.data['close']self.low = self.data['low']self.high = self.data['high']self.pre_close = self.data['pre_close']self.eob = self.data['eob']self.bob = self.data['bob']def MA(self,n=5):'''含义:求简单移动平均。参数n:n日移动平均值,默认n=5用法:MA(X,N),求X的N日移动平均值。算法:(X1+X2+X3+,,,+Xn)/N。例如:MA(CLOSE,10)表示求10日均价。'''ma_n=self.close.rolling(n).mean()return ma_ndef EMA(self,m=5):'''含义:求指数平滑移动平均。参数n:n日指数平滑移动平均。默认m=5用法:EMA(X,N),求X的N日指数平滑移动平均。算法:若Y=EMA(X,N)则Y=[2*X+(N-1)*Y']/(N+1),其中Y'表示上一周期Y值。例如:EMA(CLOSE,30)表示求30日指数平滑均价。'''ema=self.close.ewm(span=m).mean()return emadef MACD(self,short=12,long=26,M=9):'''    MACD指数平滑异同移动平均线为两条长、短的平滑平均线。参数默认short=12,long=26,M=9DIFF : EMA(CLOSE,SHORT) - EMA(CLOSE,LONG);DEA  : EMA(DIFF,M);MACD : 2*(DIFF-DEA);其买卖原则为:1.DIFF、DEA均为正,DIFF向上突破DEA,买入信号参考。2.DIFF、DEA均为负,DIFF向下跌破DEA,卖出信号参考。3.DEA线与K线发生背离,行情可能出现反转信号。4.分析MACD柱状线,由红变绿(正变负),卖出信号参考;由绿变红,买入信号参考。'''ema_short=self.close.ewm(span=short).mean()ema_long=self.close.ewm(span=long).mean()diff=ema_short-ema_longdea=diff.ewm(span=M).mean()macd=2*(diff-dea)return macd,diff,deadef KDJ(self,N=9,M1=3,M2=3):'''返回k、d、j的值,默认N=9,M1=3,M2=3RSV=(CLOSE-LLV(LOW,N))/(HHV(HIGH,N)-LLV(LOW,N))*100;LLV:求最低值,HHV:求最高值,LOW:当日(周期)最低价,HIGH:当日(周期)最高价a=SMA(RSV,M1,1);b=SMA(a,M2,1);e=3*a-2*b;K:a;D:b;J:e;同花顺中默认N=9,M1=3,M2=3;KDJ指标指标说明KDJ,其综合动量观念、强弱指标及移动平均线的优点,早年应用在期货投资方面,功能颇为显著,目前为股市中最常被使用的指标之一。买卖原则1 K线由右边向下交叉D值做卖,K线由右边向上交叉D值做买。2 高档连续二次向下交叉确认跌势,低挡连续二次向上交叉确认涨势。3 D值<20%超卖,D值>80%超买,J>100%超买,J<10%超卖。4 KD值于50%左右徘徊或交叉时,无意义。5 投机性太强的个股不适用。6 可观察KD值同股价的背离,以确认高低点。'''llv = self.low.rolling(N).min() # 假设你的low是一个pandas.series的对象hhv = self.high.rolling(N).max() rsv = (self.close - llv)/(hhv -llv)*100k = rsv.ewm(M1-1).mean()d = k.ewm(M2-1).mean()j = 3*k - 2*dreturn k,d,jdef RSI(self,N1=6,N2=12,N3=24):'''默认N1=6,N2=12,N3=24,返回6日RSI值、12日RSI值、24日RSI值,RSI一般选用6日、12日、24日作为参考基期LC := REF(CLOSE,1);#上一周期的收盘价RSI$1:SMA(MAX(CLOSE-LC,0),N1,1)/SMA(ABS(CLOSE-LC),N1,1)*100;RSI$2:SMA(MAX(CLOSE-LC,0),N2,1)/SMA(ABS(CLOSE-LC),N2,1)*100;RSI$3:SMA(MAX(CLOSE-LC,0),N3,1)/SMA(ABS(CLOSE-LC),N3,1)*100; a:20;d:80;RSI指标:RSIS为1978年美国作者Wells WidlerJR。所提出的交易方法之一。所谓RSI英文全名为Relative Strenth Index,中文名称为相对强弱指标.RSI的基本原理是在一个正常的股市中,多空买卖双方的力道必须得到均衡,股价才能稳定;而RSI是对于固定期间内,股价上涨总幅度平均值占总幅度平均值的比例。1 RSI值于0-100之间呈常态分配,当6日RSI值为80‰以上时,股市呈超买现象,若出现M头,市场风险较大;当6日RSI值在20‰以下时,股市呈超卖现象,若出现W头,市场机会增大。2 RSI一般选用6日、12日、24日作为参考基期,基期越长越有趋势性(慢速RSI),基期越短越有敏感性,(快速RSI)。当快速RSI由下往上突破慢速RSI时,机会增大;当快速RSI由上而下跌破慢速RSI时,风险增大。'''lc = self.close.shift(1)#计算前收盘价max_diff = (self.close - lc)abs_diff = max_diff.copy()max_diff[max_diff <0 ] = 0#实现MAX(CLOSE-LC,0)abs_diff = abs_diff.abs()#实现ABS(CLOSE-LC)RSI1,RSI2,RSI3 = (max_diff.ewm(N-1).mean()/abs_diff.ewm(N-1).mean()*100 for N in [N1,N2,N3])return RSI1,RSI2,RSI3def AD(self,N=14):'''估算一段时间该证券积累的资金流量 无需参数 sum(((c-l)-(h-c))/(h-l)*volume) 该值从第一天开始累加指标向上,价格向下,买进信号指标向下,价格向上,卖出信号'''ad = sum(((self.close - self.low)-(self.high - self.close))/(self.high - self.low)*self.volume)return ad def ATR(self,N=14):'''求真实波幅的N日移动平均    参数:N 天数,默认取14TR:MAX(MAX((HIGH-LOW),ABS(REF(CLOSE,1)-HIGH)),ABS(REF(CLOSE,1)-LOW));ATR:MA(TR,N);'''maxx=self.high-self.lowabs_high=(self.pre_close-self.high).abs()abs_low=(self.pre_close-self.low).abs()import pandas as pda=pd.DataFrame()a['maxx']=maxx.values a['abs_high']=abs_high.valuesa['abs_low']=abs_low.valuesTR=a.max(axis=1)ATR=TR.rolling(N).mean()return ATR

python 量化投资【1】技术指标择时macd、ATR、RSI、KDJ等相关推荐

  1. quantrader和matlab不匹配,【Matlab量化投资】支持向量机择时策略

    原标题:[Matlab量化投资]支持向量机择时策略 感谢国泰安与本公众号合作 推出[Matlab量化投资系列] 机器学习 所谓机器学习,其实就是根据样本数据寻找规律,然后再利用这些规律来预测未来的数据 ...

  2. 【量化投资】基金择时策略浅析(3) -实用择时方法

    常见择时方法 本系列第一篇文章中曾介绍过选品和择时的概念,并且提到过这两个其实都是定义比较宽松的概念,任何投资者在任何市场中做的投资决策,无论是依据基本面因素,技术指标,还是量化模型,都可以看作择时. ...

  3. 基于matlab量化投资策略,【Matlab量化投资】支持向量机择时策略

    推出[Matlab量化投资系列] 机器学习 所谓机器学习,其实就是根据样本数据寻找规律,然后再利用这些规律来预测未来的数据(结果). 但是,直到今天,机器学习也没有一种被大家广泛认同的理论框架产生,这 ...

  4. Python量化投资——股票择时到底能否赚钱?技术指标大比拼——AROON指标

    技术指标大比拼--AROON指标的有效性回测 Python量化投资--`AROON`技术指标的有效性研究 背景介绍 技术指标介绍 指标用法建议 `qteasy`中的AROON内置策略 433支股票五年 ...

  5. Python量化投资——股票择时到底能否赚钱?ADX指标的有效性回测

    ADX指标的有效性回测 Python量化投资--`ADX`技术指标的有效性研究 背景介绍 技术指标介绍 指标用法建议 `qteasy`中的ADX内置策略 433支股票五年回测结果 12.45% --该 ...

  6. Python 量化投资实战教程(6) — 交易平均收益率

    量化投资系列文章: Backtrader 教程 - Python 量化投资实战教程(1) Python 量化投资实战教程(2) -MACD策略 Python 量化投资实战教程(3) -A股回测MACD ...

  7. Python量化投资

    安装Python开发环境 密码:hhsc Python Pandas Anaconda 勾选 Add Anaconda...... Register Anaconda...... 检查命令行:cond ...

  8. Python量化投资——股票择时到底能否赚钱?TA-Lib 33种技术指标有效性横向大评比

    TA-Lib中33种技术指标回测研究 `Python`量化投资--`TA-Lib`中33种股票择时技术指标的有效性研究 为什么要做这个评测 技术指标清单 评测方法 评测工具 测试方法及评价指标 期待你 ...

  9. Python 量化投资实战教程(2) —MACD策略(+26.9%)

    量化投资系列文章: Backtrader 教程 - Python 量化投资实战教程(1) Python 量化投资实战教程(2) -MACD策略(+26.9%) Python 量化投资实战教程(3) - ...

最新文章

  1. 计算机删除qq用户信息吗,电脑中删除qq资料生日性别的方法
  2. Spring AOP底层实现原理(动态代理)
  3. 特征码的使用办法_小脚的美丽与哀愁,34/35码的她们都是怎么买鞋的?
  4. Java 并发 —— Java 标准库对并发的支持及 java.util.concurrent 包
  5. swagger的使用
  6. ICMP(网际控制报文协议)
  7. 日志查看工具 logviewer pro的使用
  8. 9.STC15W408AS单片机EEPROM
  9. 鱼和熊掌兼得!这些应用是如何使用 Material Design 的?
  10. C#如何将汉字转换成拼音
  11. C++基础之 函数(function)
  12. html source type mp4,html5 – 获取MediaSource.isTypeSupported的mime类型
  13. 在office2016中,安装mathtype6.9后出现的dll文件缺失问题
  14. 使用python爬取斗图网的图片
  15. 【Leetcode 3】无重复字符的最长子串
  16. NLP-信息抽取-NER-2022:Global Pointer
  17. 算法基础--快慢指针
  18. 牛客竞赛每日俩题 - Day4
  19. forEach如何跳出循环
  20. 知识图谱-你不知道的sparql路径查询

热门文章

  1. 电商流量大战,短视频真的成主角了?
  2. RevitAPI: 使用DMU(Dynamic Model Update)实现联动
  3. 小米 红米6A 解BL锁教程 申请BootLoader解锁教程
  4. DeepRapper 论文
  5. 阿里云rds mysql坑_配置ECS上自建MySQL作为RDS从库过程中踩到的坑
  6. Handler()过时
  7. OpenCV计算机视觉实战(Python)| 10、项目实战:文档扫描OCR识别
  8. 简单制作属于自己的二维码
  9. docker到底是什么?有什么用?
  10. RFIC(AD9361)助力无线通信