├── Ashare.py ├── Demo1.py ├── Demo2.py ├── MyTT.py ├── README.md └── img ├── qrcode.png └── sh_boll.png /Ashare.py: -------------------------------------------------------------------------------- 1 | #-*- coding:utf-8 -*- --------------Ashare 股票行情数据双核心版( https://github.com/mpquant/Ashare ) 2 | import json,requests,datetime; import pandas as pd # 3 | 4 | #腾讯日线 5 | def get_price_day_tx(code, end_date='', count=10, frequency='1d'): #日线获取 6 | unit='week' if frequency in '1w' else 'month' if frequency in '1M' else 'day' #判断日线,周线,月线 7 | if end_date: end_date=end_date.strftime('%Y-%m-%d') if isinstance(end_date,datetime.date) else end_date.split(' ')[0] 8 | end_date='' if end_date==datetime.datetime.now().strftime('%Y-%m-%d') else end_date #如果日期今天就变成空 9 | URL=f'http://web.ifzq.gtimg.cn/appstock/app/fqkline/get?param={code},{unit},,{end_date},{count},qfq' 10 | st= json.loads(requests.get(URL).content); ms='qfq'+unit; stk=st['data'][code] 11 | buf=stk[ms] if ms in stk else stk[unit] #指数返回不是qfqday,是day 12 | df=pd.DataFrame(buf,columns=['time','open','close','high','low','volume'],dtype='float') 13 | df.time=pd.to_datetime(df.time); df.set_index(['time'], inplace=True); df.index.name='' #处理索引 14 | return df 15 | 16 | #腾讯分钟线 17 | def get_price_min_tx(code, end_date=None, count=10, frequency='1d'): #分钟线获取 18 | ts=int(frequency[:-1]) if frequency[:-1].isdigit() else 1 #解析K线周期数 19 | if end_date: end_date=end_date.strftime('%Y-%m-%d') if isinstance(end_date,datetime.date) else end_date.split(' ')[0] 20 | URL=f'http://ifzq.gtimg.cn/appstock/app/kline/mkline?param={code},m{ts},,{count}' 21 | st= json.loads(requests.get(URL).content); buf=st['data'][code]['m'+str(ts)] 22 | df=pd.DataFrame(buf,columns=['time','open','close','high','low','volume','n1','n2']) 23 | df=df[['time','open','close','high','low','volume']] 24 | df[['open','close','high','low','volume']]=df[['open','close','high','low','volume']].astype('float') 25 | df.time=pd.to_datetime(df.time); df.set_index(['time'], inplace=True); df.index.name='' #处理索引 26 | df['close'][-1]=float(st['data'][code]['qt'][code][3]) #最新基金数据是3位的 27 | return df 28 | 29 | 30 | #sina新浪全周期获取函数,分钟线 5m,15m,30m,60m 日线1d=240m 周线1w=1200m 1月=7200m 31 | def get_price_sina(code, end_date='', count=10, frequency='60m'): #新浪全周期获取函数 32 | frequency=frequency.replace('1d','240m').replace('1w','1200m').replace('1M','7200m'); mcount=count 33 | ts=int(frequency[:-1]) if frequency[:-1].isdigit() else 1 #解析K线周期数 34 | if (end_date!='') & (frequency in ['240m','1200m','7200m']): 35 | end_date=pd.to_datetime(end_date) if not isinstance(end_date,datetime.date) else end_date #转换成datetime 36 | unit=4 if frequency=='1200m' else 29 if frequency=='7200m' else 1 #4,29多几个数据不影响速度 37 | count=count+(datetime.datetime.now()-end_date).days//unit #结束时间到今天有多少天自然日(肯定 >交易日) 38 | #print(code,end_date,count) 39 | URL=f'http://money.finance.sina.com.cn/quotes_service/api/json_v2.php/CN_MarketData.getKLineData?symbol={code}&scale={ts}&ma=5&datalen={count}' 40 | dstr= json.loads(requests.get(URL).content); 41 | #df=pd.DataFrame(dstr,columns=['day','open','high','low','close','volume'],dtype='float') 42 | df= pd.DataFrame(dstr,columns=['day','open','high','low','close','volume']) 43 | df['open'] = df['open'].astype(float); df['high'] = df['high'].astype(float); #转换数据类型 44 | df['low'] = df['low'].astype(float); df['close'] = df['close'].astype(float); df['volume'] = df['volume'].astype(float) 45 | df.day=pd.to_datetime(df.day); df.set_index(['day'], inplace=True); df.index.name='' #处理索引 46 | if (end_date!='') & (frequency in ['240m','1200m','7200m']): return df[df.index<=end_date][-mcount:] #日线带结束时间先返回 47 | return df 48 | 49 | def get_price(code, end_date='',count=10, frequency='1d', fields=[]): #对外暴露只有唯一函数,这样对用户才是最友好的 50 | xcode= code.replace('.XSHG','').replace('.XSHE','') #证券代码编码兼容处理 51 | xcode='sh'+xcode if ('XSHG' in code) else 'sz'+xcode if ('XSHE' in code) else code 52 | 53 | if frequency in ['1d','1w','1M']: #1d日线 1w周线 1M月线 54 | try: return get_price_sina( xcode, end_date=end_date,count=count,frequency=frequency) #主力 55 | except: return get_price_day_tx(xcode,end_date=end_date,count=count,frequency=frequency) #备用 56 | 57 | if frequency in ['1m','5m','15m','30m','60m']: #分钟线 ,1m只有腾讯接口 5分钟5m 60分钟60m 58 | if frequency in '1m': return get_price_min_tx(xcode,end_date=end_date,count=count,frequency=frequency) 59 | try: return get_price_sina( xcode,end_date=end_date,count=count,frequency=frequency) #主力 60 | except: return get_price_min_tx(xcode,end_date=end_date,count=count,frequency=frequency) #备用 61 | 62 | if __name__ == '__main__': 63 | df=get_price('sh000001',frequency='1d',count=10) #支持'1d'日, '1w'周, '1M'月 64 | print('上证指数日线行情\n',df) 65 | 66 | df=get_price('000001.XSHG',frequency='15m',count=10) #支持'1m','5m','15m','30m','60m' 67 | print('上证指数分钟线\n',df) 68 | 69 | # Ashare 股票行情数据( https://github.com/mpquant/Ashare ) 70 | -------------------------------------------------------------------------------- /Demo1.py: -------------------------------------------------------------------------------- 1 | #A股票行情数据获取演示 https://github.com/mpquant/Ashare 2 | from Ashare import * 3 | 4 | # 证券代码兼容多种格式 通达信,同花顺,聚宽 5 | # sh000001 (000001.XSHG) sz399006 (399006.XSHE) sh600519 ( 600519.XSHG ) 6 | 7 | df=get_price('sh000001',frequency='1d',count=5) #默认获取今天往前5天的日线行情 8 | print('上证指数日线行情\n',df) 9 | 10 | df=get_price('000001.XSHG',frequency='1d',count=5,end_date='2021-04-30') #可以指定结束日期,获取历史行情 11 | print('上证指数历史行情\n',df) 12 | 13 | df=get_price('sh600519',frequency='15m',count=5) #分钟线行情,只支持从当前时间往前推,可用'1m','5m','15m','30m','60m' 14 | print('贵州茅台15分钟线\n',df) 15 | 16 | df=get_price('600519.XSHG',frequency='60m',count=6) #分钟线行情,只支持从当前时间往前推,可用'1m','5m','15m','30m','60m' 17 | print('贵州茅台60分钟线\n',df) 18 | -------------------------------------------------------------------------------- /Demo2.py: -------------------------------------------------------------------------------- 1 | #股市行情数据获取和作图 -2 2 | from Ashare import * #股票数据库 https://github.com/mpquant/Ashare 3 | from MyTT import * #myTT麦语言工具函数指标库 https://github.com/mpquant/MyTT 4 | 5 | # 证券代码兼容多种格式 通达信,同花顺,聚宽 6 | # sh000001 (000001.XSHG) sz399006 (399006.XSHE) sh600519 ( 600519.XSHG ) 7 | 8 | df=get_price('000001.XSHG',frequency='1d',count=120) #默认获取今天往前120天的日线行情 9 | print('上证指数日线行情\n',df.tail(5)) 10 | 11 | #-------有数据了,下面开始正题 ------------- 12 | CLOSE=df.close.values; OPEN=df.open.values #基础数据定义,只要传入的是序列都可以 Close=df.close.values 13 | HIGH=df.high.values; LOW=df.low.values #例如 CLOSE=list(df.close) 都是一样 14 | 15 | MA5=MA(CLOSE,5) #获取5日均线序列 16 | MA10=MA(CLOSE,10) #获取10日均线序列 17 | up,mid,lower=BOLL(CLOSE) #获取布林带指标数据 18 | 19 | #-------------------------作图显示----------------------------------------------------------------- 20 | import matplotlib.pyplot as plt ; from matplotlib.ticker import MultipleLocator 21 | plt.figure(figsize=(15,8)) 22 | plt.plot(CLOSE,label='SHZS'); plt.plot(up,label='UP'); #画图显示 23 | plt.plot(mid,label='MID'); plt.plot(lower,label='LOW'); 24 | plt.plot(MA10,label='MA10',linewidth=0.5,alpha=0.7); 25 | plt.legend(); plt.grid(linewidth=0.5,alpha=0.7); plt.gcf().autofmt_xdate(rotation=45); 26 | plt.gca().xaxis.set_major_locator(MultipleLocator(len(CLOSE)/30)) #日期最多显示30个 27 | plt.title('SH-INDEX & BOLL SHOW',fontsize=20); plt.show() 28 | -------------------------------------------------------------------------------- /MyTT.py: -------------------------------------------------------------------------------- 1 | # MyTT 麦语言-通达信-同花顺指标实现 https://github.com/mpquant/MyTT 2 | # V2.1 2021-6-6 新增 BARSLAST函数 3 | # V2.2 2021-6-8 新增 SLOPE,FORCAST线性回归,和回归预测函数 4 | 5 | import numpy as np; import pandas as pd 6 | 7 | #------------------ 0级:核心工具函数 -------------------------------------------- 8 | def RD(N,D=3): return np.round(N,D) #四舍五入取3位小数 9 | def RET(S,N=1): return np.array(S)[-N] #返回序列倒数第N个值,默认返回最后一个 10 | def ABS(S): return np.abs(S) #返回N的绝对值 11 | def MAX(S1,S2): return np.maximum(S1,S2) #序列max 12 | def MIN(S1,S2): return np.minimum(S1,S2) #序列min 13 | 14 | def MA(S,N): #求序列的N日平均值,返回序列 15 | return pd.Series(S).rolling(N).mean().values 16 | 17 | def REF(S, N=1): #对序列整体下移动N,返回序列(shift后会产生NAN) 18 | return pd.Series(S).shift(N).values 19 | 20 | def DIFF(S, N=1): #前一个值减后一个值,前面会产生nan 21 | return pd.Series(S).diff(N) #np.diff(S)直接删除nan,会少一行 22 | 23 | def STD(S,N): #求序列的N日标准差,返回序列 24 | return pd.Series(S).rolling(N).std(ddof=0).values 25 | 26 | def IF(S_BOOL,S_TRUE,S_FALSE): #序列布尔判断 res=S_TRUE if S_BOOL==True else S_FALSE 27 | return np.where(S_BOOL, S_TRUE, S_FALSE) 28 | 29 | def SUM(S, N): #对序列求N天累计和,返回序列 30 | return pd.Series(S).rolling(N).sum().values 31 | 32 | def HHV(S,N): # HHV(C, 5) # 最近5天收盘最高价 33 | return pd.Series(S).rolling(N).max().values 34 | 35 | def LLV(S,N): # LLV(C, 5) # 最近5天收盘最低价 36 | return pd.Series(S).rolling(N).min().values 37 | 38 | def EMA(S,N): #指数移动平均,为了精度 S>4*N EMA至少需要120周期 39 | return pd.Series(S).ewm(span=N, adjust=False).mean().values 40 | 41 | def SMA(S, N, M=1): #中国式的SMA,至少需要120周期才精确 42 | K = pd.Series(S).rolling(N).mean() #先求出平均值 (下面如果有不用循环的办法,能提高性能,望告知) 43 | for i in range(N+1, len(S)): K[i] = (M * S[i] + (N -M) * K[i-1]) / N # 因为要取K[i-1],所以 range(N+1, len(S)) 44 | return K 45 | 46 | def AVEDEV(S,N): #平均绝对偏差 (序列与其平均值的绝对差的平均值) 47 | avedev=pd.Series(S).rolling(N).apply(lambda x: (np.abs(x - x.mean())).mean()) 48 | return avedev.values 49 | 50 | def SLOPE(S,N,RS=False): #返S序列N周期回线性回归斜率 (默认只返回斜率,不返回整个直线序列) 51 | M=pd.Series(S[-N:]); poly = np.polyfit(M.index, M.values,deg=1); Y=np.polyval(poly, M.index); 52 | if RS: return Y[1]-Y[0],Y 53 | return Y[1]-Y[0] 54 | 55 | 56 | #------------------ 1级:应用层函数(通过0级核心函数实现) ---------------------------------- 57 | def COUNT(S_BOOL, N): # COUNT(CLOSE>O, N): 最近N天满足S_BOO的天数 True的天数 58 | return SUM(S_BOOL,N) 59 | 60 | def EVERY(S_BOOL, N): # EVERY(CLOSE>O, 5) 最近N天是否都是True 61 | R=SUM(S_BOOL, N) 62 | return IF(R==N, True, False) 63 | 64 | def LAST(S_BOOL, A, B): #从前A日到前B日一直满足S_BOOL条件 65 | if AB 例:LAST(CLOSE>OPEN,5,3) 5天前到3天前是否都收阳线 66 | return S_BOOL[-A:-B].sum()==(A-B) #返回单个布尔值 67 | 68 | def EXIST(S_BOOL, N=5): # EXIST(CLOSE>3010, N=5) n日内是否存在一天大于3000点 69 | R=SUM(S_BOOL,N) 70 | return IF(R>0, True ,False) 71 | 72 | def BARSLAST(S_BOOL): #上一次条件成立到当前的周期 73 | M=np.argwhere(S_BOOL); # BARSLAST(CLOSE/REF(CLOSE)>=1.1) 上一次涨停到今天的天数 74 | return len(S_BOOL)-int(M[-1])-1 if M.size>0 else -1 75 | 76 | def FORCAST(S,N): #返S序列N周期回线性回归后的预测值 77 | K,Y=SLOPE(S,N,RS=True) 78 | return Y[-1]+K 79 | 80 | def CROSS(S1,S2): #判断穿越 CROSS(MA(C,5),MA(C,10)) 81 | CROSS_BOOL=IF(S1>S2, True ,False) 82 | return COUNT(CROSS_BOOL>0,2)==1 #上穿:昨天0 今天1 下穿:昨天1 今天0 83 | 84 | 85 | 86 | #------------------ 2级:技术指标函数(全部通过0级,1级函数实现) ------------------------------ 87 | def MACD(CLOSE,SHORT=12,LONG=26,M=9): # EMA的关系,S取120日,和雪球小数点2位相同 88 | DIF = EMA(CLOSE,SHORT)-EMA(CLOSE,LONG); 89 | DEA = EMA(DIF,M); MACD=(DIF-DEA)*2 90 | return RD(DIF),RD(DEA),RD(MACD) 91 | 92 | def KDJ(CLOSE,HIGH,LOW, N=9,M1=3,M2=3): # KDJ指标 93 | RSV = (CLOSE - LLV(LOW, N)) / (HHV(HIGH, N) - LLV(LOW, N)) * 100 94 | K = EMA(RSV, (M1*2-1)); D = EMA(K,(M2*2-1)); J=K*3-D*2 95 | return K, D, J 96 | 97 | def RSI(CLOSE, N=24): 98 | DIF = CLOSE-REF(CLOSE,1) 99 | return RD(SMA(MAX(DIF,0), N) / SMA(ABS(DIF), N) * 100) 100 | 101 | def WR(CLOSE, HIGH, LOW, N=10, N1=6): #W&R 威廉指标 102 | WR = (HHV(HIGH, N) - CLOSE) / (HHV(HIGH, N) - LLV(LOW, N)) * 100 103 | WR1 = (HHV(HIGH, N1) - CLOSE) / (HHV(HIGH, N1) - LLV(LOW, N1)) * 100 104 | return RD(WR), RD(WR1) 105 | 106 | def BIAS(CLOSE,L1=6, L2=12, L3=24): # BIAS乖离率 107 | BIAS1 = (CLOSE - MA(CLOSE, L1)) / MA(CLOSE, L1) * 100 108 | BIAS2 = (CLOSE - MA(CLOSE, L2)) / MA(CLOSE, L2) * 100 109 | BIAS3 = (CLOSE - MA(CLOSE, L3)) / MA(CLOSE, L3) * 100 110 | return RD(BIAS1), RD(BIAS2), RD(BIAS3) 111 | 112 | def BOLL(CLOSE,N=20, P=2): #BOLL指标,布林带 113 | MID = MA(CLOSE, N); 114 | UPPER = MID + STD(CLOSE, N) * P 115 | LOWER = MID - STD(CLOSE, N) * P 116 | return RD(UPPER), RD(MID), RD(LOWER) 117 | 118 | def PSY(CLOSE,N=12, M=6): 119 | PSY=COUNT(CLOSE>REF(CLOSE,1),N)/N*100 120 | PSYMA=MA(PSY,M) 121 | return RD(PSY),RD(PSYMA) 122 | 123 | def CCI(CLOSE,HIGH,LOW,N=14): 124 | TP=(HIGH+LOW+CLOSE)/3 125 | return (TP-MA(TP,N))/(0.015*AVEDEV(TP,N)) 126 | 127 | def ATR(CLOSE,HIGH,LOW, N=20): #真实波动N日平均值 128 | TR = MAX(MAX((HIGH - LOW), ABS(REF(CLOSE, 1) - HIGH)), ABS(REF(CLOSE, 1) - LOW)) 129 | return MA(TR, N) 130 | 131 | def BBI(CLOSE,M1=3,M2=6,M3=12,M4=20): #BBI多空指标 132 | return (MA(CLOSE,M1)+MA(CLOSE,M2)+MA(CLOSE,M3)+MA(CLOSE,M4))/4 133 | 134 | def DMI(CLOSE,HIGH,LOW,M1=14,M2=6): #动向指标:结果和同花顺,通达信完全一致 135 | TR = SUM(MAX(MAX(HIGH - LOW, ABS(HIGH - REF(CLOSE, 1))), ABS(LOW - REF(CLOSE, 1))), M1) 136 | HD = HIGH - REF(HIGH, 1); LD = REF(LOW, 1) - LOW 137 | DMP = SUM(IF((HD > 0) & (HD > LD), HD, 0), M1) 138 | DMM = SUM(IF((LD > 0) & (LD > HD), LD, 0), M1) 139 | PDI = DMP * 100 / TR; MDI = DMM * 100 / TR 140 | ADX = MA(ABS(MDI - PDI) / (PDI + MDI) * 100, M2) 141 | ADXR = (ADX + REF(ADX, M2)) / 2 142 | return PDI, MDI, ADX, ADXR 143 | 144 | def TAQ(HIGH,LOW,N): #唐安奇通道交易指标,大道至简,能穿越牛熊 145 | UP=HHV(HIGH,N); DOWN=LLV(LOW,N); MID=(UP+DOWN)/2 146 | return UP,MID,DOWN 147 | 148 | def TRIX(CLOSE,M1=12, M2=20): #三重指数平滑平均线 149 | TR = EMA(EMA(EMA(CLOSE, M1), M1), M1) 150 | TRIX = (TR - REF(TR, 1)) / REF(TR, 1) * 100 151 | TRMA = MA(TRIX, M2) 152 | return TRIX, TRMA 153 | 154 | def VR(CLOSE,VOL,M1=26): #VR容量比率 155 | LC = REF(CLOSE, 1) 156 | return SUM(IF(CLOSE > LC, VOL, 0), M1) / SUM(IF(CLOSE <= LC, VOL, 0), M1) * 100 157 | 158 | def EMV(HIGH,LOW,VOL,N=14,M=9): #简易波动指标 159 | VOLUME=MA(VOL,N)/VOL; MID=100*(HIGH+LOW-REF(HIGH+LOW,1))/(HIGH+LOW) 160 | EMV=MA(MID*VOLUME*(HIGH-LOW)/MA(HIGH-LOW,N),N); MAEMV=MA(EMV,M) 161 | return EMV,MAEMV 162 | 163 | 164 | def DPO(CLOSE,M1=20, M2=10, M3=6): #区间震荡线 165 | DPO = CLOSE - REF(MA(CLOSE, M1), M2); MADPO = MA(DPO, M3) 166 | return DPO, MADPO 167 | 168 | def BRAR(OPEN,CLOSE,HIGH,LOW,M1=26): #BRAR-ARBR 情绪指标 169 | AR = SUM(HIGH - OPEN, M1) / SUM(OPEN - LOW, M1) * 100 170 | BR = SUM(MAX(0, HIGH - REF(CLOSE, 1)), M1) / SUM(MAX(0, REF(CLOSE, 1) - LOW), M1) * 100 171 | return AR, BR 172 | 173 | def DMA(CLOSE,N1=10,N2=50,M=10): #平行线差指标 174 | DIF=MA(CLOSE,N1)-MA(CLOSE,N2); DIFMA=MA(DIF,M) 175 | return DIF,DIFMA 176 | 177 | def MTM(CLOSE,N=12,M=6): #动量指标 178 | MTM=CLOSE-REF(CLOSE,N); MTMMA=MA(MTM,M) 179 | return MTM,MTMMA 180 | 181 | def ROC(CLOSE,N=12,M=6): #变动率指标 182 | ROC=100*(CLOSE-REF(CLOSE,N))/REF(CLOSE,N); MAROC=MA(ROC,M) 183 | return ROC,MAROC 184 | 185 | #望大家能提交更多指标和函数 https://github.com/mpquant/MyTT 186 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Ashare ( 开源 极简 A股实时行情数据API) 2 | 3 | 中国股市A股股票行情实时数据最简封装API接口,包含日线,分时分钟线,全部格式成DataFrame格式数据,可用来研究,量化分析,证券股票程序化自动化交易系统 4 | 行情系统包括新浪腾讯双数据核心,自动故障切换,为量化研究者在数据获取方面极大地减轻工作量,更加专注于策略和模型的研究与实现。 5 | 6 | 功能特点 7 | --- 8 | * 核心库轻量化:项目库就一个文件Ashare.py,不用安装设置,可自由裁剪,随用随走 `from Ashare import *` 即可 9 | 10 | * 双内核封装,新浪财经,腾讯股票的实时行情数据,包括任意历史日线,周线,月线,分钟线,小时线等,已经稳定运行数年 11 | 12 | * 双内核一主一备,自动热备,自动切换,Ashare即使用来做量化实盘行情源也可以满足。 13 | 14 | * 全部数据格式清理成DataFrame格式数据,让您非常方便的使用pandas来分析和处理 15 | 16 | * 和其他行情库(tushare等)比的优点是什么? -- 简单 轻量 便携 开源 17 | 18 | * Ashare把复杂的数据获取,拆分,整合逻辑全部封装成一个函数 `get_price()` 看完下面例子就会了 19 | 20 | * Ashare可以用在任何需要量化研究,量化分析的场合 21 | 22 | 23 | 24 | ### 先看一个最简单的例子 [Demo1.py](https://github.com/mpquant/Ashare/blob/main/Demo1.py) 25 | 26 | ```python 27 | from Ashare import * 28 | 29 | # 证券代码兼容多种格式 通达信,同花顺,聚宽 30 | # sh000001 (000001.XSHG) sz399006 (399006.XSHE) sh600519 ( 600519.XSHG ) 31 | 32 | df=get_price('sh000001',frequency='1d',count=5) #默认获取今天往前5天的日线实时行情 33 | print('上证指数日线行情\n',df) 34 | 35 | df=get_price('000001.XSHG',frequency='1d',count=5,end_date='2021-04-30') #可以指定结束日期,获取历史行情 36 | print('上证指数历史行情\n',df) 37 | 38 | df=get_price('000001.XSHG',frequency='1w',count=5,end_date='2018-06-15') #支持'1d'日, '1w'周, '1M'月 39 | print('上证指数历史周线\n',df) 40 | 41 | df=get_price('sh600519',frequency='15m',count=5) #分钟线实时行情,可用'1m','5m','15m','30m','60m' 42 | print('贵州茅台15分钟线\n',df) 43 | 44 | df=get_price('600519.XSHG',frequency='60m',count=6) #分钟线实时行情,可用'1m','5m','15m','30m','60m' 45 | print('贵州茅台60分钟线\n',df) 46 | ``` 47 | 48 | 49 | 50 | ``` 51 | #上证指数日线行情---------------------------------------------------- 52 | open close high low volume 53 | 2021-06-07 3597.14 3599.54 3600.38 3581.90 303718677.0 54 | 2021-06-08 3598.75 3580.11 3621.52 3563.25 304491470.0 55 | 2021-06-09 3576.80 3591.40 3598.71 3572.64 298323296.0 56 | 2021-06-10 3587.53 3610.86 3624.34 3584.13 318174808.0 57 | 2021-06-11 3614.11 3589.75 3614.40 3587.15 360554970.0 58 | 59 | 60 | #贵州茅台60分钟线---------------------------------------------------- 61 | open close high low volume 62 | 2021-06-10 14:00:00 2237.00 2224.16 2245.00 2222.00 4541.53 63 | 2021-06-10 15:00:00 2222.21 2238.48 2240.34 2222.21 4146.88 64 | 2021-06-11 10:30:00 2239.00 2220.00 2244.00 2197.86 12030.00 65 | 2021-06-11 11:30:00 2220.01 2210.18 2231.80 2200.18 4868.00 66 | 2021-06-11 14:00:00 2210.10 2223.35 2224.48 2206.01 4544.00 67 | 2021-06-11 15:00:00 2223.33 2178.81 2226.80 2178.81 12529.00 68 | ``` 69 | 70 | 71 | ### 再看一个配合[MyTT](https://github.com/mpquant/MyTT)的例子 [Demo2.py](https://github.com/mpquant/Ashare/blob/main/Demo2.py) 72 | 73 | ```python 74 | #股市行情数据获取和作图 -2 75 | from Ashare import * #股票数据库 https://github.com/mpquant/Ashare 76 | from MyTT import * #myTT麦语言工具函数指标库 https://github.com/mpquant/MyTT 77 | 78 | # 证券代码兼容多种格式 通达信,同花顺,聚宽 79 | # sh000001 (000001.XSHG) sz399006 (399006.XSHE) sh600519 ( 600519.XSHG ) 80 | 81 | df=get_price('000001.XSHG',frequency='1d',count=120) #获取今天往前120天的日线实时行情 82 | print('上证指数日线行情\n',df.tail(5)) 83 | 84 | #-------有数据了,下面开始正题 ------------- 85 | CLOSE=df.close.values; OPEN=df.open.values #基础数据定义,只要传入的是序列都可以 86 | HIGH=df.high.values; LOW=df.low.values #例如 CLOSE=list(df.close) 都是一样 87 | 88 | MA5=MA(CLOSE,5) #获取5日均线序列 89 | MA10=MA(CLOSE,10) #获取10日均线序列 90 | up,mid,lower=BOLL(CLOSE) #获取布林带指标数据 91 | 92 | #-------------------------作图显示----------------------------------------------------------------- 93 | import matplotlib.pyplot as plt ; from matplotlib.ticker import MultipleLocator 94 | plt.figure(figsize=(15,8)) 95 | plt.plot(CLOSE,label='SHZS'); plt.plot(up,label='UP'); #画图显示 96 | plt.plot(mid,label='MID'); plt.plot(lower,label='LOW'); 97 | plt.plot(MA10,label='MA10',linewidth=0.5,alpha=0.7); 98 | plt.show() 99 | ``` 100 | 101 |
boll
102 | 103 | 104 | ---------------------------------------------------- 105 | ### 团队其他开源项目 - 如果本项目能帮助到您,请右上角帮我们点亮 ★star 以示鼓励! 106 | * [MyTT 通达信,同花顺公式指标,文华麦语言的python实现](https://github.com/mpquant/MyTT) 107 | 108 | * [Ashare最简股票行情数据接口API,A股行情完全开源免费](https://github.com/mpquant/Ashare) 109 | 110 | ---------------------------------------------------- 111 | 112 | ![加入群聊](https://github.com/mpquant/Ashare/blob/main/img/qrcode.png) 113 | 114 | > #### 股市程序化交易大群, 圈内大咖量化策略分享 115 | > #### 全是干货,无闲聊 ,物以类聚,人以群分,一起感受思维碰撞的力量! 116 | -------------------------------------------------------------------------------- /img/qrcode.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mpquant/Ashare/1b92be6b58f6f8508efa4b90e5970de109957e41/img/qrcode.png -------------------------------------------------------------------------------- /img/sh_boll.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mpquant/Ashare/1b92be6b58f6f8508efa4b90e5970de109957e41/img/sh_boll.png --------------------------------------------------------------------------------