:网格层健康检测与波段加仓计划——三个启发式)
“股小仙系列第三篇。前两篇解决了每笔仓位从哪来、赚了多少”这一篇回答更难的问题这套策略现在还健康吗要不要加仓三段真实代码三个启发式规则——每一条都是从亏钱教训里长出来的。代码不到 150 行但每行规则背后都有一个为什么不用更聪明的算法的决定。一、可卖判定把现在能卖什么变成查表匹配引擎跑完剩下的买入池就是当前持仓。但持仓不等于可卖——A股 T1 之外还有策略自身的可卖门槛forposinbuy_positions:ifpos[remaining]0:continuepd_valround(current_price-pos[price],4)min_diff0.0ifpos[buy_qty]500else0.10# 与匹配引擎同一条规则ifpd_valmin_diff:item[potential_profit]round(pd_val*pos[remaining],2)sellable.append(item)else:item[shortfall]round(min_diff-pd_val,4)# 距离可卖还差多少unsellable.append(item)两个设计点min_diff 与匹配引擎共用同一常量语义小单 0、大单 0.10——什么样的卖出算合规必须全系统一个口径否则可卖清单和收益统计会打架不可卖仓位输出的不是布尔值而是shortfall距离达标差几分钱——这个字段把还不能卖变成了还差 0.07 元盯着盘口时信息量完全不同。注意这里的 T1 其实在上游就处理了匹配引擎的时间序约束保证今天的买入永远不会被今天的卖出消耗所以走到这一步的买入池天然不含当日新买的可消耗份额。约束前置下游就不需要重复判断——这是分层设计的红利。二、网格层健康一个闲置天数启发式网格策略小单自动低买高卖最怕的不是亏钱是悄无声息地停摆——行情横盘或单边下跌时网格长时间没有成交资金躺在低层不动。等你发现怎么一个月没动静往往已经错过调仓窗口。检测规则朴素到不好意思叫算法intervals[(dates[i1]-dates[i]).daysforiinrange(len(dates)-1)...]avg_intervalsum(intervals)/len(intervals)# 历史上平均多久成交一笔小单idle_days(now-dates[-1]).days# 距上一笔小单买入过了几天needs_supplementavg_interval0andidle_daysavg_interval*2闲置超过历史平均间隔的两倍 → 提示人工补单。为什么是两倍不是三倍没有理论依据是校准出来的一倍太吵正常波动就会触发三倍太钝真停摆两周才报警。两倍在两年实盘数据上误报和漏报的平衡点最好。为什么检测的是小单买入而不是小单卖出因为网格停摆的直接表现是下层买不进来价格没跌到触发位或该触发却没触发资金耗尽。买入侧的静默比卖出侧更早暴露问题。边界处理也值得一看小单记录不足两笔时返回无法判断间隔而不是硬算——启发式规则最忌讳在数据不足时假装有结论。三、波段加仓计划分位评分 降本测算大单波段层的加仓决策比网格复杂网格有机械规则波段要判断现在这个位置值不值得下手。实现上分三步3.1 价格分位ifhigh_52w0andlow_52w0:price_percentile(current_price-low_52w)/(high_52w-low_52w)*100else:# 回退用自己历史成交价的 min/max当前价在 52 周区间里处于百分之几的位置。优先用 52 周高低点拿不到时回退到自己的成交记录区间——回退口径精度差很多自己的成交范围通常远窄于 52 周所以代码里把当前用的是哪个口径打到 stderr分析工具必须让人知道自己的数据质量。3.2 分位 → 离散评分75%→-2高位55~75%→-1偏高45~55%→0中位25~45%→1偏低25%→2低位把连续分位压成五档离散分。为什么离散化因为下游的加仓条件用的是组合判断浮亏 低分位才建议离散档位让规则可解释、可回测——低于 25% 分位加仓是人能记住并执行的规则percentile23.7% 时加仓不是。3.3 降本测算每档建议都算摊薄多少ifcurrent_priceavg_costandprice_percentile55:forpct_offin[0.01,0.02,0.03]:# 当前价下方 1%/2%/3% 三档挂单位buy_pricecurrent_price*(1-pct_off)qty500new_cost(weighted_costbuy_price*qty)/(total_remainingqty)suggestions.append({price:...,cost_reduction:new_cost-avg_cost,...})三档建议各带一个cost_reduction这笔加仓能把持仓均价拉低几分钱。把要不要买翻译成买完均价变多少决策信息就完整了——深套 15% 时看到加 500 股只降本 0.3 分和降本 3 分是两种完全不同的决定。warning 清单是最后一道闸深套浮亏 10%提示小量试探、高分位提示不加仓、现价高于均价直接判非时机。三个条件里最后一条最反直觉但最重要——波段加仓的前提是摊低成本现价高于均价时加仓是抬成本这种数学上显然、心态上常犯的错误交给代码拦截。四、这一篇的方法论三个模块共享同一个设计哲学把感觉翻译成可执行的数字。感觉翻译后“网格好像停了”闲置天数 平均间隔 × 2“现在位置不高”分位 55% 且低于均价“补一点仓吧”下方 1/2/3% 各挂 500 股降本分别为 X以及一条诚实原则贯穿始终数据不足时输出无法判断而不是硬算小单不足两笔、无 52 周数据的两个分支。启发式系统的可信度恰恰建立在它知道自己什么时候不可靠。系列导航篇一数据底座——券商流水的字段清洗与入库篇二买卖匹配引擎——两轮匹配、贪心排序与幂等键的坑篇三本篇网格层健康检测与波段加仓计划篇四用真实流水回测网格参数排期中