量化投资数据库者是如何获取实时行情数据的呢

1.新浪股票API&br&2.雪球API
1.新浪股票API 2.雪球API
&img src=&/v2-cce10d50a0e7862bdc81f_b.jpg& data-rawwidth=&1619& data-rawheight=&1080& class=&origin_image zh-lightbox-thumb& width=&1619& data-original=&/v2-cce10d50a0e7862bdc81f_r.jpg&&&p&首发于我的博客 &a href=&/?target=https%3A//ipreacher.github.io& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&The North&i class=&icon-external&&&/i&&/a&。&/p&&p&GitHub 里老早之前就 Star 了 &a href=&/?target=https%3A///felixglow/Stock& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&felixglow/Stock&i class=&icon-external&&&/i&&/a& 这个项目,原作者 &a href=&/?target=https%3A///felixglow& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&felixglow&i class=&icon-external&&&/i&&/a&。昨天晚上又想起这个来,于是今儿早上就拿出来看——我对其中相当多的部分都不熟悉,有些还是第一次了解。在这里将我的理解记录下来,其中的错谬之处,还望各位大神指正。&/p&&br&&br&&h2&&b&实现效果&/b&&/h2&&img src=&/v2-3aef6ac10b17b918766c_b.png& data-rawwidth=&1364& data-rawheight=&956& class=&origin_image zh-lightbox-thumb& width=&1364& data-original=&/v2-3aef6ac10b17b918766c_r.png&&&br&&br&&h1&&b&实现思路&/b&&/h1&&p&在 &a href=&/?target=https%3A///felixglow/Stock/blob/master/README.md& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&README&i class=&icon-external&&&/i&&/a&,作者这样写道:&/p&&blockquote&&p&通过调用新浪股票API,实时查询股票价格&br&支持查询多支股票,通过threading多线程同时查询结果&br&通过Queue实现线程池&br&requests请求接口&br&optparse实现命令行参数处理&/p&&/blockquote&&p&这就是这个项目的主要思路——爬取新浪股票 API 来获取数据,通过 threading 实现多线程以达到同时查询多支股票的目的,最后用 optparse 实现命令行参数的处理。&/p&&br&&br&&h1&&b&具体解析&/b&&/h1&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&__author__ = 'felix'
# 原作者为 felix
import requests
# requests 用于爬取新浪股票 API
import time
import sys
# sys 用于在解释器中交互
import threading
# threading 用于多线程处理
from Queue import Queue
# Queue 是有关队列的库
from optparse import OptionParser
# OptionParser 用于在命令行中添加选项
class Worker(threading.Thread):
# 创建类 Work,多线程获取
def __init__(self, work_queue, result_queue):
# 写入必须绑定的强制属性 self, work_queue, result_queue
# __init__ 方法的第一个参数一定是 self,用于表示创建的实例本身
# 其中,实例是根据类来创建的
# 在 __init__ 方法内部,可将各种属性绑定到 self,因为 self 指向创建的实例本身
threading.Thread.__init__(self)
self.work_queue = work_queue
self.result_queue = result_queue
self.start()
def run(self):
# 增加一个新方法 run
while True:
func, arg, code_index = self.work_queue.get()
# 获取 func, arg, code_index
res = func(arg, code_index)
self.result_queue.put(res)
if self.result_queue.full():
res = sorted([self.result_queue.get() for i in range(self.result_queue.qsize())], key=lambda s: s[0], reverse=True)
# sorted() 是用于排序的方法,返回副本,原始输入不变
# Queue.get() 用于获取队列
# Queue.qsize() 返回队列大小
# key=lambda s: s[0]:关键词为 lambda s: s[0]
# lambda s: s[0]:匿名函数,返回第一个元素
# reverse=True:降序排列
res.insert(0, ('0', u'名称
# list.insert() 用于将指定对象插入列表的指定位置
print '***** start *****'
for obj in res:
print obj[1]
print '***** end *****\n'
self.work_queue.task_done()
# 在完成一项工作后,Queue.task_done() 会向任务已经完成的队列发送一个信号
class Stock(object):
# 股票实时价格获取
def __init__(self, code, thread_num):
self.code = code
self.work_queue = Queue()
self.threads = []
self.__init_thread_poll(thread_num)
def __init_thread_poll(self, thread_num):
self.params = self.code.split(',')
# parmas 会向函数传入一个字典
self.params.extend(['s_sh000001', 's_sz399001'])
# 默认获取沪指、深指
# extend(): 扩展,与 append() 的区别为,extend() 加入的元素是分别单个加入的
self.result_queue = Queue(maxsize=len(self.params[::-1]))
for i in range(thread_num):
self.threads.append(Worker(self.work_queue, self.result_queue))
def __add_work(self, stock_code, code_index):
self.work_queue.put((self.value_get, stock_code, code_index))
# self.value_get 涉及到下面的装饰器
def del_params(self):
for obj in self.params:
self.__add_work(obj, self.params.index(obj))
def wait_all_complete(self):
for thread in self.threads:
if thread.isAlive():
# 判断线程是否是激活的
# 从调用 start() 方法启动线程,到 run() 方法执行完毕或者遇到未处理异常而中断,这段时间内线程是激活的
thread.join()
# join() 的作用是阻塞进程直到线程执行完毕
# 依次检查线程池中的线程是否接触,没有结束就阻塞线程直到线程结束
# 如果结束则跳转执行下一个线程的 join() 函数
@classmethod
# 装饰器,返回函数的高阶函数
def value_get(cls, code, code_index):
slice_num, value_num = 21, 3
name, now = u'——无——', u'
——无——'
if code in ['s_sh000001', 's_sz399001']:
slice_num = 23
value_num = 1
r = requests.get(&/list=%s& % (code,))
# 爬取新浪股票 API
res = r.text.split(',')
if len(res) & 1:
name, now = r.text.split(',')[0][slice_num:], r.text.split(',')[value_num]
return code_index, name + ' ' + now
if __name__ == '__main__':
# 该脚本用于直接运行,而不能被 import
parser = OptionParser(description=&Query the stock's value.&, usage=&%prog [-c] [-s] [-t]&, version=&%prog 1.0&)
# 生成命令行说明
# %prog 将会以当前程序名的字符串来代替
parser.add_option('-c', '--stock-code', dest='codes',
help=&the stock's code that you want to query.&)
# 使用 add_option() 来定义命令行参数,即加入选项
# dest 是储存的变量
parser.add_option('-s', '--sleep-time', dest='sleep_time', default=6, type=&int&,
help='How long does it take to check one more time.')
parser.add_option('-t', '--thread-num', dest='thread_num', default=3, type='int',
help=&thread num.&)
options, args = parser.parse_args(args=sys.argv[1:])
# 设置好命令行后,用 parse_args() 来解析命令行
assert options.codes, &Please enter the stock code!&
# 是否输入股票代码
if filter(lambda s: s[:-6] not in ('sh', 'sz', 's_sh', 's_sz'), options.codes.split(',')):
# 股票代码输入是否正确
raise ValueError
stock = Stock(options.codes, options.thread_num)
while True:
stock.del_params()
time.sleep(options.sleep_time)
# sleep() 用于使程序休眠
&/code&&/pre&&/div&&br&&h1&&b&我的想法&/b&&/h1&&p&从学习 Python 到现在也已经是不短的时间了,但最近觉得自己原地踏步了好久,一直没什么长进,于是想看一看真正有使用价值的代码是什么样子的。上面这部分内容,与其说是 &em&具体解析&/em&,还不如说是做了所有的注释工作,但对于我这样已经了解 Python 的基本语法和较为初级并常用的第三方库的学习者来说,这样一个不到百行的项目,应该是比较合适的练手材料。对这个项目中所用到的方法和库,有些我只是了解,有些甚至以前还没有听说过,因而过一遍代码思路和细节部分,是比较值得的。&/p&&br&&br&&h1&&b&记录&/b&&/h1&&p&截止到东八区 2016 年 12 月 19 日 14:46 ,这个项目一共有 4 个 Watch,37 个 Star 和 37 个 Fork。&br&最后再次感谢原作者 felix。&/p&
首发于我的博客 。GitHub 里老早之前就 Star 了
这个项目,原作者 。昨天晚上又想起这个来,于是今儿早上就拿出来看——我对其中相当多的部分都不熟悉,有些还是第一次了解。在这里将我的理解记录下来,其中的错谬之处,…
&img src=&/v2-dc338ab3ddfe_b.png& data-rawwidth=&900& data-rawheight=&500& class=&origin_image zh-lightbox-thumb& width=&900& data-original=&/v2-dc338ab3ddfe_r.png&&&p&&a href=&/?target=https%3A///%3Ff%3Dzhzl%26m%3D& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&JoinQuant聚宽&i class=&icon-external&&&/i&&/a&量化交易平台,现推出股票融资融券功能。作为国内率先支持融资融券的量化交易平台,我们支持在策略中进行融资(加杠杆)和融券(做空)。&/p&&p&您可以通过海量历史数据进行回测,用数据验证融资融券的策略究竟如何。带融资融券的策略一样可以建立模拟交易,自动连接实时行情,模拟撮合成交,真正检验策略,杜绝未来函数、过拟合等问题。&/p&&ul&&li&&strong&想要在策略中加杠杆,干一票大的?&/strong&&br&&/li&&li&&strong&想要在策略中做空头,换个姿势赚钱?&/strong&&br&&/li&&li&&strong&可是这样的策略靠不靠谱呢?&/strong&&br&&/li&&li&&strong&现在,来聚宽一测便知~&/strong&&/li&&/ul&&p&咦~还没宣传,就有用户发现新功能,小试牛刀的策略收益也不错~可以点击&a href=&/?target=https%3A///post/5665%3Ff%3Dzhzl%26m%3D& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&《融资功能初体验》&i class=&icon-external&&&/i&&/a&查看宽友分享的源码并参与讨论哦~&/p&&img src=&/v2-a733ff7b68_b.png& data-rawwidth=&838& data-rawheight=&454& class=&origin_image zh-lightbox-thumb& width=&838& data-original=&/v2-a733ff7b68_r.png&&&p&&strong&功能速览:&/strong&&br&&/p&&p&【新增 融资融券专用API】&/p&&p&初始化融资融券账户&/p&&p&设置融资利率&/p&&p&设置融资保证金比率&/p&&p&设置融券利率&/p&&p&设置融券保证金比率&/p&&p&margincash_open - 融资买入&/p&&p&margincash_close - 卖券还款&/p&&p&margincash_direct_refund - 直接还款&/p&&p&marginsec_open - 融券卖出&/p&&p&marginsec_close - 买券还券&/p&&p&marginsec_direct_refund - 直接还券&/p&&p&get_margincash_stocks - 获取当天融资标的列表&/p&&p&get_marginsec_stocks - 获取当天融券标的列表&/p&&p&jqdata.get_mtss - 获取融资融券信息&/p&&p&&a href=&/?target=https%3A///api%23%25E8%259E%258D%25E8%25B5%%259E%258D%25E5%%25E4%25B8%%api%3Ff%3Dzhzl%26m%3D& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&以上内容均有API使用示例,可点击链接了解详情&i class=&icon-external&&&/i&&/a&&/p&&img src=&/v2-fafe9347dbe8d05_b.png& data-rawwidth=&1420& data-rawheight=&765& class=&origin_image zh-lightbox-thumb& width=&1420& data-original=&/v2-fafe9347dbe8d05_r.png&&&p&【新增 还券细则】&/p&&p&T+1, 当日融的券当日不能还&/p&&p&还券时要扣除利息&/p&&p&直接还券时, 可以使用当日买入的券还(不受T+1限制), 且优先使用当日买入的券还&/p&&p&【新增 SubPortfolio属性】&/p&&p&total_liability: 总负债, 等于融资负债、融券负债、利息总负债的总和&/p&&p&net_value: 净资产, 等于总资产减去总负债&/p&&p&cash_liability: 融资负债&/p&&p&sec_liability: 融券负债&/p&&p&interest: 利息总负债&/p&&p&maintenance_margin_rate: 维持担保比例&/p&&p&available_margin: 融资融券可用保证金&/p&&p&long_positions, 存入融资股票信息,一个 dict, key是股票代码, value是Position对象 &/p&&p&short_positions, 存入融券股票信息,一个 dict, key是股票代码, value是Position对象&/p&&p&【Demo示例】&/p&&p&可以点击&a href=&/?target=https%3A///post/5844%3Ff%3Dwx& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&原文链接&i class=&icon-external&&&/i&&/a&查看官方分享的Demo策略示例(示例源码可直接clone并调试)&/p&&p&&img src=&/v2-fa5d61db1a318fc9578084fdb54a16cc_b.png& data-rawwidth=&907& data-rawheight=&139& class=&origin_image zh-lightbox-thumb& width=&907& data-original=&/v2-fa5d61db1a318fc9578084fdb54a16cc_r.png&&欢迎到JoinQuant社区查看&a href=&/?target=https%3A///post/5844%3Ff%3Dzhzl%26m%3D& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&融资融券功能介绍及Demo示例&i class=&icon-external&&&/i&&/a&&/p&
量化交易平台,现推出股票融资融券功能。作为国内率先支持融资融券的量化交易平台,我们支持在策略中进行融资(加杠杆)和融券(做空)。您可以通过海量历史数据进行回测,用数据验证融资融券的策略究竟如何。带融资融券的策略一样可以建立模…
&a href=&///?target=http%3A//tushare.org/classifying.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&TuShare -财经数据接口包&i class=&icon-external&&&/i&&/a&&p&用Python有库, 用WebApi也可以调用&/p&&p&很方便&/p&
用Python有库, 用WebApi也可以调用很方便
历史成交数据(CSV):&br&&br&&a href=&///?target=http%3A//quotes./service/chddata.html%3Fcode%3Dstart%3Dend%3D& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&quotes./se&/span&&span class=&invisible&&rvice/chddata.html?code=0601398&start=&end=&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&
历史成交数据(CSV):
已有帐号?
无法登录?
社交帐号登录
18899 人关注
799 条内容
5654 人关注
1748 条内容
184 条内容
11090 人关注
1374 条内容
413 人关注
335 条内容}

我要回帖

更多关于 大数据 量化投资 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信