加载中…
个人资料
智扬信达
智扬信达
  • 博客等级:
  • 博客积分:0
  • 博客访问:386
  • 关注人气:117
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

基于PYTHON实现证券数据的抓取,以PYECHARTS实现证券数据实时分析

(2018-12-22 22:49:45)
标签:

python

pyecharts

it

分类: 数据挖掘-概念/理论/算法

by Tony

主要采用Java+Python+MySQL+Redis的方式建设,以满足前期数据量较小的场景下,实时分析预警的要求。使用JAVA搭建核心框架;Python用于数据采集应用、数据分析模型的实现;MySQL用于历史数据、日志等非实时数据存储;Redis用于当日实时行情的存储,如下图:

http://s15/mw690/002F0G9Jzy7qb8i4l8q1e&690

那问题来了,这么庞大的数据要怎么来呢?

证券实时行情数据主要是靠Tushare接口(http://tushare.org/)采集数据。

    关于接口:tushare.get_realtime_quotes(symbols=CodeList) 获取数据,CodeList可以是一个Data Frame也可以是一个单独的字符串。


Data Frame参数)


(单独的参数,既股票代码)

  我们通过持续调用Tushare接口,就能获取实时行情数据,并其获取并存储至MySQL数据库中:


  然后就是图表的绘制了,先使用pyechart绘制一个基本的K线图,一个K线图包括了开盘价、收盘价、最高价、最低价4个指标,维度主要是日期。我们先根据这个需要,进行数据提取:


使用get_k_data这个接口直接提取K线数据,这里我们提取2017年全年的数据:

 

(时间)

 

(即:[开盘值, 收盘值, 最低值, 最高值]

现在我们基本数据都有了,但只有简单一些数据。要做到对股票的分析,很重要的一个处理是日K线、MA5MA10MA20MA30线,这些算法如下:

# 计算MACD指标

def calculateMA(dataFrame=None, dayCount=0):

    result = pd.DataFrame(columns=['date', 'ma'])

    for i in range(0,len(dataFrame)):

        row = {'date': dataFrame['date'].loc[i], 'ma': 0}

        if (i < dayCount):

            result = result.append(row, ignore_index=True)

            continue

        sum = 0

        for j in range(0, dayCount):

            sum += dataFrame['close'].loc[i-j]

        ma = sum / dayCount

        row['ma'] = ma

        result = result.append(row, ignore_index=True)

    return result

 

# Data Init

df = ts.get_k_data(code='000001', start='2017-01-01', end='2017-12-31', index=False, retry_count=3, pause=0.001)

 

# 公共x轴,日期

xaxis = np.array(df[['date']])

 

# K线图

k_yaxis = np.array(df[['open', 'close', 'low', 'high']])

kline = Kline(title="K线图", subtitle="000001")

kline.add("K线", x_axis=xaxis, y_axis=k_yaxis, is_datazoom_show=True)

 

# MACD 5 

df_ma5 = calculateMA(df, 5)

ma5_y = np.array(df_ma5['ma'])

line5 = Line()

line5.add("MA5", xaxis, ma5_y,is_datazoom_show=True)

 

# MACD 10

df_ma10 = calculateMA(df, 10)

ma10_y = np.array(df_ma10['ma'])

line10 = Line()

line10.add("MA10", xaxis, ma10_y,is_datazoom_show=True)

 

# MACD 20

df_ma20 = calculateMA(df, 20)

ma20_y = np.array(df_ma20['ma'])

line20 = Line()

line20.add("MA20", xaxis, ma20_y,is_datazoom_show=True)

 

# MACD 30

df_ma30 = calculateMA(df, 30)

ma30_y = np.array(df_ma30['ma'])

line30 = Line()

line30.add("MA30", xaxis, ma30_y,is_datazoom_show=True)

 

 


 终于,我们得到了我们想要的效果图了:

http://s14/mw690/002F0G9Jzy7qb8j3bqZ8d&690

如需沟通讨论,可联系QQ2622487640,本文版权归智扬信达所有,转载请注明出处

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有