在量化交易领域,个人投资者相较于机构投资者而言,最大的优势在于其灵活性。交易市场遵循着固有规律,即不可能让所有人都实现盈利,这就决定了交易策略必然具有私有属性。
从事量化交易,首先要掌握数据分析与数据获取的能力,同时需要借助工具来辅助完成量化分析和交易操作。实际上,专业量化机构所开展的工作核心也在于此。
数据是量化交易的基础,是程序运行的输入来源,因此获取数据是首要任务 。在拥有数据之后,就要进行策略的构建、验证,并将其应用到实际交易当中。
概括来说,进行程序化交易,行情数据的接入以及交易接口是不可或缺的要素。策略的可靠性并非取决于外部因素,而是源于自身的研究。
在策略研究和分析方面,如果缺乏计算机的辅助,仅依靠人眼每天浏览 3000 只股票,很难在脑海中形成对市场的准确认知,甚至极有可能因个人偏好和固有认知而产生错误判断。毕竟,人脑在处理海量数据时的学习效率远不及计算机。所以,掌握一些简单的编程技能是十分必要的。
在股票数据获取方面,虽然获取股票数据并非难事,但确保数据的准确度和实时性却颇具挑战。获取股票历史数据时,通常可以从普通财经网站抓取,这些网站一般都会开放 K 线数据。然而,对于日内交易而言,K 线回归数据的粒度较粗,无法满足对某一日内交易明细的需求,比如开盘后的走势、午盘后的走势等细节信息难以获取。所以,若要从事量化交易,从当下开始积累数据至关重要,因为每一份数据都具有不可重复性。
在进行回归回测时,历史数据的质量起着关键作用,level2 数据是较为理想的选择,它能做到事无巨细地记录各类信息,便于后续根据需求决定模型回测的粒度。交易本质上是逐笔进行的,市场中的每一次撮合交易都会留下记录。level2 行情数据提供了最为详尽的交易信息,相比于 level1 每隔几秒的快照报价,更适合用于量化投资分析。
level2行情接入示例
!python3
-- coding:utf-8 --
import time
import websocket
import zlib
发送订阅
def on_open(ws):
ws.send("all=lv2_600519,lv1_000001")
接收推送
def on_message(ws, message, type, flag):
# 命令返回文本消息
if type == websocket.ABNF.OPCODE_TEXT:
print(time.strftime('%H:%M:%S', time.localtime(time.time())), "Text响应:", message)
# 行情推送压缩二进制消息,在此解压缩
if type == websocket.ABNF.OPCODE_BINARY:
rb = zlib.decompress(message, -zlib.MAX_WBITS)
print(time.strftime('%H:%M:%S', time.localtime(time.time())), "Binary响应:", rb.decode("utf-8"))
def on_error(ws, error):
print(error)
def on_close(ws, code, msg):
print(time.strftime('%H:%M:%S', time.localtime(time.time())), "连接已断开")
wsUrl = "ws://<服务器地址>/?token=
ws = websocket.WebSocketApp(wsUrl,
on_open=on_open,
on_data=on_message,
on_error=on_error,
on_close=on_close)
ws.run_forever()
参考链接:https://jvquant.com/wiki/行情/SDK/Python接入WebSocket行情.html
原文链接:https://blog.csdn.net/weixin_62178457/article/details/145145984