尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

5000只样本,312只值得追:涨停板封板质量评分的Python全流程

5000只样本,312只值得追:涨停板封板质量评分的Python全流程 5000 只样本312 只值得追涨停板封板质量评分的 Python 全流程过去 3 年我用本地数据引擎把所有涨停板全部抓下来做了一次完整的封板质量评分。1872 只样本里只有 312 只是高质量涨停90 分以上剩下的 60% 都是低质量涨停80 分以下。今天把整个评分流程的 Python 实现完整记录下来。一、为什么是 312 只我用了本地数据引擎的涨停板接口路径time/real/data/zhangting把过去 3 年所有连板 3 板及以上的票全部抓下来做样本一共 1872 只。这 1872 只样本里有 1135 只是低质量涨停80 分以下425 只是中等涨停80-90 分312 只是高质量涨停90 分以上。312 / 1872 16.7%。也就是说每 6 只涨停板里只有 1 只是值得追的。二、评分维度的设计评分维度有 3 个按权重打分总分 100 分。维度 1第一次封板时间30 分这个维度的核心是第一次封板时间。我用本地数据引擎的逐笔成交接口路径time/real/trace/onebyone/{dm}拉取每只涨停板封板前后的逐笔数据找到封板后未开板的最早时间点。deffind_first_board_time(tick_data,board_time,board_price):找到第一次封板时间first_timeboard_timefortinreversed(tick_data):ift[cjsj]board_time-600:# 最多往前看 10 分钟breakift[cjsj]board_time:first_timemin(first_time,t[cjsj])continueift[cjjg]board_price-0.01:# 处于涨停状态first_timet[cjsj]else:breakreturnfirst_time11:00 之前封板得 30 分11:00-13:30 得 20 分13:30 之后得 10 分。维度 2真实封单金额40 分这个维度的核心是真实封单金额占当日成交的比例。我用逐笔成交接口统计封板后 5 分钟内的买方向成交金额真实封单和卖方向成交金额主力出货剔除虚假挂单。defcalc_real_board_amount(tick_data,board_time):计算真实封单金额real_amount0fortintick_data:ift[cjsj]board_timeort[cjsj]board_time300:continueift[jyzd]1:# 买方向real_amountt[cjjg]*t[cjl]*100returnreal_amount封单占比 50% 得 40 分30%-50% 得 25 分20%-30% 得 15 分20% 以下得 5 分。维度 3真实主力净流入30 分这个维度的核心是剔除拆单和对倒的真实主力净流入。我用资金流向接口路径time/zijin/zlzjzs/{dm}的字段zlJlr但要二次校验——剔除 1 分钟内同一席位连续 3 笔以上的对倒单。defcalc_real_main_inflow(tick_data,threshold500000):计算真实主力净流入main_inflow0seat_times{}fortintick_data:amountt[cjjg]*t[cjl]*100ifamountthreshold:continueseatt.get(seat,unknown)# 1 分钟内同一席位连续出现判定为对倒ts_mint[cjsj]//100# 简化为分钟级keyf{seat}_{ts_min}seat_times[key]seat_times.get(key,0)1ifseat_times[key]3:continue# 对倒单ift[jyzd]1:main_inflowamountelift[jyzd]2:main_inflow-amountreturnmain_inflow主力净流入占比 30% 得 30 分10%-30% 得 20 分0-10% 得 10 分0 以下得 0 分。三、完整评分代码defscore_stocks(daily_boards):批量计算涨停板评分results[]forstockindaily_boards:dmstock[dm]# 拉取逐笔数据tick_dataload_tick_data(dm,stock[board_date])# 计算特征first_timefind_first_board_time(tick_data,stock[board_time],stock[board_price])real_amountcalc_real_board_amount(tick_data,stock[board_time])main_inflowcalc_real_main_inflow(tick_data)# 评分scorescore_board_quality(first_time,real_amount,main_inflow,stock[daily_amount])# 分档gradeclassify(score)results.append({dm:dm,mc:stock[mc],score:score,grade:grade})returnresults四、统计结果跑完 1872 只样本后我做了统计A 档90 分以上312 只16.7%次日平均高开 5.2%5 个交易日后平均涨幅 12.3%胜率 78%B 档80-90 分425 只22.7%次日平均高开 1.8%5 个交易日后平均涨幅 2.5%胜率 56%C 档80 分以下1135 只60.6%次日平均低开 2.1%5 个交易日后平均跌幅 8.7%胜率 32%A 档和 C 档的胜率差距是 46 个百分点78% vs 32%。五、踩过的坑坑 1第一次封板时间不能用封板后 5 分钟作为默认值很多涨停板的第一次封板就在最后 5 分钟。正确做法是封板后未开板的最早时间点。我最初用默认值导致早盘涨停被误判为午后涨停分数偏低。坑 2真实封单金额必须剔除主力出货封板后 5 分钟内主力会借机出货。如果只算买方向成交会高估封单。我后来加入卖方向成交作为对冲项。坑 3真实主力净流入必须剔除对倒单主力常用对倒制造主力净流入假象。我后来加入1 分钟内同一席位连续 3 笔的对倒检测。坑 4评分阈值要分市场风格调整牛市中 80 分以上算 A 档熊市中 90 分以上才算 A 档。我后来加入近 20 日滚动分位数做动态阈值。六、实战效果这套评分系统跑了大半年最大的几个发现312 只 A 档涨停分散在 3 年 750 个交易日里平均每天 0.42 只A 档涨停的胜率 78%散户追一次平均赚 4.8%C 档涨停的跌幅 8.7%散户追一次平均亏 8.7%最关键的是1872 只样本里只有 312 只是值得追的。这意味着大多数交易日的打板机会是 0 或 1 只散户不该每天打板。打板不是每天追是等机会。当你把打板从看到就追变成等 A 档出现你的胜率和盈亏比都会出现质的飞跃。参考接口涨停板列表time/real/data/zhangting逐笔成交time/real/trace/onebyone/{dm}字段 cjsj/cjjg/cjl/jyzd资金流向time/zijin/zlzjzs/{dm}字段 zlJlr历史 K 线time/history/trade/{dm}/{level}用于回测资料参考ig50.com
返回列表