您现在的位置是:首页 >技术教程 >如何利用A股行情数据API建立自己的量化交易事业?网站首页技术教程
如何利用A股行情数据API建立自己的量化交易事业?
什么是量化交易?如何利用股票行情数据建立自己的量化交易事业?
也就是说,让软件按照你设定的策略,进行自动买卖股票,你对level2行情数据和自动交易股票有自己的看法吗?
如果有,恭喜你,即使不写自动化程序,也可以做量化交易,让券商提供限价交易规则。量化交易不仅可以由机构进行,还可以由小人物、普通人和少量入场资金进行。事实上,即使你没有多少钱,如果你的策略真的能赚钱,你每个月都会有稳定的收入。
你想用很少的编程技术为自己创建一个独特的定量交易系统吗?如果是这样,那么你的定量交易会更加自动化,每天花费的时间也会更少,所以你必须阅读下面的文章。
在A股市场中,没有api接口可以直接通过交易所,我们只能通过经纪人给出的第三方交易接口进行程序化交易。一些低净值量化投资者通过web编程技术模拟登录网页,并通过http要求发送委托单。当然,对于个人来说,使用Python,C++,php,go,C#,java,在gitee上有现成的交易框架是最方便的。
事实上,市场数据可以分为两部分:交易市场和订单委托市场。顾名思义,交易市场就是交易数据,包括最新的交易价格、交易量、交易量、最高价格、最低价格等字段信息;订单委托市场是销售报价和委托金额,根据委托价格的不同,可分为一档、五档、十档等市场;一般来说,交易市场和订单委托市场的结合形成了TAQ市场,也就是数据行情分析。
在详细说明之前,还需要区分tick数据和快照数据。严格来说,tick数据是完全记录市场上所有信息的数据,比如一笔交易或者增加一个新的订单,即记录市场上每vent的数据,也就是最精细最完整的数据.
十档快照数据实际上是tick数据切片后的统计数据。换句话说,如果市场信息在时间维度上被视为数据流,那么快照数据就是在一定频率下切割数据流,即时间段上的统计数据,而tick数据就是数据流本身。因此,tick数据更准确,快照数据的精度因时间频率的不同而不同。然而,在中国,tick数据的名称在一定程度上与快照数据混淆了。例如,在下面的文章中,level据的名称在某种程度上是3秒频率的快照数据,但有些人称之为tick数据,这是严格不准确的
# 推送股票十档行情行情数据
def stock_quote_record_stream():
StreamResult = Stub.NewStockQuoteRecordStream(entity_pb2.Void())
# 用For循环就可以不断消费数据
for Result in StreamResult:
print(Result)
if __name__ == '__main__':
# 可以使用多线程并发接收推送数据
ThreadOne = threading.Thread(target=tick_record_stream)
ThreadTwo = threading.Thread(target=order_record_stream)
ThreadThree = threading.Thread(target=order_queue_record_stream)
ThreadFour = threading.Thread(target=stock_quote_record_stream)
# 多进程并发接收推送数据
# ProcessOne = Process(target=tick_record_stream)
# ProcessTwo = Process(target=order_record_stream)
# ProcessThree = Process(target=order_queue_record_stream)
# ProcessFour = Process(target=stock_quote_record_stream)
# 这设置为随主线程退出子线程,避免产生孤儿或僵尸线程
ThreadOne.daemon = True
ThreadTwo.daemon = True
ThreadThree.daemon = True
ThreadFour.daemon = True
# ProcessOne.daemon = True
# ProcessTwo.daemon = True
# ProcessThree.daemon = True
# ProcessFour.daemon = True
# 有一点值得注意一下,假如订阅的股票相对活跃,推送的数据就不会有休眠的状态出现,因为Python的GIL锁,所以用多线程接收推送效率不显著,这个时候可以考虑用多进程来接收推送
ThreadOne.start()
ThreadTwo.start()
ThreadThree.start()
ThreadFour.start()
# ProcessOne.start()
# ProcessTwo.start()
# ProcessThree.start()
# ProcessFour.start()
ThreadOne.join()
ThreadTwo.join()
ThreadThree.join()
ThreadFour.join()
# ProcessOne.join()
# ProcessTwo.join()
# ProcessThree.join()
# ProcessFour.join()