找回密码
 会员注册
查看: 33|回复: 0

量化入门alltick:Python开源实时股票行情数据源

[复制链接]

2

主题

0

回帖

7

积分

新手上路

积分
7
发表于 2024-9-13 15:40:20 | 显示全部楼层 |阅读模式
目录一、量化交易的核心在于数据二、AllTick介绍三、数据使用方法3.1、请求K线数据3.1、请求最新成交报价数据3.3、获取最新盘口报价数据3.4、通过websockety订阅获取实时股票行情数据一、量化交易的核心在于数据无论是历史交易数据、财务数据还是宏观数据等实时行情报价数据源,都是我们必不可少的资源。我们的目标是从这些数据中提取出有用的信息,以指导我们的投资策略。在寻找数据的过程中,我曾经尝试过多种方法,从自己编写网易股票页面的爬虫、申万行业数据的爬虫,再到同花顺问财的爬虫,甚至使用了聚宽的免费数据API。然而,直到最终,我找到了AllTick,才真正找到了理想中的实时行情数据源解决方案。二、AllTick介绍【官网】https://alltick.co【Github】https://github.com/alltick/realtime-forex-crypto-stock-tick-finance-websocket-api具体能提供哪些数据接口我就不说了,放一张接口说明的图,大多数常用市场实时数据都有,包括K线,最新一口价及股票报价实时推送。三、数据使用方法使用方法超级简单,github上面有真实示例供参数,也可以直接参考下面的代码使用示例3.1、请求K线数据在策略的回测中,我们需要使用各种K线数据。虽然具体的策略不在此讨论范围内,但接下来我将介绍如何直接调用已经封装好的API,使用AllTick提供的FeeQuote。以下是示例代码:importtimeimportrequestsimportjson#Extraheaderstest_headers={'Content-Type':'application/json'}'''github:https://github.com/alltick/realtime-forex-crypto-stock-tick-finance-websocket-api申请免费token:https://alltick.co/register官网:https://alltick.co将如下JSON进行url的encode,复制到http的查询字符串的query字段里{"trace":"python_http_test1","data":{"code":"AAPL.US","kline_type":1,"kline_timestamp_end":0,"query_kline_num":2,"adjust_type":0}}'''test_url1='https://quote.tradeswitcher.com/quote-stock-b-api/kline?token=e945d7d9-9e6e-4721-922a-7251a9d311d0-1678159756806&query=%7B%22trace%22%3A%22python_http_test1%22%2C%22data%22%3A%7B%22code%22%3A%22AAPL.US%22%2C%22kline_type%22%3A1%2C%22kline_timestamp_end%22%3A0%2C%22query_kline_num%22%3A2%2C%22adjust_type%22%3A0%7D%7D'resp1=requests.get(url=test_url1,headers=test_headers)#Decodedtextreturnedbytherequesttext1=resp1.textprint(text1)上面代码中是以查询苹果股票(AAPL.US)分钟K线为例子的,如果想查询其它类型的K线数据则kline_type传入以下值:1-分钟K,2-为5分钟K,3-为15分钟K,4-为30分钟K,5-为小时K,6-为2小时K,7-为4小时K,8-为日K,9-为周K,10-为月K。 3.1、请求最新成交报价数据获取最新成交报价数据对于量化策略的分析和判断至关重要。接下来,我将分享如何直接获取这些数据的代码示例:importtimeimportrequestsimportjson#Extraheaderstest_headers={'Content-Type':'application/json'}'''github:https://github.com/alltick/realtime-forex-crypto-stock-tick-finance-websocket-api申请免费token:https://alltick.co/register官网:https://alltick.co将如下JSON进行url的encode,复制到http的查询字符串的query字段里{"trace":"python_http_test2","data":{"symbol_list":[{"code":"700.HK"},{"code":"UNH.US"},{"code":"600416.SH"}]}}'''test_url1='https://quote.tradeswitcher.com/quote-stock-b-api/trade-tick?token=e945d7d9-9e6e-4721-922a-7251a9d311d0-1678159756806&query=%7B%22trace%22%3A%22python_http_test2%22%2C%22data%22%3A%7B%22symbol_list%22%3A%5B%7B%22code%22%3A%20%22700.HK%22%7D%2C%7B%22code%22%3A%20%22UNH.US%22%7D%2C%7B%22code%22%3A%20%22600416.SH%22%7D%5D%7D%7D'resp1=requests.get(url=test_url1,headers=test_headers)#Decodedtextreturnedbytherequesttext1=resp1.textprint(text1)上面代码中symbol_list是可以同时传入多个的,分别传入不同的市场的产品也是可以的。 3.3、获取最新盘口报价数据importtimeimportrequestsimportjson#Extraheaderstest_headers={'Content-Type':'application/json'}'''github:https://github.com/alltick/realtime-forex-crypto-stock-tick-finance-websocket-api申请免费token:https://alltick.co/register官网:https://alltick.co将如下JSON进行url的encode,复制到http的查询字符串的query字段里{"trace":"python_http_test2","data":{"symbol_list":[{"code":"700.HK"},{"code":"UNH.US"},{"code":"600416.SH"}]}}'''test_url1='https://quote.tradeswitcher.com/quote-stock-b-api/depth-tick?token=e945d7d9-9e6e-4721-922a-7251a9d311d0-1678159756806&query=%7B%22trace%22%3A%22python_http_test2%22%2C%22data%22%3A%7B%22symbol_list%22%3A%5B%7B%22code%22%3A%20%22700.HK%22%7D%2C%7B%22code%22%3A%20%22UNH.US%22%7D%2C%7B%22code%22%3A%20%22600416.SH%22%7D%5D%7D%7D'resp1=requests.get(url=test_url1,headers=test_headers)#Decodedtextreturnedbytherequesttext1=resp1.textprint(text1)上面代码中symbol_list是可以同时传入多个的,分别传入不同的市场的产品也是可以的。3.4、通过websockety订阅获取实时股票行情数据importjsonimportwebsocket#pipinstallwebsocket-client'''github:https://github.com/alltick/realtime-forex-crypto-stock-tick-finance-websocket-api申请免费token:https://alltick.co/register官网:https://alltick.co'''classFeed(object):def__init__(self):self.url='wss://quote.tradeswitcher.com/quote-stock-b-ws-api?token=e945d7d9-9e6e-4721-922a-7251a9d311d0-1678159756806'#这里输入websocket的urlself.ws=Nonedefon_open(self,ws):"""Callbackobjectwhichiscalledatopeningwebsocket.1argumentws:theWebSocketAppobject"""print('AnewWebSocketAppisopened!')#开始订阅(举个例子)sub_param={"cmd_id":22002,"seq_id":123,"trace":"3baaa938-f92c-4a74-a228-fd49d5e2f8bc-1678419657806","data":{"symbol_list":[{"code":"700.HK","depth_level":5,},{"code":"UNH.US","depth_level":5,},{"code":"600416.SH","depth_level":5,}]}}#如果希望长时间运行,除了需要发送订阅之外,还需要修改代码,定时发送心跳,避免连接断开,具体查看接口文档sub_str=json.dumps(sub_param)ws.send(sub_str)print("depthquotearesubscribed!")defon_data(self,ws,string,type,continue_flag):"""4argument.The1stargumentisthisclassobject.The2ndargumentisutf-8stringwhichwegetfromtheserver.The3rdargumentisdatatype.ABNF.OPCODE_TEXTorABNF.OPCODE_BINARYwillbecame.The4thargumentiscontinueflag.If0,thedatacontinue"""defon_message(self,ws,message):"""Callbackobjectwhichiscalledwhenreceiveddata.2argumentsws:theWebSocketAppobject@message:utf-8datareceivedfromtheserver"""#对收到的message进行解析result=eval(message)print(result)defon_error(self,ws,error):"""Callbackobjectwhichiscalledwhengotanerror.2argumentsws:theWebSocketAppobject@error:exceptionobject"""print(error)defon_close(self,ws,close_status_code,close_msg):"""Callbackobjectwhichiscalledwhentheconnectionisclosed.2argumentsws:theWebSocketAppobject@close_status_code@close_msg"""print('Theconnectionisclosed!')defstart(self):self.ws=websocket.WebSocketApp(self.url,on_open=self.on_open,on_message=self.on_message,on_data=self.on_data,on_error=self.on_error,on_close=self.on_close,)self.ws.run_forever()if__name__=="__main__":feed=Feed()feed.start()'运行运行上面的代码中symbol_list代表你要订阅的产品列表,可以同时传入多个市场的多个产品, cmd_id=22002是订阅盘口数据,当cmd_id=22004时订阅的是成交报价,一旦订阅成功,实时股票行情数据就会源源不断的推送过来,并且是及时的。好了。今天的技术干货就分享到这里,感谢大家支持。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 会员注册

本版积分规则

QQ|手机版|心飞设计-版权所有:微度网络信息技术服务中心 ( 鲁ICP备17032091号-12 )|网站地图

GMT+8, 2024-12-26 11:52 , Processed in 2.884651 second(s), 25 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表