如何利用炒股中的L2行情数据功能对比,以及用途数据分析。(附代码)
股票L1與L2行情數據對比
由于Level 1 成交數據是3秒刷新一次,期間的所有成交數據是匯總顯示的,而Level 2?的成交數據是主動推送的,毫秒級的變動頻率,因此可看清每一筆成交情況,與Level 1 行情的成交情況差異巨大!
首先,L2是level-2產品,是上海證券交易所推出的實時報價信息收費服務,主要提供在上海證券交易所上市交易的證券產品的實時交易數據。包括各種新數據,如十檔行情、買賣隊列、逐筆交易、委托總額、加權價格等。
使用level-2軟件的投資者可以在開盤時間內隨時看到交易商和散戶投資者買賣股票。L2報價接口是指通過接口功能直接獲取報價數據,利用數據制定股票交易策略。
L2行情接口優點在哪里?
回到正題,L2行情接口有什么優勢?一般來說,L2市場接口實際上是股票量化交易的工具之一。一般投資者最多只能看到10個交易市場,但只有這么少的數據,我們很難做出交易決策。我們必須獲得更多的數據來做出更準確的判斷,L2市場接口可以幫助我們。換句話說,L2數據市場接口是幫助我們更好地完成股票交易的工具。
說了這么多,相信大家對股票L2行情市場接口都有一定的了解。如果我們再深入一點,Level2接口會根據不同的編程方法例如:(C# python示例代碼 數據緩存?量化分析?股票行情接口SDK 股票行情技術支持 接口源代碼等)適用的人也不會一樣。如果你感興趣,以后再詳細解釋。讓我們先消化一下。如果你不明白,你也可以和我談談。
仔細想想你就知道了 ,其實level2說白了就是十檔行情,別人可以看到買5~賣5之間的掛單情況,而你如果買了這個產品,你就能看到買10~賣10之間的掛單。
當然,實際的情況要復雜一些,除了股票還有債券,指數等行情,行情也不是一定3秒一個快照,有些證券行情變化少,記錄數會少一些。這里只是定量的分析。
簡單地說,高頻策略交易不是憑空而來的,需要通過歷史高頻數據進行回測,計算按照這些規則交易是否真的能賺錢。那些能一直賺錢的人是好策略。通過回測數據找到好策略后,就可以編寫軟件,放在之前的高頻策略中進行實盤,但實盤的情況可能和回測結果有很大的不同。
有兩種可能:一種是策略本身有問題,另一種是交易速度不夠快。別人可能有和你一樣的策略,但是別人的網絡和程序更快,即使是0.001毫秒,就可以拿走你的單。
Level2是一個高級數據市場,可以看到更多的交易細節信息。L2的市場也集成在NiceMoney的系統中,這樣人工智能AI會更聰明!Level-2由上海證券交易所和深圳證券交易所共同推出的實時市場信息收費服務。
與普通市場相比evel-1)相比,這個市場具有數據更完整、推送速度更及時的優勢,幫助投資者及時把握盤中主要資金流,做出更準確的投資決策。簡而言之,Level-2最大的作用就是提前看到主力的大單,追漲停板,對于追逐日線跌停非常有用。
L2市場數據非常有用。我們一直被用作交易系統的基本數據。我們有level2數據,里面有一個統計分析工具,可以看到大單小單和主動趨勢。
所以我認為level2行情數據,是值得買的。
以下就是我這邊的L2行情數據代碼示例:
# -*- coding: utf-8 -*-
# 此Demo只是演示接入過程
import grpc
import entity_pb2
import proxy_pb2_grpc
import threading
from multiprocessing import Process
# 代理服務器監聽的地址和端口
ServerConnect = grpc.insecure_channel('localhost:5000')
Stub = proxy_pb2_grpc.ProxyStub(ServerConnect)
# 查詢訂閱
def get_subscription():
????# rep返回code為1代表成功,其余狀態碼可參考接入文檔,data是返回訂閱股票的情況
????Result = Stub.GetSubscription(entity_pb2.Void())
????print(Result)
# 新增訂閱
def add_subscription():
????# 實例ProtoBuf協議的方法
????String = entity_pb2.String()
????# 修改協議的值
????# 2:市場代碼標識(1為上海證券,2為深圳證券)
????# 000002:股票代碼
????# 15:訂閱全部標識(1為逐筆成交,2為逐筆委托,4為委托隊列,8為股票十檔行情,如果想全部訂閱可直接填入15,原理是1+2+4+8,如果想訂閱某幾個行情將幾個行情標識相加即可)
????String.value = '2_000002_15'
????# String.value = '2_000001_15,2_000002_5,2_000003_12,批量訂閱'
????# rep返回code為1代表成功,其余狀態碼可參考接入文檔
????Result = Stub.AddSubscription(String)
????print(Result)
# 取消訂閱
def del_subscription():
????# 實例ProtoBuf協議的方法
????String = entity_pb2.String()
????# 修改協議的值
????# 2:市場代碼標識(1為上海證券,2為深圳證券)
????# 000002:股票代碼
????# 15:取消全部標識(1為逐筆成交,2為逐筆委托,4為委托隊列,8為股票十檔行情,如果想全部取消可直接填入15,原理是1+2+4+8,如果想取消某幾個行情將幾個行情標識相加即可)
????String.value = '2_000002_15'
????# String.value = '2_000001_15,2_000002_5,2_000003_12,批量取消'
????# rep返回code為1代表成功,其余狀態碼可參考接入文檔
????Result = Stub.DelSubscription(String)
????print(Result)
# 推送逐筆成交行情數據
def tick_record_stream():
????StreamResult = Stub.NewTickRecordStream(entity_pb2.Void())
????# 用For循環就可以不斷消費數據
????for Result in StreamResult:
????????print(Result)
# 推送逐筆委托行情數據
def order_record_stream():
????StreamResult = Stub.NewOrderRecordStream(entity_pb2.Void())
????# 用For循環就可以不斷消費數據
????for Result in StreamResult:
????????print(Result)
# 推送委托隊列行情數據
def order_queue_record_stream():
????StreamResult = Stub.NewOrderQueueRecordStream(entity_pb2.Void())
????# 用For循環就可以不斷消費數據
????for Result in StreamResult:
????????print(Result)
# 推送股票十檔行情行情數據
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()
總結
以上是生活随笔為你收集整理的如何利用炒股中的L2行情数据功能对比,以及用途数据分析。(附代码)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: OSChina 周一乱弹 —— 达叔撸猫
- 下一篇: 许晓斌_Maven实战(四)——基于Ma