股票量化环境,行情获取和MACD计算

我自己的环境: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日是近期高点即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值