如何在通达信中编写剔除ST股的每日涨停数量指标?常见问题包括:如何识别并过滤ST股票、如何统计当日涨停个股数量、如何将逻辑封装为可复用指标公式。用户常遇到的问题是无法正确筛选非ST股或在数据源中未排除ST标识,导致统计结果偏差。此外,部分用户对通达信函数如`STKNAME`、`DYNAINFO`等使用不熟悉,影响编写效率。解决方法是通过条件判断语句结合股票名称或代码特征进行过滤,并利用集合函数统计符合条件的个股数量。
1条回答 默认 最新
猴子哈哈 2025-10-21 23:33关注一、通达信中剔除ST股的每日涨停数量指标编写详解
在股票量化分析过程中,统计每日涨停个股数量是一项常见需求。但在实际操作中,由于未正确过滤ST(特别处理)类股票,常导致数据偏差。本文将从基础逻辑到高级封装逐步讲解如何在通达信中实现该功能。
1. 识别并过滤ST股票
ST股票通常以“ST”或“*ST”开头,可以通过函数`STKNAME`获取股票简称进行判断:
ST_FILTER := IF(LEFT(STKNAME, 2) = 'ST' OR LEFT(STKNAME, 3) = '*ST', 0, 1);上述公式表示:若股票名称前两个字符是“ST”或前三个为“*ST”,则返回0(即不参与统计),否则返回1(保留)。
2. 判断涨停条件
涨停通常定义为收盘价等于当日涨停价,可通过以下方式计算:
ZT_PRICE := REF(CLOSE, 1) * 1.1; { 前一日收盘价乘以1.1 } ZT_FLAG := CLOSE >= ZT_PRICE; { 收盘价是否大于等于涨停价 }需要注意的是,在某些情况下需使用`DYNAINFO(4)`来获取最新卖一价,避免因收盘价滞后产生误判。
3. 统计符合条件的个股数量
使用集合函数`COUNT`对满足非ST且涨停的条件进行统计:
ZT_COUNT := COUNT(ZT_FLAG AND ST_FILTER, DATE);此语句表示统计当天满足涨停且非ST的股票数量。
4. 将逻辑封装为可复用指标公式
完整公式如下:
ZT_COUNT_INDICATOR := ( ST_FILTER := IF(LEFT(STKNAME, 2) = 'ST' OR LEFT(STKNAME, 3) = '*ST', 0, 1), ZT_PRICE := REF(CLOSE, 1) * 1.1, ZT_FLAG := CLOSE >= ZT_PRICE, COUNT(ZT_FLAG AND ST_FILTER, DATE) );将该公式保存为自定义指标后,可在不同图表中重复调用,提升开发效率。
5. 常见问题与解决方案
- 问题1:无法准确识别ST股票?
解决方案:确保使用`STKNAME`函数,并结合字符串匹配逻辑。 - 问题2:涨停价格计算错误?
解决方案:考虑停牌、涨跌幅限制变化等情况,使用`DYNAINFO(4)`辅助判断。 - 问题3:统计结果出现重复或遗漏?
解决方案:检查日期字段是否一致,确保使用`DATE`作为分组依据。
6. 总结与扩展思路
通过上述步骤,我们完成了从ST识别、涨停判断到最终统计的全过程封装。对于进阶用户,可进一步引入板块分类、市场行情状态等维度,构建更复杂的涨停监控系统。
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报- 问题1:无法准确识别ST股票?