我自己的环境:Linux+Python+Sqlite3+Flask。 Linux租用云主机,数据库用Sqlite3,前台用Flask。
行情接口,主要历史行情、实时行情,包括:基金、股票、债卷、期货和汇率等等。下面主要讲股票和基金。
一、历史行情接口
获取股票历史行情有两种方式:
1,下载股票历史行情文件
最初我是在网易行情中心下载行情文件,现在网易不提供行情下载了。目前似乎没有网站提供行情文件下载。只能通过接口获取。
2,股票历史行情接口
目前获取历史行情比较流行的接口:tushare 和 baostock
tushare接口需要收费,500元/年,免费的接口正在逐步关闭。
baostock目前免费。
缺点:这两个接口都不提供实时行情。
二、实时行情接口
实时行情接口很多,有主要用腾讯的行情接口: http://sqt.gtimg.cn/q=sh600519,它支持A股、港股和美股。
基金行情接口
主要用天天基金行情接口,提供基金历史净值和实时估值。实时估值接口和返回参数,注意调用时,加上报文头headers:
url = "http://fundgz.1234567.com.cn/js/{}.js?rt=1463558676006".format(code)
headers = {'content-type': 'application/json', 'User-Agent': 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:22.0) Gecko/20100101 Firefox/22.0'}
content = requests.get(url, headers=headers).text
历史净值接口:主要有三个参数,基金代码,开始日期,结束日期
https://fundf10.eastmoney.com/F10DataApi.aspx?type=lsjz&code=基金代码&page=1&per=65535&sdate=开始日期&edate=结束日期 html = etree.HTML(requests.get(url).content.decode())
有了基金估值,可以实时打印出基金涨跌榜:
更多内容可访问这个链接 A股实时盘面
假设用上面的接口获取了股票行情。下面讲如何计算股票的MACD。
MACD,全称平滑异同平均线,由三条线组成:
DIF线:简称快线,收盘价12日指数平滑移动平均线 - 收盘价26日指数平滑移动平均线;
DEA线:简称慢线,DIF线的9日指数平滑移动平均线;
MACD线:DIF线与DEA线差的2倍,红绿柱状线条;
计算步骤,主要用到python的pandas库。
1,获取行情,调用在线行情接口如baostock,或读取本地行情文件;
2,将行情转换成pd.DataFrame
3,用pd.ewm计算移动平均线
4,打印结果
代码:
#close_vol=3表示收盘价,6表示成交量
def clh2df(code,close_vol = 3):
#日期,股票代码,名称,收盘价,涨跌幅,换手率,成交量,成交金额,最低价,最高价,开盘价,前收盘
info = getOneStockInfo(code)
info.reverse()
high = [i[9] for i in info]
low = [i[8] for i in info]
close = [i[close_vol] for i in info]
turn = [i[5] for i in info]
dates = [i[0] for i in info]
data_dict = { 'High': high, 'Low': low, 'Close': close, 'Turn':turn }
df = pd.DataFrame(data_dict)
df['Date'] = pd.to_datetime(dates) # 将日期列表转换为datetime类型,并添加为新列
df.set_index('Date', inplace=True) # 将日期列设置为DataFrame的索引
return df
#计算股票macd
def st_macd(code,days,signal_ma = 9,short_ma = 12,long_ma = 26):
data = clh2df(code)
data['EMA12'] = data['Close'].ewm(span=short_ma, adjust=False).mean()
data['EMA26'] = data['Close'].ewm(span=long_ma, adjust=False).mean()
# 计算MACD线
data['DIF'] = data['EMA12'] - data['EMA26']
# 计算信号线(MACD的9日EMA)
data['DEA'] = data['DIF'].ewm(span=signal_ma, adjust=False).mean()
# 计算MACD柱状图(MACD与信号线的差)
data['MACD'] = 2 * (data['DIF'] - data['DEA'])
# 打印或查看结果
df = data[['Close', 'DIF', 'DEA', 'MACD']]
return df[-1*days:]
注意:
要用股票的所有行情,这样结果才能跟股票软件上的数据一致或不相上下,否则出入较大。 不过,对不上也没关系,只要趋势对即可。比如10月8日是高点,只要你的macd数据在10月8日是近期高点即可。