使用Tushare金融数据包制作个股查询api

Louis
发布于 2020-08-06 / 801 阅读 / 0 评论 / 0 点赞

使用Tushare金融数据包制作个股查询api

许久没更新博客了,最近投资很火,我身边很多平时不怎么投资的朋友。听见有一个叫股票的东西可以帮他们赚到钱。纷纷联系券商开户,准备冲市场收钱。在别的文章里我谈到过关于投资市场印钞机论。认为市场是印钞机的。基本都会挨捶。这不,最近我才挨了一顿爆锤。

作为一个做技术的韭菜,有一个计算机技术和金融技术的交叉地带,叫做量化交易。我目前的理解是程序化交易。

不谈,要做程序化,首先要拿到金融数据进行分析建模,而后预测,最后推荐操作或者自动下单。本文就是利用Tushare拉取个股行情数据,并且放在云服务上,变成随处可用的金融数据api

金融数据api是什么

API(Application Programming Interface,应用程序接口),至于金融API是什么,我似乎也给不了一个明确的定义,按照阿里云售卖的数据API来说,我把它定义成:一种可以通过Http协议在网络上获取金融数据的接口。这些接口可以用作小程序拉取数据,量化交易策略工具拉取行情信息,可视化web界面绘制K线图的数据源。这里放一个阿里云正在售卖的金融数据api:易源数据-股票查询

有条件的朋友可以斥巨资一分钱购买来试用一下,从该第三方提供的技术文档来说,该金融API可以提供的数据有:

  • 单只股票的行情查询
  • 大盘历史查询
  • 大盘股指K线
  • 大盘股指分时
  • 沪深历史行情
  • ……

等等数据,收费也是按照行内的计费标准,按调用次数收费,如果是需要做程序化交易的朋友,一秒钟刷新一次股价,估计钱包不好受。程序化没赚到多少钱就都捐给API提供商了,回头才发现他们才是资本主义镰刀,割天下量化交易者。

我首先也是想到在阿里云上购买金融API,但是身为一个技术出身的程序猿。心里首先就吞不下这口气(当然了,主要还是兜里没钱)。于是尝试用一些其他方式自己做一个金融API。

使用Tushare拉取金融数据

数据是做金融API的原材料,首先想到的办法是自己编写爬虫程序爬取个大证券网站的行情数据。当然了,目前的环境反爬做得很好,我也懒得去一个个Html页面分析找到自己要的数据,于是在网上找来了Tushare的这款工具,该工具使用python实现,具有较多金融数据可以获得,虽然说高级功能需要收费,但是本文中用到的个股行情并不需要收费,于是我们可以开始了。

Tushare Pro的官网

本次用到的拉取均线的接口,说明文档在如下连接:

https://tushare.pro/document/2?doc_id=109

根据阅读文档,可以知道这个通用行情接口,覆盖了上面售卖的大多数功能,调用方法也在文档中给出

ps.不想在本文中赘述python环境的搭建,未完成helloworld的朋友建议百度解决。

import tushare as ts
ts.set_token("your-token")
df = ts.pro_bar(ts_code='000001.SZ', start_date='20180101', end_date='20181011', ma=[20, 60, 120])

ps.如果提示找不到Pandas模块,则需要安装一下

该函数返回一个dataframe格式对象,对象中含有每日开盘价、收盘价、最高价、最低价,均价,均量等内容应有尽有。案例中我分别使用ma20技术线,ma60趋势线,ma120价值线这三条均线。

可以使用head()函数查看部分内容

df.head()

取出自己所需要的数据,需要使用datafreme索引:

    data = {
        "gid": gid,
        "ma20": df.ma20[0],
        "ma60": df.ma60[0],
        "ma120": df.ma120[0],
        "ma_v_20": df.ma_v_20[0],
        "ma_v_60": df.ma_v_60[0],
        "ma_v_120": df.ma_v_120[0],
    }

此处我将需要的数据保存为data字典,为下个章节埋下伏笔。

使用Django制作web服务器

读完上面的部分,有代码经验的朋友已经可以在本地获得他想要的金融数据了,如果只是需要进行量化策略分析,到此已经结束,没有必要将服务部署到服务器上,因为部署本地服务器的效果跟上述类似,部署云服务器还需要云服务器、证书、域名等一大堆东西。

Django是一个开放源代码的Web应用框架。本章节将会使用Django搭建一个web服务器,并且在本地完成一个金融api。

老规矩,本章也不会对Django花费过多的篇幅讲解,如果有意从头开始学习Django 这里给出几个网站:

Django教程-菜鸟教程: https://www.runoob.com/django/django-tutorial.html
Django官方中文文档: https://docs.djangoproject.com/zh-hans/3.1/

  1. 新建项目
django-admin startproject demo #新建一个名叫Demo的项目
cd demo 
python manage.py startapp finace #新建模块finace
  1. Django配置
    在Django中添加finace的页面路由
from django.contrib import admin
from django.urls import path ,include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('finace/',include("finace.urls"))
]

在finace下新建urls.py

touch finace/urls.py

在urls.py中增加以下内容

from django.urls import path
from . import views
urlpatterns = [
    path('info',views.info , name = 'info')
] 
  1. 编写请求处理函数

在finace/views.py增加以下内容

# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.http import HttpResponse
import json
import tushare as ts
import datetime


ts.set_token("your token") #需要修改成注册tushare时获得的token

# Create your views here.
def macd(request):
    gid = request.GET.get("gid", '')
    end_time = datetime.datetime.now().date().strftime('%Y%m%d')
    start_time = (datetime.datetime.now().date() - datetime.timedelta(days=230)).strftime('%Y%m%d')
    df = ts.pro_bar(ts_code=gid, start_date=start_time, end_date=end_time, ma=[20, 60, 120])
    data = {
        "gid": gid,
        "ma20": df.ma20[0],
        "ma60": df.ma60[0],
        "ma120": df.ma120[0],
        "ma_v_20": df.ma_v_20[0],
        "ma_v_60": df.ma_v_60[0],
        "ma_v_120": df.ma_v_120[0],
    }
    ret = {
        'msg': "success",
        'code': 200,
        "data": data
    }
    return HttpResponse(json.dumps(ret, ensure_ascii=False), content_type='application/json')

  1. 启动服务并测试

在进行这一步的时候,如果提示缺少模块,需要使用pip进行模块安装

python manage.py runserver
# 以下为打印信息
System check identified no issues (0 silenced).

August 11, 2020 - 15:16:43
Django version 3.0.8, using settings 'demo.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.

# 使用curl测试,或者直接把链接复制到浏览器
demo % curl "localhost:8000/finace/macd?gid=000001.SZ"

可以得到如下的输出:

{
    "msg": "success",
    "code": 200,
    "data": {
        "gid": "000001.SZ",
        "ma20": 13.88,
        "ma60": 13.6487,
        "ma120": 13.6778,
        "ma_v_20": 1613947.8415,
        "ma_v_60": 1404233.1158,
        "ma_v_120": 1199120.3998
    }
}

则本地金融API搭建完成,可以通过http访问本地,拉取均线的数据。

我知道很多朋友看完发现做不出来,总感觉我漏写了什么东西。行吧,我把测试的项目压缩包发上来,用浏览器打开下面的链接就可以下载:

https://louisyuan-cn.oss-cn-shenzhen.aliyuncs.com/demo.zip

将服务部署到云

到上个章节,已经完成了本地金融API的简单制作,如果有需要多做一点接口,可以按照上述步骤,自行把Tushare的其他数据做成API。

最欢乐的地方不在于重复的动作把不同的数据开出来,而是在于多人参加……将刚刚做的Django服务部署到云,就可以享受人人参与的乐趣,还能将api做给自己设计的小程序、软件和其他可视化界面使用。

  1. 云服务器的购买、备案、证书绑定

我在另一篇文章中讲过云服务器的购买、备案、证书绑定给出链接,此处不在赘述:Louis的小时光:使用Halo开源框架搭建一个网站

  1. 配置Nginx

如果将服务开到80端口,不需要绑定ssl证书,访问时也不会要借助nginx来返回证书,可以省略这个步骤,直接将Django服务开设在80端口即可。

关于nginx的配置,另一篇文章有讲Nginx的配置略解,文中是把443端口重定向到8090端口。

  1. 开启Django服务
 python manage.py runserver 0.0.0.0:8090&

我的大多数读者都是不具备云服务条件的,所以这一步我就不准备做详细的配置展示。

尾声

少数的几篇技术总结竟然有尾声……也是神奇。

最近花了不少的业余时间来做量化交易的API。本文是我自己做的一个金融数据接口项目的代码节选。

这个项目有三个模块组成,分别是处理数据和触发自动交易的Sugar模块,负责可视化和交易结果提示的由我另一个朋友负责的小程序Caffe模块,还有还在规划的可插拔的量化策略插件Milk。

很巧的是,sugar是我家猫的名字,caffe是我朋友家里的猫的名字。他们都是多么令人快乐的小东西。


评论