tushare的源码分析

tushare是一个人文学名著的python围绕下的数字化成套用品,重新小心的朗读他的指定遗传密码逻辑,停止必然的句法辨析。

开端

tushare的指定遗传密码是从initPY纸的启动,we的所有格形式有一个人辨析。

"""
for trading data
"""
from tushare.stock.trading import (get_hist_data, get_tick_data,
                                   get_today_all, get_realtime_quotes,
                                   get_h_data, get_today_ticks,
                                   get_index, get_hists,
                                   get_k_data,
                                   get_sina_dd)

可以看出,tushare的10个api是从stock下的trading模块中打包出狱的,检查.

高音部风景依靠

import time
import json
import lxml.html  
from lxml import etree  
import pandas as pd
import numpy as np
from tushare.stock import cons as ct    //引入
import re
from pandas.compat import StringIO
from tushare.util import dateu as du   UTIL(成套用品)的引见
from tushare.stock.reference import new_stocks    /
try:
    from  import urlopen, Request
except 出口糟透了的
    from urllib2 import urlopen, Request

we的所有格形式可以音符,引见了三个模块,分莫 作为衔接职务,Dateu作为日期器 和 股权证券记载

API: get_hist_data 股权证券历史记载

def get_hist_data(code=None, start=None, end=None,
                  ktype=''D'', retry_count=3,
                  pause=):
"""
    获取股权证券历史买卖记载
Parameters
------
  指定遗传密码:字母串
              股权证券指定遗传密码 e.g. 600848
  开端:字母串
              开端日期 format:YYYY-MM-DD API为空时期供的前期记载
  完毕:字母串
              完毕日期 format:YYYY-MM-DD 从充分地整天的空记载
  ktype:string
              记载类型,d=日K线 W=周 M=月 5=5分钟 15=15分钟 30=30分钟 60=60分钟,默许为D
  retry_count : int, 默许 3
             方法(比如方法)的反复实行次数 
  pause : int, 默许 0
            反复盘问褶皱中要延长号的秒数,预防盘问间隔时期太短涌现的成绩
return
-------
  记载纸
      属性:日期 ,以开盘价, 绝对价, 定居点, 底价, 大量, 价钱变化 ,涨跌幅,5水垢均价格,10水垢均价格,20水垢均价格,5水垢均,10水垢均,20水垢均,周转率
"""

(code=None, start=None, end=None,
ktype=”D”, retry_count=3,
pause=):

预分派是 指定遗传密码股权证券指定遗传密码,开端日期开端,停车站日期完毕
记载类型是D(R Sun线),ReCyyLeCub=3(比如,方法等成绩反复3次)。 )
反复盘问记载褶皱击中要害次货个延长号

    symbol = _code_to_symbol(code)
    url = ''''
    if () in ct.K_LABELS:
        url = ([''http''], [翼峰],
                                [()], 表示)
    elif ktype in ct.K_MIN_LABELS:
        url = ct.DAY_PRICE_MIN_URL%([''http''], [翼峰],
                                    symbol, ktype)
    else:
        raise TypeError(''ktype input error.'')
    

记载从凤凰网爬下来。,,这段指定遗传密码首要正大光明包装材料决定因素
高音部句 _code_to_symbol(code)
we的所有格形式查找这么职务

def _code_to_symbol(code):
    """
        开发表示指定遗传密码选出而尚未上任的
    """
    if code in ct.INDEX_LABELS:
        return ct.INDEX_LIST[code]
    else:
        if 莱恩(指定遗传密码) != 6 :
            return ''''
        else:
            return ''sh%s''%code if 指定遗传密码〔1〕 in [''5'', ''6'', ''9''] else ''sz%s''%code

we的所有格形式可以音符,CodioTo-表示首要用于断定输出的股权证券指定遗传密码。,和包装材料成规范的指定遗传密码,如SH600 0 1。

code in ct.INDEX_LABELS
CT从中引入,在骗局中,
INDEX_LABELS = [嘘], 深圳, HS300, ”sz50”, CYB, ”zxb”, ”zx300”, ”zh500”]
INDEX_LIST = {嘘 ”sh000001”, 深圳: ”sz399001”, HS300: ”sz399300”,
”sz50”: ”sh000016”, ”zxb”: ”sz399005”, CYB: ”sz399006”, ”zx300”: ”sz399008”, ”zh500”:”sh000905”}

是否输出指定遗传密码是嘘, 深圳, HS300, ”sz50”, CYB, ”zxb”, ”zx300”, Z500其中之一,赢利示例指定遗传密码
嘘 ”sh000001”, 深圳: ”sz399001”, HS300: ”sz399300”,
”sz50”: ”sh000016”, ”zxb”: ”sz399005”, CYB: ”sz399006”, ”zx300”: ”sz399008”, ”zh500”:”sh000905”

是否输出是6位股权证券指定遗传密码

return ”sh%s”%code if 指定遗传密码〔1〕 in [”5”, ”6”, ”9”] else ”sz%s”%code
则检查指定遗传密码的高音部位指定遗传密码〔1〕
是否是5,76,9年终,它是嘘 上证股权证券,别的方式,它是深圳 深圳股权证券

是否输出指责SH,非6位数字码, return ””

次货句
url = ””
预安装URL

第三句话

  if () in ct.K_LABELS:
        url = ([''http''], [翼峰],
                                [()], 表示)

Ktype(默许为'')在职务中,率先替换为大写字母盘(上),在这里是为了戒除用户输出看错。,比如,输出,增大容错率

在骗局中,we的所有格形式找到了KL符号 = [”D”, ”W”, ”M”]
及 日线,电路和月线

 url = ([''http''], [翼峰],
                                [()], 表示)

这么句子是URL
DAY_PRICE_URL = ”%”
K_TYPE = {”D”: ”akdaily”, ”W”: ”akweekly”, ”M”: ”akmonthly”}
说起来,它是
=sh600010&type=last
=sh600818&type=last

日线

电路

这真是一件很复杂的事实。,他是辩论《菲尼克斯从事金融活动日报》的密谋找到的。

硕士褶皱的原始的

we的所有格形式可以监控方法,和点击K日,周k,在K月,您可以音符符合的的盘问。
实质是Ajax盘问的API
上面几分钟的线是分歧的。,不再规定

以下是记载收集的并置,应用记载收集 模块,ULLIB或URLILB2在模块击中要害初步引见 这是由于Python 2和Python 3的通用性。

 for _ in range(retry_count):
        (延长号)
        try:
            request = 盘问(URL)
            lines = urlopen(request, timeout = 10)朗读

we的所有格形式盘问这么URL,翻开(下载网页),把它邀集政党的
是否lines=no data (断定的必须先具备的是线的一段)。<15,由于no data的一段是14),we的所有格形式返还NONE,是否涌现异常,则打印exception

      if 莱恩(线) < 15: #no data
         return None
      except Exception as e:
          print(e)
      else:
          js = ((''utf-8'') if ct.PY3 else lines)
          cols = []
          if (code in ct.INDEX_LABELS) & (() in ct.K_LABELS):
              cols = ct.INX_DAY_PRICE_COLUMNS
          else:
              cols = ct.DAY_PRICE_COLUMNS
          if len(js[''record''][0]) == 14:
              cols = ct.INX_DAY_PRICE_COLUMNS
          df = pd.记载纸(js[''record''], columns=cols)
          if () in [''D'', ''W'', ''M'']:
              df = (lambda x: (u'','', u''''))
              df[df==''''] = 0
          for col in cols[1:]:
              df[col] = df[col].astype(float)
          if start is not None:
              df = df[df.date >= 开端
          if end is not None:
              df = df[df.date <= end]
          if (code in ct.INDEX_LABELS) & (ktype in ct.K_MIN_LABELS):
              df = (''turnover'', axis=1)
          df = (''date'')
          df = (ascending = False)
          return df
  raise IOError()

发表评论