从零开始搭量化系统:那些教程里没说的脏活累活

去年某天,我对着满屏的均线交叉策略发呆——回测曲线完美得能上教科书的策略,实盘跑了两周亏掉20%。后来才发现,问题出在基础行情延迟了整整5秒。这才明白过来:市面上教人写策略的教程,和真正能跑通的交易系统之间,隔着一整条马里亚纳海沟。

今天要聊的,不是怎么设计策略(这种内容已经烂大街了),而是实实在在的工程难题:‌如何用最低成本把策略变成真金白银的交易‌。别担心,不需要租机房搞专线,咱们普通散户也能玩得转。

行情这道坎,迈不过去都是虚的

刚开始做自动化交易时,我试遍了各种数据源。Tushare的15分钟延迟让人抓狂,某券商API动不动就断连。最坑的是有次做ETF套利,因为拿不到Level2的十档行情,挂单价直接插针,单笔损失够买十台MacBook Pro。

后来发现用WebSocket直连行情源,这里给个接入多市场行情的代码骨架(:

#!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()

重点说三个实战经验:

别在本地跑!放云服务器才能保证低延迟(实测上海区域能控制在5ms内)
多市场订阅用逗号分隔就行,港美股记得处理时区转换
Level2数据每秒20+次推送,Python脚本处理起来也完全没压力。


自动下单,到底有多反人类

第一次尝试程序化交易时,我在某券商页面蹲了俩小时找API文档,结果客服告诉我个人用户不开放。后来发现用HTTP协议反而更简单,这里分享个委托模板:

# 买入的核心逻辑就一行
下单地址 = f"http://交易服务器/buy?token=xxx&code=600519&price={实时价*0.995}&volume=100"

别小看这个朴素的操作:

价格挂单建议浮动±0.5%,防止卡在盘口
返回的order_id一定要存库,撤单全靠它
持仓查询接口记得设置止损线,我吃过闪崩没止损的亏


数据库才是隐藏BOSS

策略失效的罪魁祸首,往往是数据质量。试过用网络爬虫抓财务数据,结果字段对不齐,日期格式都能出三种花样。直到用了语义化查询,才体会到什么叫降维打击:

# 找最近三个月北向资金连续增持的半导体个股
query = "半导体,北向持仓比例连续增长3月,市盈率<行业均值"

这种查询模式最爽的是:

不需要记字段名(比如"main_net_inflow"这种反人类命名)
支持自然语言时间段("过去30天"自动转时间戳)
能直接导出DataFrame,和backtrader无缝对接


别把量化想复杂了

现在的我,策略逻辑、行情解析、交易风控三个进程跑在2核4G的服务器上,日均交易成本不到2块钱(包括行情费)。全套系统搭下来,最贵的投入其实是券商的交易手续费...

说到底,量化交易的技术门槛早就不在算法层面。真正的信息差在于:

怎么找到稳定的行情源(延迟低于1秒)
如何绕过券商的各种限制(比如自动撤单频率)
哪里能获取结构化的基本面数据(特别是A股)

这些脏活累活,与其自己折腾,不如找个靠谱的基础服务。毕竟咱们的时间,应该花在策略逻辑上,而不是和API文档斗智斗勇。

原文链接:https://zhuanlan.zhihu.com/p/31296882820

你可能感兴趣的:(python,量化,行情接口,level2)