- Notifications
You must be signed in to change notification settings - Fork617
MyTT将通达信,同花顺,文华麦语言等指标公式,最简移植到Python中,核心库单个文件,仅百行代码,十几个核心函数,神奇的实现所有常见技术指标算法(不依赖talib库)的纯python实现和转换通达信MACD,RSI,BOLL,ATR,KDJ,CCI,PSY等公式,全部基于pandas函数计算方法封装,简洁且高性能,能非常方便的应用在股票指标公式,股市期货量化框架分析,自动程序化交易,数字货币量化等领域,它是您最精练的股市量化工具。Python library with most stock market indicators.
mpquant/MyTT
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
MyTT是您量化工具箱里的瑞士军刀,精炼而高效,它将通达信,同花顺,文华麦语言等指标公式indicators,最简移植到Python中,核心库单个文件,仅百行代码,实现和转换同花顺通达信所有常见指标MACD,RSI,BOLL,ATR,KDJ,CCI,PSY等,全部基于numpy和pandas的函数封装,简洁且高性能,能非常方便的应用在各自股票股市技术分析,股票自动程序化交易,数字货币BTC等量化等领域.Mini Python library with most stock market indicators.
核心库轻量化: 项目库就一个文件MyTT.py,不用安装设置,可自由裁剪,随用随走
from MyTT import *
即可代码人类化:) 没有什么炫耀的编程花样,初学者也能看懂,自己就能自行增加指标,马上就能用在项目中。
不需要安装ta-lib库,是纯python代码实现的的核心逻辑,很多人都有安装ta-lib库的痛苦经历
和通达信,同花顺的指标写法完全兼容,一个新的指标基本不用做修改,直接拿来即可使用
超高性能,基本不用循环,全是靠numpy,pandas的内置函数实现各种指标
和Talib库一样是多天参数进,多天指标出(序列进,序列出),便于画图和观察趋势
MyTT实现的各种指标和通达信,同花顺,雪球等软件的技术指标一致到小数点后2位
MyTT高级进阶版本,收录了高级复杂用法的函数和实验验证函数MyTT_plus
MyTT也能在python2的老版本pandas中使用,请用此python2版本MyTT_python2
#数字货币行情获取和指标计算演示fromhb_hq_apiimport*#数字货币行情库fromMyTTimport*#myTT麦语言工具函数指标库#获取btc.usdt交易对120日的数据df=get_price('btc.usdt',count=120,frequency='1d');#'1d'是1天, '4h'是4小时#-----------df结果如下表(股市也基本一样)-------------------------------------------
open | close | high | low | vol | |
---|---|---|---|---|---|
2021-05-16 | 48983.62 | 47738.24 | 49800.00 | 46500.0 | 1.333333e+09 |
2021-05-17 | 47738.24 | 43342.50 | 48098.66 | 42118.0 | 3.353662e+09 |
2021-05-18 | 43342.50 | 44093.24 | 45781.52 | 42106.0 | 1.793267e+09 |
#-------有数据了,下面开始正题 -------------CLOSE=df.close.values;OPEN=df.open.values#基础数据定义,只要传入的是序列都可以HIGH=df.high.values;LOW=df.low.values#例如 CLOSE=list(df.close) 都是一样MA5=MA(CLOSE,5)#获取5日均线序列MA10=MA(CLOSE,10)#获取10日均线序列print('BTC5日均线',MA5[-1] )# 只取最后一个数print('BTC10日均线',RET(MA10))# RET(MA10) == MA10[-1]print('今天5日线是否上穿10日线',RET(CROSS(MA5,MA10)))print('最近5天收盘价全都大于10日线吗?',EVERY(CLOSE>MA10,5) )
直接拷贝 MyTT.py到你的项目下
from MyTT import *
即可调用文件中的所有函数传统标准库安装
pip install MyTT
fromMyTTimport*#声明调用MyTT, 请注意大小写S=np.random.randint(1,99,[10])#生成1-99内的10个数序列EMA(S,6)#对这个序列S进行6周期EMA指数平均计算
- n天前的数据:
REF
REF(CLOSE,1)# 截止到昨天收盘价 序列
- 移动平均线计算:MA
MA(CLOSE,5)# 取得收盘价5日平均线
- 加权移动平均计算:EMA
EMA(CLOSE,5)# 为了精度 , EMA至少需要120周期
- 中国式的SMA计算:SMA
SMA(CLOSE,5)# 为了精度 , SMA至少需要120周期
- 返回序列标准差:STD
STD(CLOSE,5)# 返回收盘价5日内标准差
- 平均绝对偏差:
AVEDEV
AVEDEV(CLOSE,5)# 序列与其平均值的绝对差的平均值
- 金叉判断:CROSS
CROSS(MA(CLOSE,5),MA(CLOSE,10))#5日均线上穿10日均线
- 两个序列取最大值,最小值:
MAX
MIN
MAX(OPEN,CLOSE )#K线实体的最高价
- n天内满足条件的天数:COUNT
COUNT(CLOSE>OPEN,10)#最近10天收阳线的天数
- n天内全部满足条件的天数:EVERY
EVERY(CLOSE>OPEN,5)#最近5天都是收阳线
- 从前A日到前B日一直满足条件 :LAST
LAST(CLOSE>OPEN,5,3)#5天前到3天前是否都收阳线
- n天内是否至少满足条件一次:EXIST
EXIST(CLOSE>OPEN,5)#最近5天是否有一天收阳线
- 上一次条件成立到当前的周期:BARSLAST
BARSLAST(CLOSE/REF(CLOSE)>=1.1)#上一次涨停到今天的天数
- 返回序列的线性回归斜率:
SLOPE
SLOPE(MA(CLOSE,10),5)#得到10日平均线最近5天的斜率(其实就是MA均线的方向)
- 取回线性回归后的预测值:
FORCAST
FORCAST(CLOSE,20)#根据最近20日的走势预测明天的收盘价
- n天内最大值:
HHV
HHV(MAX(OPEN,CLOSE),20)#最近20天K线实体的最高价
- n天内最小值:
LLV
LLV(MIN(OPEN,CLOSE),60)#最近60天K线实体的最低价
- 条件
IF
IF(OPEN>CLOSE,OPEN,CLOSE)#如果 开盘>收盘 返回OPEN ,否则返回CLOSE
defMACD(CLOSE,SHORT=12,LONG=26,M=9):# EMA的关系,CLOSE取120日,结果能精确到雪球小数点2位DIF=EMA(CLOSE,SHORT)-EMA(CLOSE,LONG);DEA=EMA(DIF,M);MACD=(DIF-DEA)*2returnRD(DIF),RD(DEA),RD(MACD)
defKDJ(CLOSE,HIGH,LOW,N=9,M1=3,M2=3):RSV= (CLOSE-LLV(LOW,N))/ (HHV(HIGH,N)-LLV(LOW,N))*100K=EMA(RSV, (M1*2-1));D=EMA(K,(M2*2-1));J=K*3-D*2returnK,D,J
defRSI(CLOSE,N=24):#RSI指标DIF=CLOSE-REF(CLOSE,1)returnRD(SMA(MAX(DIF,0),N)/SMA(ABS(DIF),N)*100)
defWR(CLOSE,HIGH,LOW,N=10,N1=6):#W&R 威廉指标WR= (HHV(HIGH,N)-CLOSE)/ (HHV(HIGH,N)-LLV(LOW,N))*100WR1= (HHV(HIGH,N1)-CLOSE)/ (HHV(HIGH,N1)-LLV(LOW,N1))*100returnRD(WR),RD(WR1)
defBIAS(CLOSE,L1=6,L2=12,L3=24):#BIAS乖离率BIAS1= (CLOSE-MA(CLOSE,L1))/MA(CLOSE,L1)*100BIAS2= (CLOSE-MA(CLOSE,L2))/MA(CLOSE,L2)*100BIAS3= (CLOSE-MA(CLOSE,L3))/MA(CLOSE,L3)*100returnRD(BIAS1),RD(BIAS2),RD(BIAS3)
defBOLL(CLOSE,N=20,P=2):#BOLL布林带MID=MA(CLOSE,N);UPPER=MID+STD(CLOSE,N)*PLOWER=MID-STD(CLOSE,N)*PreturnRD(UPPER),RD(MID),RD(LOWER)
defPSY(CLOSE,N=12,M=6):#PSY心理线指标PSY=COUNT(CLOSE>REF(CLOSE,1),N)/N*100PSYMA=MA(PSY,M)returnRD(PSY),RD(PSYMA)
defCCI(CLOSE,HIGH,LOW,N=14):#CCI顺势指标TP=(HIGH+LOW+CLOSE)/3return (TP-MA(TP,N))/(0.015*AVEDEV(TP,N))
defATR(CLOSE,HIGH,LOW,N=20):#真实波动N日平均值TR=MAX(MAX((HIGH-LOW),ABS(REF(CLOSE,1)-HIGH)),ABS(REF(CLOSE,1)-LOW))returnMA(TR,N)
defBBI(CLOSE,M1=3,M2=6,M3=12,M4=20):#BBI多空指标return (MA(CLOSE,M1)+MA(CLOSE,M2)+MA(CLOSE,M3)+MA(CLOSE,M4))/4
defTAQ(HIGH,LOW,N):#唐安奇通道(海龟)交易指标,大道至简,能穿越牛熊UP=HHV(HIGH,N);DOWN=LLV(LOW,N);MID=(UP+DOWN)/2returnUP,MID,DOWN
defKTN(CLOSE,HIGH,LOW,N=20,M=10):#肯特纳交易通道, N选20日,ATR选10日MID=EMA((HIGH+LOW+CLOSE)/3,N)ATRN=ATR(CLOSE,HIGH,LOW,M)UPPER=MID+2*ATRN;LOWER=MID-2*ATRNreturnUPPER,MID,LOWER
defTRIX(CLOSE,M1=12,M2=20):#三重指数平滑平均线TR=EMA(EMA(EMA(CLOSE,M1),M1),M1)TRIX= (TR-REF(TR,1))/REF(TR,1)*100TRMA=MA(TRIX,M2)returnTRIX,TRMA
defBRAR(OPEN,CLOSE,HIGH,LOW,M1=26):#BRAR-ARBR 情绪指标AR=SUM(HIGH-OPEN,M1)/SUM(OPEN-LOW,M1)*100BR=SUM(MAX(0,HIGH-REF(CLOSE,1)),M1)/SUM(MAX(0,REF(CLOSE,1)-LOW),M1)*100returnAR,BR
defMTM(CLOSE,N=12,M=6):#动量指标MTM=CLOSE-REF(CLOSE,N);MTMMA=MA(MTM,M)returnMTM,MTMMA
defROC(CLOSE,N=12,M=6):#变动率指标ROC=100*(CLOSE-REF(CLOSE,N))/REF(CLOSE,N);MAROC=MA(ROC,M)returnROC,MAROC
defEXPMA(CLOSE,N1=12,N2=50):#EMA指数平均数指标returnEMA(CLOSE,N1),EMA(CLOSE,N2);
defOBV(CLOSE,VOL):#能量潮指标returnSUM(IF(CLOSE>REF(CLOSE,1),VOL,IF(CLOSE<REF(CLOSE,1),-VOL,0)),0)/10000
defMFI(CLOSE,HIGH,LOW,VOL,N=14):#MFI指标是成交量的RSI指标TYP= (HIGH+LOW+CLOSE)/3V1=SUM(IF(TYP>REF(TYP,1),TYP*VOL,0),N)/SUM(IF(TYP<REF(TYP,1),TYP*VOL,0),N)return100-(100/(1+V1))
- 更多指标看库文件MyTT.py
#通达信函数 VAR1:=(C>REF(C,1) AND C>REF(C,2));python写法:VAR1=( (CLOSE>REF(CLOSE,1))& (CLOSE>REF(CLOSE,2)) );# 收盘价在10日均线上 且10日均线在20日均线上python写法: (C>MA(C,10))& (MA(C,10)>MA(C,20))# 收阳线 或 收盘价大于昨收python写法: (CLOSE>O)| (CLOSE>REF(CLOSE,1))
up,mid,lower=BOLL(CLOSE)#获取布林带数据plt.figure(figsize=(15,8))plt.plot(CLOSE,label='上证');plt.plot(up,label='up');#画图显示plt.plot(mid,label='mid');plt.plot(lower,label='lower');
up,mid,down=TAQ(HIGH,LOW,20)#获取唐安奇交易通道数据,大道至简,能穿越牛熊plt.figure(figsize=(15,8))plt.plot(CLOSE,label='沪深300指数')plt.plot(up,label='唐安奇-上轨');plt.plot(mid,label='唐安奇-中轨');plt.plot(down,label='唐安奇-下轨')
- pandas
火焰,jqz1226, stanene, bcq
About
MyTT将通达信,同花顺,文华麦语言等指标公式,最简移植到Python中,核心库单个文件,仅百行代码,十几个核心函数,神奇的实现所有常见技术指标算法(不依赖talib库)的纯python实现和转换通达信MACD,RSI,BOLL,ATR,KDJ,CCI,PSY等公式,全部基于pandas函数计算方法封装,简洁且高性能,能非常方便的应用在股票指标公式,股市期货量化框架分析,自动程序化交易,数字货币量化等领域,它是您最精练的股市量化工具。Python library with most stock market indicators.