精华内容
下载资源
问答
  • 行情数据采集工具

    2014-05-15 14:20:53
    行情数据采集工具
  • 股票行情实时数据接口-A股,完全免费的沪深证券股票数据-中国股市,python最简封装的API接口,包含日线,历史K线,分时线,分钟线,全部实时采集,系统包括新浪腾讯双数据核心采集获取,自动故障切换,STOCK数据格式成...
  • 演示实时采集股市行情的解决方案的演示程序
  • VB程序源码,可实现对沪深3396只股票的交易数据批量采集,并可以设置条件范围,在盘中按交易详情进行筛选,也可对一只股票的交易数据进行自动跟踪。
  • VC 6.0 获取并显示沪深股市实时交易行情,以Http Post方式请求URL,采集相关URL内容,然后经过数据过滤和分类,显示于窗体指定Lable中:  for(int i=0; i if(value[i] == ',') len ;  for(int j=0; j {  ...
  • 实时获取新浪 / Leverfun 的免费股票以及 level2 十档行情 / 集思路的分级基金行情
  • 新三板股票变动采集

    2018-08-28 09:29:28
    对新三板中的股票变动进行采集,根据表格类型进行爬取
  • 股票数据的获取目前有如下两种方法可以获取: 1. http/javascript接口取数据 2. web-service接口 这里我们选择http/javascript接口取数据 新浪股票代码格式为http://hq.sinajs.cn/list=sh600519 -贵州茅台 数据...

    股票数据的获取目前有如下两种方法可以获取:
    1. http/javascript接口取数据
    2. web-service接口

    这里我们选择http/javascript接口取数据

    新浪股票代码格式为
    http://hq.sinajs.cn/list=sh600519   -贵州茅台

    数据格式详情可以参考博客

    https://blog.csdn.net/simon803/article/details/7784682

    通过访问该URL返回一串文本,我们可以通过创建向量数组将其存储下来。

    同时你需要将curl库添加到你的头文件中。

    代码如下(以贵州茅台为例):

    #include <curl/curl.h>   
    #include <Windows.h>
    #include <iostream>
    #include <string>
    #include <vector>
    using namespace std;
    
    
    vector<string> subStrToVec(string str, char sep)  //将文本通过逗号分隔,来获取自己想要的数据
    
        {
            vector<string> vecArr;
            int flagSub = 0;
            for (int i = 0; i < str.length(); i++) {
                if (str[i] == ',') {
                    string temp = str.substr(flagSub, i - flagSub);
                    vecArr.push_back(temp);
                    flagSub = i + 1;
                }
            }
    
        return vecArr;
    }
    
    
    size_t WriteCallback(char* contents, size_t size, size_t nmemb, void* userp)  //回调函数
    {
        ((std::string*)userp)->append((char*)contents, size * nmemb);
        return size * nmemb;
    }
    
    
    vector<string> main1(string s1)
    {
            std::string readBuffer;
            CURL* curl;
            CURLcode res;
            string url = "http://hq.sinajs.cn/list=sh600519";
            vector<string> vecArr;
            curl = curl_easy_init();
            if (curl) {
                curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
                curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
                curl_easy_setopt(curl, CURLOPT_WRITEDATA, &readBuffer);  //将文本转存为字符串
                res = curl_easy_perform(curl);
                curl_easy_cleanup(curl);
                vecArr = subStrToVec(readBuffer, ',');
                readBuffer.clear();  //将字符串清空
            }
        return vecArr;
    }
    
    int main()
    {
        string s = "http://hq.sinajs.cn/list=sh600519";   //以贵州茅台代码为例
        vector<string> vecArr=main1(s);
        HWND hWnd;
        SetTimer(hWnd, 1, 1000, NULL);   //实时获取行情数据
        for (int i = 0; i < vecArr.size(); i++)   //输出
       {
            cout << vecArr.at(i) << endl;
       }
    }

    展开全文
  • 交易所行情数据采集爬虫

    千次阅读 2020-05-14 20:39:12
    在每天的盘前以及盘后的时间爬取上交所和深交所发布的当如的行情数据。 上交所数据源: http://www.sse.com.cn/market/price/report/ 深交所数据源: http://www.szse.cn/market/trend/index.html 网站更新规律 ...

    任务描述

    在每天的盘前以及盘后的时间爬取上交所和深交所发布的当如的行情数据。
    上交所数据源: http://www.sse.com.cn/market/price/report/
    在这里插入图片描述

    深交所数据源: http://www.szse.cn/market/trend/index.html
    在这里插入图片描述

    网站更新规律

    上交所在一天之内,实时更新当天的行情数据。

    深交所在当天收盘后才会更新当天的数据。

    上交所行情

    上交所的行情数据可在一个 js 请求中获得。
    主要注意的是 js 请求参数的生成:

        def get_params(self, begin):
            _timestamp = int(time.time()*1000)
            data = {
                'callback': 'jQuery1124010159023820477953_1589359759776',
                'select': 'code,name,open,high,low,last,prev_close,chg_rate,volume,amount,tradephase,change,amp_rate,cpxxsubtype,cpxxprodusta',
                'order': '',
                'begin': begin,
                'end': begin + 25,
                "_": _timestamp,    # 当前的一个时间戳
            }
            param = urlencode(data)
            return param
    

    其中, jQuery1124010159023820477953_1589359759776 这一部分是固定的,服务器不会对其进行校验。_ 则是当前的时间戳。

    另外,在页面中显示的类型,在接口数据中是以字符的形式给出的,我们需要知道字符与实际含义的对应关系。全局搜索 ”主板A股“ 等关键词,很容易在 js 代码中的得到如下映射关系:

    self.sub_type_map = {
                "ASH": "主板A股",
                "BSH": "主板B股",
                "KSH": "科创板",
            }
    

    这一对应关系。

    主体代码部分如下:

    import datetime
    import json
    import re
    import sys
    import time
    from urllib.parse import urlencode
    
    import requests
    
    sys.path.append('./../')
    from exchange_report.base import ReportBase, logger
    
    
    class SHReport(ReportBase):
        """上交所行情"""
        def __init__(self):
            super(SHReport, self).__init__()
            self.url = 'http://yunhq.sse.com.cn:32041//v1/sh1/list/exchange/equity?'
            self.headers = {
                'Accept': '*/*',
                'Accept-Encoding': 'gzip, deflate',
                'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8',
                'Cache-Control': 'no-cache',
                'Connection': 'keep-alive',
                'Cookie': 'yfx_c_g_u_id_10000042=_ck20020212032112531630665331275; seecookie=%u5149%u4E91%u79D1%u6280%2C%u5149%u4E91%u79D1%u6280%20%u878D%u8D44%u878D%u5238%2C%u878D%u8D44%u878D%u5238%2C688466; VISITED_MENU=%5B%228307%22%2C%228451%22%2C%228312%22%2C%228814%22%2C%228815%22%2C%229807%22%2C%229808%22%2C%228817%22%2C%228431%22%2C%228619%22%2C%228454%22%5D; yfx_f_l_v_t_10000042=f_t_1580616201243__r_t_1589359605854__v_t_1589359759134__r_c_18',
                'Host': 'yunhq.sse.com.cn:32041',
                'Pragma': 'no-cache',
                'Referer': 'http://www.sse.com.cn/market/price/report/',
                'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36',
            }
            self.sub_type_map = {
                "ASH": "主板A股",
                "BSH": "主板B股",
                "KSH": "科创板",
            }
            self.table_name = 'see_dailyquote'
            self.fields = ['SecuCode', 'InnerCode', 'SecuAbbr', 'TradingDay', 'Open', 'High', 'Low',
                           'Last', 'PrevClose', 'ChgRate', 'Volume', 'Amount', 'RiseFall', 'AmpRate', 'CPXXSubType']
    
        def get_params(self, begin):
            _timestamp = int(time.time()*1000)
            data = {
                'callback': 'jQuery1124010159023820477953_1589359759776',
                'select': 'code,name,open,high,low,last,prev_close,chg_rate,volume,amount,tradephase,change,amp_rate,cpxxsubtype,cpxxprodusta',
                'order': '',
                'begin': begin,
                'end': begin + 25,
                "_": _timestamp,    # 当前的一个时间戳
            }
            param = urlencode(data)
            return param
    
        def _create_table(self):
            sql = '''
            CREATE TABLE IF NOT EXISTS `{}` (
              `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'ID',
              `SecuCode` varchar(10) DEFAULT NULL COMMENT '证券代码',
              `InnerCode` int(11) NOT NULL COMMENT '证券内部编码', 
              `SecuAbbr` varchar(100) DEFAULT NULL COMMENT '证券简称',
              `TradingDay` datetime NOT NULL COMMENT '交易日',
              `Open` decimal(10,4) DEFAULT NULL COMMENT '今开盘(元)',
              `High` decimal(10,4) DEFAULT NULL COMMENT '最高价(元)',
              `Low` decimal(10,4) DEFAULT NULL COMMENT '最低价(元)',
              `Last` decimal(10,4) DEFAULT NULL COMMENT '最新价(元)',
              `PrevClose` decimal(10,4) DEFAULT NULL COMMENT '前收价(元)',
              `ChgRate` decimal(10,4) DEFAULT NULL COMMENT '涨跌幅(%)',
              `Volume` decimal(20,0) DEFAULT NULL COMMENT '成交量(股)',
              `Amount` decimal(19,4) DEFAULT NULL COMMENT '成交金额(元)',
              `RiseFall` decimal(10,4) DEFAULT NULL COMMENT '涨跌',
              `AmpRate` decimal(10,4) DEFAULT NULL COMMENT '振幅',
              `CPXXSubType` varchar(20) DEFAULT NULL COMMENT '版块类型',
              `CREATETIMEJZ` datetime DEFAULT CURRENT_TIMESTAMP,
              `UPDATETIMEJZ` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, 
               UNIQUE KEY `IX_QT_DailyQuote` (`InnerCode`,`TradingDay`),
               UNIQUE KEY `PK_QT_DailyQuote` (`ID`),
               KEY `IX_QT_DailyQuote_TradingDay` (`TradingDay`)
               ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='交易所行情';
            '''.format(self.table_name)
            client = self._init_pool(self.spider_cfg)
            client.insert(sql)
            client.dispose()
    
        def select_count(self):
            """获取数据库中当前的插入信息"""
            client = self._init_pool(self.spider_cfg)
            _today = datetime.datetime.combine(datetime.datetime.today(), datetime.time.min)
            sql = '''
            select count(*) as total from {} where TradingDay = '{}'; 
            '''.format(self.table_name, _today)
            ret = client.select_one(sql).get("total")
            msg = "上交所 {} 入库 {} 条 ".format(_today, ret)
            return msg
    
        def start(self):
            self._create_table()
            begin = 0
            while True:
                url = self.url+self.get_params(begin)
                logger.info(url)
                resp = requests.get(url, headers=self.headers)
                if resp.status_code == 200:
                    ret = resp.text
                    ret = re.findall("jQuery\d{22}_\d{13}\((.*)\)", ret)[0]
                    py_datas = json.loads(ret)
                    _date = py_datas.get("date")
                    _time = py_datas.get("time")
                    trade_day = datetime.datetime.strptime(str(_date), "%Y%m%d")
    
                    _total = py_datas.get("total")
                    _list = py_datas.get("list")
                    # code,name,open,high,low,last,prev_close,chg_rate,volume,amount,tradephase,
                    # change,amp_rate,cpxxsubtype,cpxxprodusta
                    if not _list:
                        # 没有数据的时候 _list 的结果为空
                        break
    
                    client = self._init_pool(self.spider_cfg)
                    for one in _list:
                        item = dict()
                        (item['SecuCode'],     # 证券代码 code
                         item['SecuAbbr'],     # 证券简称 name
                         item['Open'],         # 开盘 open
                         item['High'],         # 最高 high
                         item['Low'],          # 最低 low
                         item['Last'],         # 最新 last
                         item['PrevClose'],    # 前收 prev_close
                         item['ChgRate'],      # 涨跌幅 chg_rate(%)
                         item['Volume'],       # 成交量(股) volume, 网页上显示的是 手, 1 手等于 100 股
                         item['Amount'],       # 成交额(元) amount, 网页上是万元
                         item['TradePhase'],   # tradephase
                         item['RiseFall'],      # 涨跌 change --> FIX change 是 mysql 关键字
                         item['AmpRate'],      # 振幅 amp_rate
                         item['CPXXSubType'],
                         item['CPXXProdusta']
                         ) = one
    
                        # 将类型版块进行转换
                        item['CPXXSubType'] = self.sub_type_map.get(item['CPXXSubType'])
                        # TODO 获取聚源让内部编码这一步会拖慢速度
                        inner_code = self.get_inner_code(item['SecuCode'])
                        if not inner_code:
                            raise Exception("No InnerCode.")
                        item['InnerCode'] = inner_code
                        item['TradingDay'] = str(trade_day)
    
                        # 去掉不需要的字段
                        item.pop('CPXXProdusta')
                        item.pop('TradePhase')
                        # print(item)
                        self._save(client, item, self.table_name, self.fields)
    
                    client.dispose()
                else:
                    raise
                begin += 25  # 每页获取 25 个
    
    
    if __name__ == "__main__":
    
        SHReport().start()
    

    深交所行情

    深交所行情有两种获取形式:一种是通过直接解析页面的形式;另外一种是下载文件,再去解析文件。

    我这次采用了第二种获取形式。

    对于 xlsx 文件的解析,我们可以用到 xlrd 这个库。下载文件可用 urlretrieve 库。详细的用法不再这里赘述。

    主体代码部分如下:

    import datetime
    import os
    import random
    import urllib
    from urllib.request import urlretrieve
    
    import xlrd
    
    from exchange_report.base import ReportBase, logger
    
    
    class SZReport(ReportBase):
        """深交所行情爬虫"""
        def __init__(self):
            super(SZReport, self).__init__()
            self.fields = ['TradingDay', 'SecuCode', 'InnerCode', 'SecuAbbr', 'PrevClose', 'Close',
                           'RiseFall', 'Amount', 'PERatio']
            self.table_name = 'szse_dailyquote'
            self.base_url = 'http://www.szse.cn/api/report/ShowReport?SHOWTYPE=xlsx&CATALOGID=1815_stock&TABKEY=tab1&txtBeginDate={}&txtEndDate={}&radioClass=00%2C20%2C30&txtSite=all&random={}'
            self._today = datetime.datetime.combine(datetime.datetime.today(), datetime.time.min)
            self.check_day = self._today - datetime.timedelta(days=1)
    
        def _create_table(self):
            sql = '''
            CREATE TABLE IF NOT EXISTS `{}` (
              `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'ID',
              `SecuCode` varchar(10) DEFAULT NULL COMMENT '证券代码',
              `InnerCode` int(11) NOT NULL COMMENT '证券内部编码',  
              `SecuAbbr` varchar(100) DEFAULT NULL COMMENT '证券简称',
              `TradingDay` datetime NOT NULL COMMENT '交易日',
              `PrevClose` decimal(10,4) DEFAULT NULL COMMENT '前收价(元)',
              `Close` decimal(10,4) DEFAULT NULL COMMENT '今收(元)',
              `Amount` decimal(19,4) DEFAULT NULL COMMENT '成交金额(元)',
              `RiseFall` decimal(10,4) DEFAULT NULL COMMENT '涨跌',
              `PERatio` decimal(10,4) DEFAULT NULL COMMENT '市盈率',
              `CREATETIMEJZ` datetime DEFAULT CURRENT_TIMESTAMP,
              `UPDATETIMEJZ` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, 
               UNIQUE KEY `IX_QT_DailyQuote` (`InnerCode`,`TradingDay`),
               UNIQUE KEY `PK_QT_DailyQuote` (`ID`),
               KEY `IX_QT_DailyQuote_TradingDay` (`TradingDay`)
               ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='交易所行情';
            '''.format(self.table_name)
            client = self._init_pool(self.spider_cfg)
            client.insert(sql)
            client.dispose()
    
        def load_xlsx(self, dt: datetime.datetime):
            """
            下载某一天的明细文件
            :param dt: eg.20200506
            :return:
            """
            dt = dt.strftime("%Y-%m-%d")
            url = self.base_url.format(dt, dt, random.random())
            dirname, filename = os.path.split(os.path.abspath(__file__))
            file_path = os.path.join(dirname, "./data_dir/{}.xlsx".format(dt))
            try:
                urlretrieve(url, file_path, self.callbackfunc)
            except urllib.error.HTTPError:
                logger.warning("不存在这一天的数据{}".format(dt))
            except TimeoutError:
                logger.warning("超时 {} ".format(dt))
            except Exception as e:
                logger.warning("下载失败 : {}".format(e))
                raise Exception
            else:
                return file_path
    
        def start(self):
            self._create_table()
    
            # 在当天收盘前只能拿到前一天的数据
            self.load_xlsx(self.check_day)
            self.read_xlsx(self.check_day)
    
            # 在当天收盘后可以拿到今天最新的数据
            self.load_xlsx(self._today)
            self.read_xlsx(self._today)
    
        def _re_amount(self, amount: str):
            """14,044,875.30 """
            return float(amount.replace(',', ''))
    
        def select_count(self):
            """获取数据库中当前的插入信息"""
            client = self._init_pool(self.spider_cfg)
            sql = '''
            select count(*) as total from {} where TradingDay = '{}'; 
            '''.format(self.table_name, self.check_day)
            ret = client.select_one(sql).get("total")
    
            sql2 = '''
            select count(*) as total from {} where TradingDay = '{}';  
            '''.format(self.table_name, self._today)
            ret2 = client.select_one(sql2).get("total")
    
            msg = "深交所 {} 入库 {} 条 ; {} 入库 {} 条".format(self.check_day, ret, self._today, ret2)
            return msg
    
        def read_xlsx(self, dt: datetime.datetime):
            dt = dt.strftime("%Y-%m-%d")
            dirname, filename = os.path.split(os.path.abspath(__file__))
            file_path = os.path.join(dirname, "./data_dir/{}.xlsx".format(dt))
            wb = xlrd.open_workbook(file_path)
            # sheet_names = wb.sheet_names()
            ws = wb.sheet_by_name('股票行情')
            _rows = ws.nrows
            # print(">>> ", _rows)
            if _rows < 10:
                logger.warning("{} 当天无数据".format(dt))
                return
    
            client = self._init_pool(self.spider_cfg)
            for idx in range(1, _rows):
                _line = ws.row_values(idx)
                # print(_line)
                item = dict()
                item['TradingDay'] = _line[0]    # 交易日期
                secu_code = _line[1]
                item['SecuCode'] = secu_code     # 证券代码
                inner_code = self.get_inner_code(secu_code)
                if not inner_code:
                    raise
                item['InnerCode'] = inner_code
                item['SecuAbbr'] = _line[2]            # 证券简称
                item['PrevClose'] = float(_line[3])    # 前收
                item['Close'] = float(_line[4])        # 今收
                item['RiseFall'] = float(_line[5])     # 升跌(%)
                amount = _line[6]
                item['Amount'] = self._re_amount(amount)      # 成交金额(元)
                item['PERatio'] = self._re_amount(_line[7])   # 市盈率
                self._save(client, item, self.table_name, self.fields)
    
            self.rm_file(file_path)
            client.dispose()
    
    
    if __name__ == "__main__":
        SZReport().start()
    
    

    完整项目代码

    https://github.com/furuiyang0715/JustSimpleSpider/tree/master/exchange_report

    个人QQ:2564493603
    欢迎各位同行交流。

    展开全文
  • 今天带给大家的是从新浪和腾讯爬取股票数据,主要是因为新浪和腾讯的股票数据存储在js中,不需要再重新解析网页源码方便很多。腾讯股票接口、和讯网股票接口、新浪股票接口可以参考...
       
    

    全栈工程师开发手册 (作者:栾鹏)

    python教程全解

    今天带给大家的是从新浪和腾讯爬取股票数据,主要是因为新浪和腾讯的股票数据存储在js中,不需要再重新解析网页源码方便很多。

    腾讯股票接口、和讯网股票接口、新浪股票接口可以参考http://blog.csdn.net/luanpeng825485697/article/details/78442062

    今天我们要实现的股票爬取设计内容丰富,包括:

    1、一个股票数据(沪深)爬虫和选股策略测试框架,数据基于腾讯L和新浪财经。
    2、爬取所有沪深两市股票的行情数据,可选择时分线、日k线、周K线、月K线、股票最新行情。
    3、根据指定的选股策略和指定的日期进行选股测试。
    4、计算选股测试实际结果(包括与沪深300指数比较)。
    5、 保存数据到JSON文件、CSV文件。
    6、支持使用表达式定义选股策略。
    7、支持多线程处理。

    使用环境python3.6

    option.py

    展开全文
  • 【数据】【自动化交易】Python获取中国股市行情和指数 一般来说获取股市行情和指数都是需要付费的,并且这些数据你根本无法导出,比如早年看我妈他们炒股用的大富翁等软件。不过现在可以用诸如腾讯、新浪财经等的...

    【数据】【自动化交易】Python获取中国股市行情和指数

    一般来说获取股市行情和指数都是需要付费的,并且这些数据你根本无法导出,比如早年看我妈他们炒股用的大富翁等软件。不过现在可以用诸如腾讯、新浪财经等的网页数据,不过顶多是1s级的,不过免费。所以思路就是使用爬虫扒取。

    爬虫也不需要你自己写,这里介绍几种易用的数据lib:

    • Tushare: 内核并非爬虫,好像是C++写的,文档比较老了。印象最深的是它有电影票房数据模块。
    • easyquotation: 要求 V P y t h o n ≥ 3.5 V_{Python} \ge 3.5 VPython3.5。单只股票数据感觉比Tushare全,小巧易用。
    • pyalgotrade-cn: 可以和Tushare数据配合回测的lib。

    easyquotation

    前言

    • 获取新浪的免费实时行情
    • 获取腾讯财经的免费实时行情
    • 获取集思路的分级基金数据

    开发环境 : Ubuntu 16.04 / Python 3.5

    requirements

    • Python 3.5+
    • pip install -r requirements.txt

    安装

    pip install easyquotation
    
    升级
    pip install easyquotation --upgrade
    

    用法

    引入:
    import easyquotation
    
    选择行情
    quotation = easyquotation.use('sina') # 新浪 ['sina'] 腾讯 ['tencent', 'qq'] 
    
    获取所有股票行情
    quotation.market_snapshot(prefix=True) # prefix 参数指定返回的行情字典中的股票代码 key 是否带 sz/sh 前缀
    

    return

     {'sh000159': {'name': '国际实业', # 股票名
      'buy': 8.87, # 竞买价
      'sell': 8.88, # 竞卖价
      'now': 8.88, # 现价
      'open': 8.99, # 开盘价
      'close': 8.96, # 昨日收盘价
      'high': 9.15, # 今日最高价
      'low': 8.83, # 今日最低价
      'turnover': 22545048, # 交易股数
      'volume': 202704887.74, # 交易金额
      'ask1': 8.88, # 卖一价
      'ask1_volume': 111900, # 卖一量
      'ask2': 8.89,
      'ask2_volume': 54700,
      'bid1': 8.87, # 买一价
      'bid1_volume': 21800, # 买一量
      ...
      'bid2': 8.86, 
      'bid2_volume': 78400,
      'date': '2016-02-19',
      'time': '14:30:00',
      ...},
      ......
    }
    
    单只股票
    quotation.real('162411') # 支持直接指定前缀,如 'sh000001'
    
    多只股票
    quotation.stocks(['000001', '162411']) 
    
    同时获取指数和行情
    quotation.stocks(['sh000001', 'sz000001'], prefix=True) 
    
    更新股票代码
    easyquotation.update_stock_codes()
    
    选择 jsl 行情
    quotation = easyquotation.use('jsl') # ['jsl']
    
    获取分级基金信息
    quotation.funda() # 参数可选择利率、折价率、交易量、有无下折、是否永续来过滤
    
    quotation.fundb() # 参数如上
    

    对应的分级 A 数据

    return

    { 150020:
    {'abrate': '5:5',
    'calc_info': None,
    'coupon_descr': '+3.0%',
    'coupon_descr_s': '+3.0%',
    'fund_descr': '每年第一个工作日定折,无下折,A不参与上折,净值<1元无定折',
    'funda_amount': 178823,
    'funda_amount_increase': '0',
    'funda_amount_increase_rt': '0.00%',
    'funda_base_est_dis_rt': '2.27%',
    'funda_base_est_dis_rt_t1': '2.27%',
    'funda_base_est_dis_rt_t2': '-0.34%',
    'funda_base_est_dis_rt_tip': '',
    'funda_base_fund_id': '163109',
    'funda_coupon': '5.75',
    'funda_coupon_next': '4.75',
    'funda_current_price': '0.783',
    'funda_discount_rt': '24.75%',
    'funda_id': '150022',
    'funda_increase_rt': '0.00%',
    'funda_index_id': '399001',
    'funda_index_increase_rt': '0.00%',
    'funda_index_name': '深证成指',
    'funda_left_year': '永续',
    'funda_lower_recalc_rt': '1.82%',
    'funda_name': '深成指A',
    'funda_nav_dt': '2015-09-14',
    'funda_profit_rt': '7.74%',
    'funda_profit_rt_next': '6.424%',
    'funda_value': '1.0405',
    'funda_volume': '0.00',
    'fundb_upper_recalc_rt': '244.35%',
    'fundb_upper_recalc_rt_info': '深成指A不参与上折',
    'last_time': '09:18:22',
    'left_recalc_year': '0.30411',
    'lower_recalc_profit_rt': '-',
    'next_recalc_dt': '<span style="font-style:italic">2016-01-04</span>',
    'owned': 0,
    'status_cd': 'N'}>'}}
    
    分级基金套利接口
    quotation.fundarb(jsl_username, jsl_password, avolume=100, bvolume=100, ptype='price')
    
    jsl_username: 集思录用户名
    jsl_password: 集思路登录密码
    avolume: A成交额,单位百万
    bvolume: B成交额,单位百万
    ptype: 溢价计算方式,price=现价,buy=买一,sell=卖一
    

    return

    {
        "165511":{
            'base_fund_id': '165511',                         # 母基金代码
            'AB_price': '现价A/B : 1.008/1.329',
            'a_profit_rt_next': '4.705',
            'a_ratio': 4,
            'abrate': '4:6',
            'apply_fee': '0',
            'apply_fee_tip': '0',
            'apply_sell': '-0.59',
            'asset_ratio': '95%',
            'asset_ratio_last': '99%',
            'asset_ratio_num': '95.00',
            'b_est_val': '1.340',
            'b_gangan': '1.502',
            'b_ratio': 6,
            'base_est_dis_rt': '-0.56%',
            'base_est_val': '1.2073',
            'base_fund_nm': '信诚500',
            'base_lower_recalc_rt': '54.15%',
            'base_nav': '1.1970',
            'base_nav_dt': '2016-04-13',
            'buy1A': '1.007',
            'buy1B': '1.329',
            'buy1_amountA': '0.201',
            'buy1_amountB': '7.123',
            'buy_redeem': '-0.51',
            'calc_info': None,
            'coupon': '0.00%',
            'coupon_next': '4.700',
            'est_dis_rt': '-0.55%',
            'est_time': '2016-04-14 15:10:05',
            'fundA_amount': '6667',
            'fundA_amount_increase': '-51',
            'fundA_amount_increase_rt': '-0.76%',
            'fundA_amount_tip': '2016-04-14 A类总份额6667.000万份,份额增长-0.76%',
            'fundA_id': '150028',
            'fundA_last_dt': '2016-04-14',
            'fundA_last_time': '14:57:02',
            'fundA_nav': '1.0090',
            'fundA_nav_dt': '2016-04-13',
            'fundA_nm': '中证500A',
            'fundA_stock_volume': '28.2446',
            'fundA_stock_volume_tip': 'A类总份额6667.000万份, 成交28万份',
            'fundA_turnover_rt': '0.42%',
            'fundA_volume': '28.46',
            'fundB_amount': 10000.5,
            'fundB_amount_increase': '-76',
            'fundB_amount_tip': '2016-04-14 B类总份额10000万份,份额增长-0.76%',
            'fundB_id': '150029',
            'fundB_last_dt': '2016-04-14',
            'fundB_last_time': '15:00:27',
            'fundB_nav': '1.3220',
            'fundB_nav_dt': '2016-04-13',
            'fundB_nm': '中证500B',
            'fundB_stock_volume': '255.5280',
            'fundB_stock_volume_tip': 'B类总份额10000万份, 成交256万份',
            'fundB_turnover_rt': '2.56%',
            'fundB_volume': '337.24',
            'fund_company_nm': '信诚基金',
            'funda_name_tip': '下期利率:4.70,修正收益率:4.71%',
            'idx_incr_rt': '0.91%',
            'increase_rtA': '-0.10%',
            'increase_rtB': '1.06%',
            'index_id': '399905',
            'index_nm': '中证 500',
            'is_est_val': 1,
            'is_last_nav': 1,
            'lower_recalc_rt': '54.15',
            'maturity_dt': '-',
            'merge_price': '1.2006',
            'min_apply_amount': None,
            'notes': 'http://www.xcfunds.com/funds_2012/165511/fundinfor.shtml\r\n',
            'ownedA': 0,
            'ownedM': 1,
            'priceA': '1.008',
            'priceB': '1.329',
            'real_idx_increase_rt': '0.91',
            'recalc_to': None,
            'redeem_fee': '0.5%',
            'redeem_fee_tip': '0.5%',
            'sell1A': '1.008',
            'sell1B': '1.330',
            'sell1_amountA': '7.132',
            'sell1_amountB': '16.820',
            'status_cd': 'N'
        }
    }
    
    指数ETF查询接口

    TIP : 尚未包含黄金ETF和货币ETF

    集思录ETF源网页

    quotation.etfindex(index_id="", min_volume=0, max_discount=None, min_discount=None)
    

    return

    {
        "510050": {
            "fund_id": "510050",                # 代码
            "fund_nm": "50ETF",                 # 名称
            "price": "2.066",                   # 现价
            "increase_rt": "0.34%",             # 涨幅
            "volume": "71290.96",               # 成交额(万元)
            "index_nm": "上证50",                # 指数
            "pe": "9.038",                      # 指数PE
            "pb": "1.151",                      # 指数PB
            "index_increase_rt": "0.45%",       # 指数涨幅
            "estimate_value": "2.0733",         # 估值
            "fund_nav": "2.0730",               # 净值
            "nav_dt": "2016-03-11",             # 净值日期
            "discount_rt": "-0.34%",            # 溢价率
            "creation_unit": "90",              # 最小申赎单位(万份)
            "amount": "1315800",                # 份额
            "unit_total": "271.84",             # 规模(亿元)
            "index_id": "000016",               # 指数代码
            "last_time": "15:00:00",            # 价格最后时间(未确定)
            "last_est_time": "23:50:02",        # 估值最后时间(未确定)
        }
    }
    
    分数图

    腾讯分时图地址

    
    quotation = easyquotation.use("timekline")
    data = quotation.real(['603828'], prefix=True)
    
    

    return

    {
       'sh603828': {
            'date': '170721',  #日期 
            'time_data': {
                '201707210930': ['0930', '19.42', '61'], # [时间, 当前价, 上一分钟到这一分钟之间的成交数量]
                '201707210931': ['0931', '19.42','122'], 
                '201707210932': ['0932', '19.43', '123'], 
                '201707210933': ['0933', '19.48', '125'], 
                '201707210934': ['0934', '19.49', '133'], 
                '201707210935': ['0935', '19.48', '161'], 
                ...
        }
    }
    
    港股日k线图

    腾讯日k线图

    
    import easyquotation
    quotation  = easyquotation.use("daykline")
    data = quotation.real(['00001','00700'])
    print(data)
    
    

    return

    {
        '00001': [
                    ['2017-10-09', '352.00', '349.00', '353.00', '348.60', '13455864.00'], # [日期, 今开, 今收, 最高, 最低, 成交量 ]
                    ['2017-10-10', '350.80', '351.20', '352.60', '349.80', '10088970.00'],
                   ]
        '00700':[
            
        ]           
         }
    }
    
    腾讯港股时时行情

    腾讯控股时时行情

    
    import easyquotation
    quotation = easyquotation.use("hkquote")
    data = quotation.real(['00001','00700'])
    print(data)
    
    {
        '00001': 
            {
                'stock_code': '00001', # 股票代码
                'lotSize': '"100', # 每手数量
                'name': '长和', # 股票名称
                'price': '97.20', # 股票当前价格
                'lastPrice': '97.75', # 股票昨天收盘价格
                'openPrice': '97.75', # 股票今天开盘价格
                'amount': '1641463.0', # 股票成交量 
                'time': '2017/11/29 15:38:58', # 当前时间
                'high': '98.05', # 当天最高价格
                'low': '97.15' # 当天最低价格
            }, 
        '00700': 
            {
                'stock_code': '00700', 
                'lotSize': '"100',
                'name': '腾讯控股', 
                'price': '413.20', 
                'lastPrice': '419.20', 
                'openPrice': '422.20', 
                'amount': '21351010.0', 
                'time': '2017/11/29 15:39:01', 
                'high': '422.80',
                'low': '412.40'
            }
    }
    

    开发指南

    初始化环境

    进入项目目录后运行

    make init
    

    Tushare

    TuShare是实现对股票/期货等金融数据从数据采集清洗加工数据存储过程的工具,满足金融量化分析师和学习数据分析的人在数据获取方面的需求,它的特点是数据覆盖范围广,接口调用简单,响应快速。

    Dependencies

    Installation

    Upgrade

    pip install tushare --upgrade
    

    Quick Start

    Example 1. 获取个股历史交易数据(包括均线数据):

        import tushare as ts
    
        ts.get_hist_data('600848') #一次性获取全部数据
    

    结果显示:

    日期 ,开盘价, 最高价, 收盘价, 最低价, 成交量, 价格变动 ,涨跌幅,5日均价,10日均价,20日均价,5日均量,10日均量,20日均量,换手率

                     open    high   close     low     volume    p_change  ma5 \
        date                                                                     
        2012-01-11   6.880   7.380   7.060   6.880   14129.96     2.62   7.060   
        2012-01-12   7.050   7.100   6.980   6.900    7895.19    -1.13   7.020   
        2012-01-13   6.950   7.000   6.700   6.690    6611.87    -4.01   6.913   
        2012-01-16   6.680   6.750   6.510   6.480    2941.63    -2.84   6.813   
        2012-01-17   6.660   6.880   6.860   6.460    8642.57     5.38   6.822   
        2012-01-18   7.000   7.300   6.890   6.880   13075.40     0.44   6.788   
        2012-01-19   6.690   6.950   6.890   6.680    6117.32     0.00   6.770   
        2012-01-20   6.870   7.080   7.010   6.870    6813.09     1.74   6.832 
    
                     ma10    ma20      v_ma5     v_ma10     v_ma20     turnover  
        date                                                                  
        2012-01-11   7.060   7.060   14129.96   14129.96   14129.96     0.48  
        2012-01-12   7.020   7.020   11012.58   11012.58   11012.58     0.27  
        2012-01-13   6.913   6.913    9545.67    9545.67    9545.67     0.23  
        2012-01-16   6.813   6.813    7894.66    7894.66    7894.66     0.10  
        2012-01-17   6.822   6.822    8044.24    8044.24    8044.24     0.30  
        2012-01-18   6.833   6.833    7833.33    8882.77    8882.77     0.45  
        2012-01-19   6.841   6.841    7477.76    8487.71    8487.71     0.21  
        2012-01-20   6.863   6.863    7518.00    8278.38    8278.38     0.23  
    

    设定历史数据的时间:

        ts.get_hist_data('600848',start='2015-01-05',end='2015-01-09')
    
                    open    high   close     low    volume   p_change     ma5    ma10 \  
        date                                                                            
        2015-01-05  11.160  11.390  11.260  10.890  46383.57     1.26  11.156  11.212   
        2015-01-06  11.130  11.660  11.610  11.030  59199.93     3.11  11.182  11.155   
        2015-01-07  11.580  11.990  11.920  11.480  86681.38     2.67  11.366  11.251   
        2015-01-08  11.700  11.920  11.670  11.640  56845.71    -2.10  11.516  11.349   
        2015-01-09  11.680  11.710  11.230  11.190  44851.56    -3.77  11.538  11.363   
                    ma20     v_ma5    v_ma10     v_ma20      turnover  
        date                                                        
        2015-01-05  11.198  58648.75  68429.87   97141.81     1.59  
        2015-01-06  11.382  54854.38  63401.05   98686.98     2.03  
        2015-01-07  11.543  55049.74  61628.07  103010.58     2.97  
        2015-01-08  11.647  57268.99  61376.00  105823.50     1.95  
        2015-01-09  11.682  58792.43  60665.93  107924.27     1.54  
    

    复权历史数据
    获取历史复权数据,分为前复权和后复权数据,接口提供股票上市以来所有历史数据,默认为前复权。如果不设定开始和结束日期,则返回近一年的复权数据,从性能上考虑,推荐设定开始日期和结束日期,而且最好不要超过一年以上,获取到数据后,请及时在本地存储。

        ts.get_h_data('002337') #前复权
        ts.get_h_data('002337',autype='hfq') #后复权
        ts.get_h_data('002337',autype=None) #不复权
        ts.get_h_data('002337',start='2015-01-01',end='2015-03-16') #两个日期之间的前复权数据
    

    Example 2. 一次性获取最近一个日交易日所有股票的交易数据(结果显示速度取决于网速)

        ts.get_today_all()
    

    结果显示:

    代码,名称,涨跌幅,现价,开盘价,最高价,最低价,最日收盘价,成交量,换手率

              code    name     changepercent  trade   open   high    low  settlement \  
        0     002738  中矿资源         10.023  19.32  19.32  19.32  19.32       17.56   
        1     300410  正业科技         10.022  25.03  25.03  25.03  25.03       22.75   
        2     002736  国信证券         10.013  16.37  16.37  16.37  16.37       14.88   
        3     300412  迦南科技         10.010  31.54  31.54  31.54  31.54       28.67   
        4     300411  金盾股份         10.007  29.68  29.68  29.68  29.68       26.98   
        5     603636  南威软件         10.006  38.15  38.15  38.15  38.15       34.68   
        6     002664  信质电机         10.004  30.68  29.00  30.68  28.30       27.89   
        7     300367  东方网力         10.004  86.76  78.00  86.76  77.87       78.87   
        8     601299  中国北车         10.000  11.44  11.44  11.44  11.29       10.40   
        9     601880   大连港         10.000   5.72   5.34   5.72   5.22        5.20   
        10    000856  冀东装备         10.000   8.91   8.18   8.91   8.18        8.10  
                volume       turnoverratio  
        0        375100        1.25033  
        1         85800        0.57200  
        2       1058925        0.08824  
        3         69400        0.51791  
        4        252220        1.26110  
        5       1374630        5.49852  
        6       6448748        9.32700  
        7       2025030        6.88669  
        8     433453523        4.28056  
        9     323469835        9.61735  
        10     25768152       19.51090  
    

    Example 3. 获取历史分笔数据

        import tushare as ts
    
        df = ts.get_tick_data('600848',date='2014-01-09')
        df.head(10)
    

    结果显示:

    成交时间、成交价格、价格变动,成交手、成交金额(元),买卖类型

        Out[3]: 
             time       price change  volume  amount  type
        0    15:00:00   6.05     --       8    4840   卖盘
        1    14:59:55   6.05     --      50   30250   卖盘
        2    14:59:35   6.05     --      20   12100   卖盘
        3    14:59:30   6.05  -0.01     165   99825   卖盘
        4    14:59:20   6.06   0.01       4    2424   买盘
        5    14:59:05   6.05  -0.01       2    1210   卖盘
        6    14:58:55   6.06     --       4    2424   买盘
        7    14:58:45   6.06     --       2    1212   买盘
        8    14:58:35   6.06   0.01       2    1212   买盘
        9    14:58:25   6.05  -0.01      20   12100   卖盘
        10   14:58:05   6.06     --       5    3030   买盘
    
    

    Example 4. 获取实时交易数据(Realtime Quotes Data)

        df = ts.get_realtime_quotes('000581') #Single stock symbol
        df[['code','name','price','bid','ask','volume','amount','time']]
    

    结果显示:

    名称、开盘价、昨价、现价、最高、最低、买入价、卖出价、成交量、成交金额…more in docs

           code    name     price  bid    ask    volume   amount        time
        0  000581  威孚高科  31.15  31.14  31.15  8183020  253494991.16  11:30:36 
    

    请求多个股票方法(一次最好不要超过30个):

        ts.get_realtime_quotes(['600848','000980','000981']) #symbols from a list
        ts.get_realtime_quotes(df['code'].tail(10)) #from a Series
    

    pyalgotrade-cn

    这部分参考了这个博客

    策略可视化

    在pyalgotrade中,已经为我们提供了很好用的可视化模块了,plotter。所以,一开始我们先导入模块。

    from pyalgotrade import plotter
    

    把策略的净值图、买卖开仓情况绘制出来其实很简单,把我们的策略实例化之后,传给plotter就可以了。

    myStrategy = MyStrategy(feed, "fd")# 策略实例化
    plt = plotter.StrategyPlotter(myStrategy) # 传入策略
    myStrategy.run()# 运行策略
    myStrategy.info("Final portfolio value: $%.2f" % myStrategy.getResult())
    plt.plot()# 绘制
    

    在这里插入图片描述

    展开全文
  • 编程:获取股票实时行情数据大全

    千次阅读 2015-08-17 01:57:00
    编程:获取股票实时行情数据大全 股票软件都提供自定义公式的功能,但因为常规股票软件都是点播数据,自定义公式对分时行情完全无效,要想更细腻的分析,只能找股票实时行情接口 一般来说,有如下3种版本 ...
  • 股市实时行情分发工具-拿来就用

    千次阅读 2018-06-16 17:32:20
    大师兄股票实时行情客户端v1.0客户端采用JAVA语言开发,支持Linux|Windows多平台运行,主要用来分发股市Level1实时行情。大师兄实时行情工具集成了股市实时行情,五档,财务数据以及板块涨跌幅榜,个股涨跌幅榜,日K...
  • 网页可分为信息提供和业务操作类,信息提供如新闻、股票行情之类的网站。业务操作如网上营业厅、OA之类的。当然,也有很多网站同时具有这两种性质,像微博、豆瓣、淘宝这类网站,既提供信息,也实现某些业务。 普通...
  • 股票软件都提供自定义公式的功能,但因为常规股票软件都是点播数据,自定义公式对分时行情完全无效,要想更细腻的分析,只能找股票实时行情接口 一般来说,有如下3种版本 屌丝版 去门户财经频道采集数据,...
  • 实例描述:通过编写爬虫,将指定日期时段内的全部上市公司股票数据爬取下来,并按照股票代码保存到相应的Excel文件中。 这个案例主要分为两大步骤: (1)要知道上市公司有哪些; (2)根据每一个上市公司的...
  • pytorch_LSTM预测股票行情

    千次阅读 多人点赞 2021-04-29 22:28:58
    7.8 用LSTM预测股票行情 7.8.1 导入数据 # Tushare是一个免费、开源的python财经数据接口包。主要实现对股票等金融数据从数据采集、清洗加工 到 数据存储的过程 import tushare as ts cons = ts.get_apis() #获取...
  • 一款新闻数据采集系统的需求文档,用来采集数据后分析股市行情
  • 量化分析的第一步是取得行情数据,下面归纳了几个提供行情数据的数据源。 万得 官网:http://www.wind.com.cn/ 老牌数据供应商,内容涵盖股票、债券、基金、衍生品、指数、宏观行业。价格较贵,是机构的首选。 ...
  • python 实时获取股票行情脚本 协程版

    千次阅读 2019-10-29 14:37:21
    震惊!一名中年韭菜竟然打算使用python来翻身? 震惊!!某中年韭菜竟然又打算使用Python的协程翻身? 震惊三部曲之终篇,本篇主要优化爬取数据脚本,使用协程加快速度。 1. aiohttp介绍 Async ...
  • 提过股票期货历史和实时行情数据服务  DailyBar *dbar = nullptr;   int  count = 0;  ret = gm_md_get_dailybars("SZSE.000625",  "2001-10-29", "2017-11-14",  &dbar, &count);   for  ( int  ...
  • 市场行情数据

    2016-06-16 17:59:00
    沪深股票行情 200 2 idxd 指数日行情 50 3 factorsOneDay 获取多只股票历史上某一天的因子数据 价格面议 4 optd 期权日行情 50 5 futd 期货日行情(主力以持仓量计算) 100 6 blockd 沪深大宗交易 50 7 ...
  • 主要实现对股票等金融数据从数据采集、清洗加工 到 数据存储的过程,能够为金融分析人员提供快速、整洁、和多样的便于分析的数据,为他们在数据获取方面极大地减轻工作量,使他们更加专注于策略和模型的研究与实现上...
  • 但那些热衷于行情数据分析的人,似乎又不满足于资讯终端提供的功能,因为他们都有自己的分析指标和分析模型,有自己的独门秘籍,迫切需要将资讯数据采集到可以自行处理的地方。 此外,金融资讯终端作为金融机构的...
  • 最近在做大奖章(Wind)采集股票行情实时数据,碰到难点,望高手解惑 当前个股个数在3000左右(除掉停牌的估计在2000多个) wind的代码是 [img=...
  • 在本小节,我为大家介绍一种完全基于开源软件构建的大数据驱动的股票行情分析与预测系统的实现。 通常我们认为在一个充分共享信息的股票市场内,股票价格的短期走向是不可预测的,因此无论是技术分析(Technical ...
  • 查看采集结果 二、详细过程 1.配置数据库信息 建表语句, 以其中部分字段为例: CREATE TABLE `stockmarket` ( `date` varchar(12) NOT NULL DEFAULT '' COMMENT '时间', `stockCode` ...
  • 数据采集 在此量化框架内,全部使用本地化计算。优势: 1.稳定——不会因网络不稳定而导致分析过程中断。 2.快速——本地化运算对于数据的访问速度比在线获取数据快,当机器学习的算法涉及到海量数据做训练集或...
  • A股历史行情数据 API 接口 所有A股历史交易行情数据,全量历史交易 / 包含前后复权数据。 1. 产品功能 支持所有 A 股全量历史(天)交易查询; 包含上交所和深交所所有股票数据; 每日 A 股收盘后更新当日交易数据...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 829
精华内容 331
关键字:

股票行情采集