尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

DeepSeek证券做市报价与流动性管理:三层衔接与落地实践

DeepSeek证券做市报价与流动性管理:三层衔接与落地实践 简介这份530页的PDF方案围绕DeepSeek大模型在证券做市商报价与流动性管理中的实际应用展开面向量化交易、做市策略研究、金融AI工程化等场景的读者。资源为单个PDF文件压缩包整体约15.77MB文档共52个大章节支持目录跳转和书签大纲显示内容完整、文字图表正常。目前已有96人学习/下载。文档从行业痛点与业务场景拆解入手系统讲解市场微观结构解析、存货风险实时计量模型、智能报价策略设计并覆盖行情数据预处理、交易数据结构化、存货时序特征工程、市场情绪文本向量化、数据标注与增强、模型训练与微调等关键环节同时展开报价体系范式转变、流动性指标体系构建、数据资产梳理、训练目标函数设计等专题。章节划分细致既能按顺序通读理解完整链路也可借助书签快速定位主题帮助读者掌握从原始数据到智能报价决策的AI改造路径减少自行摸索成本。1. DeepSeek 证券做市商报价与流动性管理难的不是模型而是三层衔接一个做市团队最头疼的时刻往往是账面浮盈、库存却在悄悄朝一个方向堆。价差赚得再勤一次逆向波动就能吃掉几周的利润。这套名为 DeepSeek 证券做市商报价与流动性管理的方案虽然铺到 530 页但真正决定成败的只有三层市场微观结构解析把订单簿和成交流变成特征存货实时风险精准计量把库存折算成风险预算智能报价策略把预算变成双边挂单。DeepSeek 的角色是状态分类、事件解读和参数自适应不碰微秒级抢单通道。下面按一线工程路径把三层打通适合做市、量化自营和交易系统团队参考落地。2. 市场微观结构解析把订单簿和成交流变成可计算的特征2.1 做市报价为什么要从微观结构开始K 线是事故现场订单簿才是事故发生时留下的脚印。做市报价的盈亏来自价差而价差里包含三块下单处理成本、存货持有成本、逆向选择成本。前两块靠规则能估最后一块必须从微观结构里读当大单主动砸向买一盘口说明价格大概率继续往下你挂在买一的单被击中后立刻浮亏。所以做市商要先回答三个问题盘口倾斜在哪一边主动买卖压力有多大挂单排队位置值不值得等。这三个问题分别对应深度失衡、订单流失衡和队列位置都是订单簿和逐笔成交能直接算出的量。2.2 从 L2 快照提取微观特征的 Python 实现先给出一段处理 L2 快照的最小代码输入是一次盘口快照输出是后续报价要用的四个特征import pandas as pd def micro_features(snapshot: dict, top: int 10) - dict: bids pd.DataFrame(snapshot[bids], columns[price, qty]) asks pd.DataFrame(snapshot[asks], columns[price, qty]) best_bid float(bids[price].iloc[0]) best_ask float(asks[price].iloc[0]) mid 0.5 * (best_bid best_ask) spread_bps (best_ask - best_bid) / mid * 10000 depth_bid float((bids[qty].head(top) * bids[price].head(top)).sum()) depth_ask float((asks[qty].head(top) * asks[price].head(top)).sum()) depth_imb (depth_bid - depth_ask) / (depth_bid depth_ask 1e-12) return {mid: mid, spread_bps: spread_bps, depth_imb: depth_imb, pressure: (float(asks[qty].head(3).sum()) - float(bids[qty].head(3).sum())) / mid}mid是后续所有报价计算的基准spread_bps把价差换算成基点便于比较不同价位的证券depth_imb用名义金额而非手数算深度失衡避免低价股大量挂单造成假深度pressure取前 3 档卖出挂单减买入挂单再除以中间价正值表示卖压偏大。参数top通常取 5~10 档档位越多对薄盘证券越有意义噪声也越大1e-12只是防除零。2.3 订单流失衡与逐笔成交的处理盘口快照反映挂单意愿推动价格的是主动成交。逐笔成交里每笔都有 aggressor 方向B 为主动买、S 为主动卖按成交量加权合成订单流失衡import pandas as pd def flow_imbalance(ticks: list[dict], window: int 50) - float: df pd.DataFrame(ticks).sort_values(ts) sign df[side].map({B: 1.0, S: -1.0}) return float((sign * df[qty]).rolling(window).sum().iloc[-1])window取 30~100 笔盘口薄的证券放大到 200 笔。实际工程里同一价位经常连续多笔小单这是拆单行为按成交量加权比按笔数统计可靠数据源若不给 aggressor可用 tick rule 近似成交价高于上一笔记为主动买微小行情里误差可接受。逐笔数据量很大建议在接入层先聚合再进特征库不要直接往模型输入里塞原始成交。2.4 三类数据源的频率与对齐取舍数据形态典型频率提取特征主要坑L2 盘口快照100ms~1s价差、深度、压力快照之间盘口变化丢失逐笔成交实时订单流失衡量大、方向字段需清洗1s 聚合特征决策频度滑动均值与分位必须用事件时间对齐实盘决策周期通常在 100ms 到 1s快照和成交流要按事件时间戳对齐不能用接收时间接收延迟抖动会把特征错位。另一个高频踩的坑是特征泄漏计算mid、spread_bps只能用到t时刻之前的数据回测中把当根 K 线收盘价算进特征策略在历史上会表现得异常漂亮。给每个特征打asof_ts回测引擎按 asof 语义做 join是防未来函数最省事的做法。注意特征库的 schema 定下来后不要在回测中途改字段名。很多团队换了个策略就不赚钱的案例最后都查到特征版本不一致上。3. DeepSeek 接入做市决策链路API 调用、本地部署与超时兜底3.1 DeepSeek 的角色定位决策建议不是抢单通道先划清边界任何大模型都不该进微秒级紧耦合路径抢单靠的是确定性规则和硬件。DeepSeek 在这套方案里做低频决策建议每隔 1 到 5 秒把微观结构特征和外部事件丢给它输出市场状态分类、事件影响解读和参数调整建议。常见做法是把提示词、模型调用和工具调用编排成一条可复用的 Harness 管道每个节点定义输入输出 schema实盘和回测共用同一份。团队里也会把这类管道接进研究平台例如用 Codex 或 VS Code 侧的编码助手接 DeepSeek 生成研究代码。所以DeepSeek API 如何调用是这条链路的第一个落地问题。3.2 DeepSeek API 调用的最小可用代码DeepSeek 开放平台提供 OpenAI 兼容接口直接用 openai SDK 接。状态分类是最常见的需求给出最小实现import json from openai import OpenAI client OpenAI(api_keysk-xxx, base_urlhttps://api.deepseek.com) def classify_regime(features: dict) - dict: resp client.chat.completions.create( modeldeepseek-chat, messages[ {role: system, content: 你是做市策略状态分类器regime 只能是 calm/active/stress 之一只输出 JSON。}, {role: user, content: json.dumps(features)}, ], temperature0.1, max_tokens128, response_format{type: json_object}, ) return json.loads(resp.choices[0].message.content)modeldeepseek-chat适合分类和抽取需要带推理链的事件归因时换deepseek-reasoner但延迟更高只放离线链路。temperature0.1是为了让同类输入输出可复现分类任务用默认值会造成参数自适应不可解释max_tokens128足够一个短 JSON同时卡住响应时间response_format强制 JSON 输出省掉手写解析器的兜底。3.3 本地部署 DeepSeek 与超时兜底数据敏感或对 token 成本敏感的团队常见做法是把 DeepSeek 部署到内网用 vLLM 起 OpenAI 兼容服务代码里只需把base_url指向内网地址例如http://10.0.0.8:8000/v1。本地部署的收益是延迟可控、数据不出内网代价是自己管 GPU 显存和推理并发。实盘链路里模型调用必须有硬超时做市决策周期只有一两秒网络抖动一次报价参数就会停在旧值上import asyncio async def safe_classify(features: dict, timeout: float 2.0) - dict: try: result await asyncio.wait_for( asyncio.to_thread(classify_regime, features), timeouttimeout) return sanitize(result) except asyncio.TimeoutError: return {regime: unknown, conviction: 0.0}wait_for给模型调用设硬超时超时返回unknown报价策略只会保守展宽价差不会做激进动作。另一个细节单次请求内不要拼接长历史请求体通常控制在 2k token 以内把过去一小时事件都塞进去很容易触发对话长度上限报错使整条链路中断。用滑动窗口只保留最近 5~10 条关键事件既控 token 又保上下文。sanitize对模型输出做枚举校验regime不在允许集合内一律降级为unknown置信度截断到 [0,1]这个函数放进 Harness 管道当公共节点所有任务复用。3.4 API 与本地部署的选型要点接入方式适用场景延迟特征运维成本API起步验证、研究回测数百毫秒到秒级最低本地 vLLM实盘、数据敏感可控需压测中高起步阶段用 API 跑通提示词和输出 schema离线回测一个月再决定是否迁移本地。实盘至少保留一台备用推理节点主节点不可用时自动切回规则策略。选型关键不是模型参数多少而是把哪类决策交给它状态分类降级后还能保守报价事件归因降级后只是少一份复盘报告这两类任务都适合接入 DeepSeek。4. 存货实时风险精准计量把账面库存折算成风险预算4.1 存货风险的三维拆解做市商赚价差扛库存。账面盈亏只在平仓时兑现风险却全程累积。存货风险至少有三个维度价格风险库存对波动的敞口用波动率和 VaR 度量流动性风险快速减仓要付的冲击成本盘口越薄冲击越大结构风险例如 ETF 做市时成分股停牌或申赎清单变化造成的跟踪偏差。实时计量的要求是每次报价前重算一遍库存方向决定报价偏移库存规模决定价差宽度。4.2 风险计量核心函数与参数口径import numpy as np VAR_HORIZON_YEAR 0.02 # 日内风险期约 5 个小时 VAR_QUANTILE 1.645 # 95% 单尾分位数 def inventory_metrics(pos: float, mid: float, sigma: float, max_pos: float, var_limit: float) - dict: notional pos * mid var_95 abs(notional) * sigma * np.sqrt(VAR_HORIZON_YEAR) * VAR_QUANTILE skew max(-1.0, min(1.0, -pos / max_pos)) return {notional: notional, var_95: var_95, skew: skew, budget_used: var_95 / var_limit}pos为净头寸正数表示净多头sigma用年化波动率盘中建议取实时已实现波动与历史加权的较大者防止低波动期重仓后波动突然放大skew符号要全团队统一多头库存返回负值报价策略据此把保留价向下压促使成交把库存补回来。var_limit由风控给定budget_used超过 1 时停止净增库存。4.3 限额参数表与调参方向参数常见范围含义调参注意max_pos日成交量的 5%~10%净库存上限按成交额标定不按手数var_limit净资产的 2%~5%VaR 预算用历史回撤倒推sigma_scale1.0~1.5盘中波动放大突发事件时临时上调skew_scale0.5~2.0库存偏移强度与最小报价档位配合max_pos用日成交量比例而不用固定手数是因为成交量随行情变动固定手数在缩量期就是超量库存var_limit先用历史数据模拟一个月取亏损序列 95% 分位倒推再用实盘复核。这张表建议做成独立配置文件报价引擎启动时加载调参不碰代码。提示var_limit从净资产的 2% 起步运行两周后再按实际亏损分位校准不要一开始就按理想的成交量比例设。4.4 持仓增量更新与对账风险计量质量取决于持仓口径。盘中用全量查询对账查询间隔内报价一直在偏正确做法是成交回报驱动增量更新再配定时全量对账class PositionTracker: def __init__(self, initial_net: float): self.net initial_net def on_fill(self, side: str, qty: float): self.net qty if side B else -qty def reconcile(self, exchange_net: float): self.net exchange_neton_fill只在收到成交回报后更新挂单量永远不进库存reconcile每 1~5 分钟拉一次交易所净头寸修正漏报和重报。要单独处理除权除息和公司行动导致的持仓口径变化这类事件会让日志累计值跟交易所快照对不上排查时先看字段 source 再看时间戳别一上来怀疑撮合数据。5. 智能报价策略保留价、状态自适应与撤单节流5.1 保留价把存货风险换算成价格偏移报价骨架是围绕保留价挂双边订单。保留价不是中间价而是中间价减去库存偏移后的价位参考 Avellaneda-Stoikov 框架的简化形式库存项是 skew、风险厌恶系数、波动平方和剩余时间的乘积。库存越大、越波动、越临近收盘保留价离中间价越远def quote_levels(mid: float, skew: float, gamma: float, sigma_sq: float, t_left: float, tick: float) - dict: reserve mid - skew * gamma * sigma_sq * t_left half_spread max(0.5 * tick, gamma * sigma_sq * t_left * mid) bid round((reserve - half_spread) / tick) * tick ask round((reserve half_spread) / tick) * tick return {bid: bid, ask: ask, reserve: reserve}gamma是风险厌恶系数越大越不愿持仓报价离中间价越远half_spread下限设成半档0.5 * tick防止低波动时段算出小于一个档位的价差交易所不认半档。标定时固定其他参数用一天逐笔数据扫不同的gamma对比已实现价差和存货周转再选定。t_left用剩余交易时间折算收盘前 30 分钟报价自然展宽不用额外写收盘逻辑。5.2 DeepSeek 状态输出驱动参数自适应智能报价里 DeepSeek 的输出不直接改单而是改一组参数。常见做法是按 regime 映射价差倍率和刷新间隔再用置信度加权REGIME_MAP { calm: {spread_factor: 1.0, update_ms: 800}, active: {spread_factor: 1.3, update_ms: 500}, stress: {spread_factor: 2.2, update_ms: 300}, } def adapt_from_regime(regime: str, conv: float) - dict: base REGIME_MAP.get(regime, REGIME_MAP[calm]) f 1.0 (base[spread_factor] - 1.0) * (0.6 0.4 * conv) return {spread_factor: f, update_ms: base[update_ms]}conv在 [0,1]低置信度时参数被拉回基准值unknown 状态天然走保守分支这正是把模型输出交给sanitize的意义。spread_factor放大半价差update_ms控制报价刷新间隔stress 下价差更宽、刷新更快。典型触发场景见下表regime典型场景报价行为calm无事件、订单流均衡正常双边报价active大单拆单进场、消息冲击适度展宽价差stress盘口深度骤减、单边快速行情大幅展宽并控制净增库存5.3 撤单节流智能报价的最后一公里智能报价真正的敌人不是模型不准而是撤改频率。高频改价会被交易所限频和风控盯上严重时直接限制交易权限。常见做法是全局节流器加批量撤改import time class QuoteThrottle: def __init__(self, min_interval_ms: int): self.min_interval_s min_interval_ms / 1000.0 self.last 0.0 def allow(self) - bool: now time.monotonic() if now - self.last self.min_interval_s: self.last now return True return Falsemin_interval_ms按交易所限频的 50%~60% 设定留出余量allow()返回 False 时保留上一轮报价不撤不挂。关键是把报价到了刷新时刻和允许真正动单分开前者由策略计算后者由节流器裁决。最容易踩的坑是中间价、库存、模型输出三路信号各自触发撤改同一秒内改三次所以节流器必须是汇聚所有触发源之后的全局唯一节点。注意撤改动作也要做节流日志记录每次触发源是模型、价差超限还是库存超限。复盘时查这条日志比查策略代码定位问题快得多。6. 实盘前的回测、仿真验证与 DeepSeek 复盘技巧6.1 用盘口重放代替理想化回测智能报价策略不能用收盘价回测报价要进撮合才有意义。常见做法是把 L2 快照和逐笔成交录成磁带文件按事件时间重放策略挂单在盘口内且排队靠前就按对手价成交在盘口外不成交成交量按盘口比例分配。验证指标看四个报价成交率、存货周转、已实现价差、最大连续亏损。某一天特别赚钱的策略要单独复查那天的成交路径确认利润来自价差而不是某次方向性持仓。6.2 上线验证清单验证项通过标准常见失败原因特征时间戳对齐无未来函数用了接收时间而非事件时间模型调用兜底超时率低于 1%没设 wait_for 硬超时持仓口径对账无差异未处理除权除息与公司行动撤改频率低于交易所限频 60%多路信号各撤各的这四行是上线评审的核心材料每一行都要有监控指标支撑评审时直接看面板不靠人工复核过这个说法收尾。6.3 用 DeepSeek 做每日报价行为复盘实盘跑顺后把每天的报价、成交、库存序列抽样成结构化事件流交给 DeepSeek 归纳当天的持仓变化路径和报价问题。提示词里要求它按时间线输出观察、疑点和建议明确不写结论式评论输出再与人工复盘对照。这类复盘提示词沉淀成模板后接入每日清算流程每天自动生成报价行为审计草稿比人肉翻日志省一半时间。数据先脱敏再送模型脱敏规则放在 Harness 管道最前面和sanitize一样当公共节点维护。本文还有配套的精品资源点击获取
返回列表