MyTT

MyTT是您量化工具箱里的瑞士军刀,精炼而高效,它将通达信,同花顺,文华麦语言等指标公式indicators,最简移植到Python中,核心库单个文件,仅百行代码,实现和转换同花顺通达信所有常见指标MACD,RSI,BOLL,ATR,KDJ,CCI,PSY等,全部基于numpy和pandas的函数封装,简洁且高性能,能非常方便的应用在各自股票股市技术分析,股票自动程序化交易,数字货币BTC等量化等领域

功能特点

  • 核心库轻量化: 项目库就一个文件MyTT.py,不用安装,不用设置,随用随走 ( from MyTT import * 即可 )

  • 代码人类化:) 没有什么炫耀的编程花样,初学者也能看懂,自己就能自行增加指标,马上就能用在项目中。

  • 不需要安装ta-lib库,是纯python代码实现的的核心逻辑,很多人都有安装ta-lib库的痛苦经历

  • 和通达信,同花顺的指标写法完全兼容,一个新的指标基本不用做修改,直接拿来即可使用

  • 超高性能,基本不用循环,全是靠numpy,pandas的内置函数实现各种指标

  • 和Talib库一样是多天参数进,多天指标出(序列进,序列出),便于画图和观察趋势

  • MyTT实现的各种指标和通达信,同花顺,雪球等软件的技术指标一致到小数点后2位

先看一个最简单的例子


#股市行情数据获取和作图 -2
from  Ashare import *          #股票数据库    https://github.com/mpquant/Ashare
from  MyTT import *            #myTT麦语言工具函数指标库  https://github.com/mpquant/MyTT# 证券代码兼容多种格式 通达信,同花顺,聚宽
# sh000001 (000001.XSHG)    sz399006 (399006.XSHE)   sh600519 ( 600519.XSHG ) df=get_price('000001.XSHG',frequency='1d',count=120)      #获取今天往前120天的日线实时行情
print('上证指数日线行情\n',df.tail(5))#-------有数据了,下面开始正题 -------------
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日均线序列
up,mid,lower=BOLL(CLOSE)                       #获取布林带指标数据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) )
#上证指数日线行情----------------------------------------------------open    close     high      low       volume
2021-06-07  3597.14  3599.54  3600.38  3581.90  303718677.0
2021-06-08  3598.75  3580.11  3621.52  3563.25  304491470.0
2021-06-09  3576.80  3591.40  3598.71  3572.64  298323296.0
2021-06-10  3587.53  3610.86  3624.34  3584.13  318174808.0
2021-06-11  3614.11  3589.75  3614.40  3587.15  360554970.0#贵州茅台60分钟线----------------------------------------------------open    close     high      low    volume
2021-06-10 14:00:00  2237.00  2224.16  2245.00  2222.00   4541.53
2021-06-10 15:00:00  2222.21  2238.48  2240.34  2222.21   4146.88
2021-06-11 10:30:00  2239.00  2220.00  2244.00  2197.86  12030.00
2021-06-11 11:30:00  2220.01  2210.18  2231.80  2200.18   4868.00
2021-06-11 14:00:00  2210.10  2223.35  2224.48  2206.01   4544.00
2021-06-11 15:00:00  2223.33  2178.81  2226.80  2178.81  12529.00

MyTT库中的部分工具函数

#------------------ 0级:核心工具函数 --------------------------------------------
def RD(N,D=3):   return np.round(N,D)        #四舍五入取3位小数
def RET(S,N=1):  return np.array(S)[-N]      #返回序列倒数第N个值,默认返回最后一个
def ABS(S):      return np.abs(S)            #返回N的绝对值
def MAX(S1,S2):  return np.maximum(S1,S2)    #序列max
def MIN(S1,S2):  return np.minimum(S1,S2)    #序列mindef MA(S,N):           #求序列的N日平均值,返回序列                    return pd.Series(S).rolling(N).mean().values     # pd.rolling_mean(S,N)  (Python2)def REF(S, N=1):       #对序列整体下移动N,返回序列(shift后会产生NAN)    return pd.Series(S).shift(N).values  def DIFF(S, N=1):      #前一个值减后一个值,前面会产生nan return pd.Series(S).diff(N)  #np.diff(S)直接删除nan,会少一行def STD(S,N):           #求序列的N日标准差,返回序列    return  pd.Series(S).rolling(N).std(ddof=0).values     def IF(S_BOOL,S_TRUE,S_FALSE):          #序列布尔判断 res=S_TRUE if S_BOOL==True  else  S_FALSEreturn np.where(S_BOOL, S_TRUE, S_FALSE)def SUM(S, N):            #对序列求N天累计和,返回序列    N=0对序列所有依次求和         return pd.Series(S).rolling(N).sum().values if N>0 else pd.Series(S).cumsum()    #pd.rolling_sum(S,N)  (Python2)def HHV(S,N):             # HHV(C, 5)  # 最近5天收盘最高价        return pd.Series(S).rolling(N).max().values      # pd.rolling_max(S,N)  (Python2)def LLV(S,N):             # LLV(C, 5)  # 最近5天收盘最低价     return pd.Series(S).rolling(N).min().values      # pd.rolling_min(S,N)  (Python2)def EMA(S,N):             #指数移动平均,为了精度 S>4*N  EMA至少需要120周期       return pd.Series(S).ewm(span=N, adjust=False).mean().values    def SMA(S, N, M=1):        #中国式的SMA,至少需要120周期才精确 (雪球180周期)    alpha=1/(1+com)return pd.Series(S).ewm(com=N-M, adjust=True).mean().values     def AVEDEV(S,N):           #平均绝对偏差  (序列与其平均值的绝对差的平均值)   avedev=pd.Series(S).rolling(N).apply(lambda x: (np.abs(x - x.mean())).mean())    return avedev.valuesdef SLOPE(S,N,RS=False):    #返S序列N周期回线性回归斜率 (默认只返回斜率,不返回整个直线序列)M=pd.Series(S[-N:]);   poly = np.polyfit(M.index, M.values,deg=1);    Y=np.polyval(poly, M.index); if RS: return Y[1]-Y[0],Yreturn Y[1]-Y[0]

已经实现的技术指标,基本涵盖了绝大多数常用指标

#------------------   2级:技术指标函数(全部通过0级,1级函数实现) ------------------------------
def MACD(CLOSE,SHORT=12,LONG=26,M=9):            # EMA的关系,S取120日,和雪球小数点2位相同DIF = EMA(CLOSE,SHORT)-EMA(CLOSE,LONG);  DEA = EMA(DIF,M);      MACD=(DIF-DEA)*2return RD(DIF),RD(DEA),RD(MACD)def KDJ(CLOSE,HIGH,LOW, N=9,M1=3,M2=3):         # KDJ指标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*2return K, D, Jdef RSI(CLOSE, N=24):      DIF = CLOSE-REF(CLOSE,1) return RD(SMA(MAX(DIF,0), N) / SMA(ABS(DIF), N) * 100)  def WR(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)) * 100return RD(WR), RD(WR1)def BIAS(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) * 100return RD(BIAS1), RD(BIAS2), RD(BIAS3)def BOLL(CLOSE,N=20, P=2):                       #BOLL指标,布林带    MID = MA(CLOSE, N); UPPER = MID + STD(CLOSE, N) * PLOWER = MID - STD(CLOSE, N) * Preturn RD(UPPER), RD(MID), RD(LOWER)    def PSY(CLOSE,N=12, M=6):  PSY=COUNT(CLOSE>REF(CLOSE,1),N)/N*100PSYMA=MA(PSY,M)return RD(PSY),RD(PSYMA)def CCI(CLOSE,HIGH,LOW,N=14):  TP=(HIGH+LOW+CLOSE)/3return (TP-MA(TP,N))/(0.015*AVEDEV(TP,N))def ATR(CLOSE,HIGH,LOW, N=20):                    #真实波动N日平均值TR = MAX(MAX((HIGH - LOW), ABS(REF(CLOSE, 1) - HIGH)), ABS(REF(CLOSE, 1) - LOW))return MA(TR, N)def BBI(CLOSE,M1=3,M2=6,M3=12,M4=20):             #BBI多空指标   return (MA(CLOSE,M1)+MA(CLOSE,M2)+MA(CLOSE,M3)+MA(CLOSE,M4))/4    def DMI(CLOSE,HIGH,LOW,M1=14,M2=6):               #动向指标:结果和同花顺,通达信完全一致TR = SUM(MAX(MAX(HIGH - LOW, ABS(HIGH - REF(CLOSE, 1))), ABS(LOW - REF(CLOSE, 1))), M1)HD = HIGH - REF(HIGH, 1);     LD = REF(LOW, 1) - LOWDMP = SUM(IF((HD > 0) & (HD > LD), HD, 0), M1)DMM = SUM(IF((LD > 0) & (LD > HD), LD, 0), M1)PDI = DMP * 100 / TR;         MDI = DMM * 100 / TRADX = MA(ABS(MDI - PDI) / (PDI + MDI) * 100, M2)ADXR = (ADX + REF(ADX, M2)) / 2return PDI, MDI, ADX, ADXR  def TAQ(HIGH,LOW,N):                               #唐安奇通道(海龟)交易指标,大道至简,能穿越牛熊UP=HHV(HIGH,N);    DOWN=LLV(LOW,N);    MID=(UP+DOWN)/2return UP,MID,DOWNdef KTN(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*ATRNreturn UPPER,MID,LOWER       def TRIX(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)return TRIX, TRMAdef VR(CLOSE,VOL,M1=26):                            #VR容量比率LC = REF(CLOSE, 1)return SUM(IF(CLOSE > LC, VOL, 0), M1) / SUM(IF(CLOSE <= LC, VOL, 0), M1) * 100def EMV(HIGH,LOW,VOL,N=14,M=9):                     #简易波动指标 VOLUME=MA(VOL,N)/VOL;       MID=100*(HIGH+LOW-REF(HIGH+LOW,1))/(HIGH+LOW)EMV=MA(MID*VOLUME*(HIGH-LOW)/MA(HIGH-LOW,N),N);    MAEMV=MA(EMV,M)return EMV,MAEMVdef DPO(CLOSE,M1=20, M2=10, M3=6):                  #区间震荡线DPO = CLOSE - REF(MA(CLOSE, M1), M2);    MADPO = MA(DPO, M3)return DPO, MADPOdef BRAR(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) * 100return AR, BRdef DMA(CLOSE,N1=10,N2=50,M=10):                     #平行线差指标  DIF=MA(CLOSE,N1)-MA(CLOSE,N2);    DIFMA=MA(DIF,M)return DIF,DIFMAdef MTM(CLOSE,N=12,M=6):                             #动量指标MTM=CLOSE-REF(CLOSE,N);         MTMMA=MA(MTM,M)return MTM,MTMMAdef MASS(HIGH,LOW,N1=9,N2=25,M=6):                   # 梅斯线MASS=SUM(MA(HIGH-LOW,N1)/MA(MA(HIGH-LOW,N1),N1),N2)MA_MASS=MA(MASS,M)return MASS,MA_MASSdef ROC(CLOSE,N=12,M=6):                             #变动率指标ROC=100*(CLOSE-REF(CLOSE,N))/REF(CLOSE,N);    MAROC=MA(ROC,M)return ROC,MAROC  def EXPMA(CLOSE,N1=12,N2=50):                        #EMA指数平均数指标return EMA(CLOSE,N1),EMA(CLOSE,N2);def OBV(CLOSE,VOL):                                  #能量潮指标return SUM(IF(CLOSE>REF(CLOSE,1),VOL,IF(CLOSE<REF(CLOSE,1),-VOL,0)),0)/10000def ASI(OPEN,CLOSE,HIGH,LOW,M1=26,M2=10):            #振动升降指标LC=REF(CLOSE,1);      AA=ABS(HIGH-LC);     BB=ABS(LOW-LC);CC=ABS(HIGH-REF(LOW,1));   DD=ABS(LC-REF(OPEN,1));R=IF( (AA>BB) & (AA>CC),AA+BB/2+DD/4,IF( (BB>CC) & (BB>AA),BB+AA/2+DD/4,CC+DD/4));X=(CLOSE-LC+(CLOSE-OPEN)/2+LC-REF(OPEN,1));SI=16*X/R*MAX(AA,BB);   ASI=SUM(SI,M1);   ASIT=MA(ASI,M2);return ASI,ASIT   #望大家能提交更多指标和函数  https://github.com/mpquant/MyTT

BOLL带指标数据获取和做图演示 (上证综指)

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');

需安装第三方库(无需ta-lib库,所有指标实现仅需要安装pandas既可)

  • pandas

目前项目已经开源:

https://github.com/mpquant/MyTT

通达信公式改写成python代码的最简实现方式相关推荐

  1. 如何把通达信公式变成python_通达信公式-主力雷达Python化

    1.通达信代码: ```python LC赋值:1日前的收盘价 df['lc']=df['close'].shift(1) RSI1赋值:收盘价-LC和0的较大值的6日[1日权重]移动平均/收盘价-L ...

  2. 通达信公式改成python_python转换通达信股票数据

    在通达信的安装目录里,比如我的D:\zd_pazq\vipdoc\sh\lday,存储上海的A股的每天数据,用文本编辑器打开是这个样子. 如果想得到里面的数据,可以用程序解码转换,这里使用python ...

  3. 同花顺公式转python_请把通达信公式转换成同花顺公式,谢谢

    N:=10;M:=10;N1:=10;M1:=10;{N:1,100,10;M;1,100,10:N1:1,100,10;M1;1,100,10}散筹估算:EMA((WINNER((O+C*2+H+L ...

  4. 小散量化炒股记|手把手教你转换通达信公式,盘整后均线粘合突破

    前言 通达信的公式编写功能非常流行,很多高手都是在通达信上编写公式来分析股票的. 作为过来人,建议大家在初期的策略研究阶段,选一个通用的平台进行策略研究,因为有现成的功能模块可以调用,这样就能把精力聚 ...

  5. 自己做量化交易软件(19)通达信公式转Python代码的程序

    ** 自己做量化交易软件(19)通达信公式转Python代码 ** 小白量化平台框架是本地化量化平台,用户的策略在用户自己电脑中执行,操作习惯仿股票软件,指标算法支持类通达信指标,回测也支持通达信大智 ...

  6. 通达信 python插件选股_自己做量化交易软件(20)通达信公式选股程序的实现

    自己做量化交易软件(20)通达信公式选股程序的实现 1.用小白2很好实现.首先获取板块中股票,存放在列表中.例如获取"上证50" import HP_tdx as htdx fro ...

  7. python 通达信公式函数_通达信zig函数的python实现

    通达信zig函数的python实现 代码 # coding: utf-8 """ Created on Sat Jan 05 18:53:39 2019 http://w ...

  8. 自己做量化交易软件(34)小白量化实战7--投资理念与通达信公式回测(2)

    自己做量化交易软件(34)小白量化实战7–投资理念与通达信公式回测(2) 投资通俗地讲就是"财富变压器".投资是使资本和财富生长的源泉.没有证券市场和期货市场时投资者当投出一元钱时 ...

  9. 自己做量化交易软件(20)通达信公式选股程序的实现

    自己做量化交易软件(20)通达信公式选股程序的实现 1.用小白2很好实现.首先获取板块中股票,存放在列表中.例如获取"上证50" import HP_tdx as htdx fro ...

最新文章

  1. 院士 人工智能专业理解
  2. C#: IntelliSense 貌似做错了一些事情。
  3. 自学python的书籍-不可错过的十本Python好书
  4. ZooKeeper管理员指南——部署与管理ZooKeeper
  5. AnnotationConfigApplicationContext 通过调用注解Bean 定义读取器
  6. vue 大概流程(未完)
  7. 杜拉拉升职记(1和2)
  8. [转]flash在C#中的应用
  9. animals中文谐音_张杰pretty white lies中文音译歌词
  10. 计算机毕业设计JAVA垂钓分享交流网的设计与实现mybatis+源码+调试部署+系统+数据库+lw
  11. 游戏引擎Flax Engine分析(八)渲染
  12. 51单片机延时程序的理解
  13. rxjava背压_关于RxJava背压
  14. 记录origin画图遇到的问题及其软件bug解决
  15. 【Python学习笔记】猜颜色小游戏
  16. 蓝牙耳机哪个品牌比较好?盘点四款好用的蓝牙耳机
  17. Android6.0以上系统搜索不到 蓝牙BLE 设备问题
  18. 转载:2016.3.15 回忆录
  19. CoinGeek直播大会(2020)将在著名的纽约曼哈顿中心举行
  20. HUAWEI华为荣耀MagicBook V14 I5 集显 16GB+512GB (HGE-W56)原装出厂WIN11系统恢复原厂oem系统

热门文章

  1. stegsolve 的安装使用
  2. tomcat 如何查看tomcat版本及位数——tomcat笔记
  3. word中绘制流程图
  4. vmware tool下载安装
  5. linux安防监控,Linux平台下的安防监控系统设计与实现
  6. 学习web第四周第五天
  7. 22个免费的图表、流程图工具
  8. 【数据库MySQL】
  9. 许久未曾写过文章了,如今,再度出发:一个一般学校的大三学子,立足过去,展望未来,模糊的规划,坚定的方向,不断前进。
  10. 动图展示 10 大 Git 命令