引言:为什么你需要一个自动化选股系统?

在股票投资中,选股往往是决定投资成败的关键一步。然而,面对A股市场数千只股票,依靠人工筛选不仅效率低下,而且容易受到情绪和主观偏见的影响。通达信作为国内主流的股票分析软件,提供了强大的策略选股和股票池功能,可以帮助投资者建立自动化的选股系统,从而解决选股难题并进行策略回测。

本文将从零开始,详细讲解如何利用通达信构建自动化选股系统,包括策略编写、股票池管理、回测分析等核心环节,帮助你建立科学、高效的选股体系。

一、通达信选股系统基础概念

1.1 通达信选股系统的核心组件

通达信的选股系统主要由以下几个核心组件构成:

  1. 公式编辑器:用于编写技术指标和选股策略
  2. 条件选股:基于单一或复合条件筛选股票
  3. 策略选股:基于交易策略进行系统性筛选
  4. 股票池:管理不同策略筛选出的股票集合
  5. 回测系统:验证策略历史表现的工具

1.2 通达信公式语言基础

通达信使用自己的公式语言(TongDaXin Formula Language),语法类似C语言但更简单。以下是基础语法要素:

{ 这是注释 }
变量定义:MA5 := MA(CLOSE, 5);  { 计算5日均线 }
条件判断:IF MA5 > MA10 THEN BUY;  { 如果5日线大于10日线则买入 }

常用函数包括:

  • MA(C,N):计算C的N日简单移动平均
  • REF(X,N):引用X的N日前值
  • CROSS(A,B):判断A上穿B
  • HHV(H,N):N日内最高价
  • LLV(L,N):N日内最低价

2.2 编写你的第一个选股策略

让我们从一个经典的均线金叉策略开始:

{ 均线金叉策略 }
MA5 := MA(CLOSE, 5);
MA10 := MA(CLOSE, 10);
CROSS(MA5, MA10);  { 5日均线上穿10日均线 }

策略说明

  • 当5日均线上穿10日均线时,产生买入信号
  • 这是一个典型的趋势跟踪策略,适合捕捉短期趋势

操作步骤

  1. 打开通达信,按Ctrl+F打开公式编辑器
  2. 新建技术指标公式,输入上述代码
  3. 保存为”MA_CROSS”
  4. 在”条件选股”功能中选择该公式进行选股

2.3 策略优化与参数调整

基础策略往往需要优化才能提高效果。让我们添加更多条件:

{ 优化的均线金叉策略 }
MA5 := MA(CLOSE, 5);
MA10 := MA(CLOSE, 10);
VOL5 := MA(VOL, 5);  { 5日均量 }

{ 条件组合 }
CROSS(MA5, MA10)    { 金叉条件 }
AND VOL > VOL5       { 成交量大于5日均量 }
AND CLOSE > REF(CLOSE, 1) * 0.98;  { 当日跌幅不超过2% }

优化思路

  • 添加成交量条件,避免假突破
  • 限制跌幅,避免追高
  • 可以根据回测结果继续添加其他条件

三、构建策略股票池

3.1 什么是策略股票池?

策略股票池是通达信的高级功能,可以:

  • 自动定期执行选股策略
  • 按策略分类管理股票
  • 跟踪策略表现
  • 实现多策略组合管理

3.2 创建策略股票池的步骤

步骤1:编写策略公式

{ 突破策略 }
HH20 := HHV(H, 20);  { 20日最高价 }
突破 := C > HH20 AND V > MA(V, 5) * 1.5;  { 放量突破20日高点 }

{ 回调策略 }
MA20 := MA(C, 20);
回调 := C < MA20 AND C > REF(C, 1) * 0.97;  { 回调至20日线附近 }

{ 组合策略 }
买入信号 := 突破 OR 回调;

步骤2:设置股票池

  1. 打开”功能” → “策略股票池”
  2. 新建股票池,命名为”趋势策略池”
  3. 添加策略节点,选择刚才编写的公式
  4. 设置执行周期(每日/每周)
  5. 设置过滤条件(如ST剔除、停牌剔除)

步骤3:配置执行计划

{ 执行计划示例 }
执行时间: 每日15:00后  { 收盘后执行 }
更新频率: 每日
持仓上限: 20只  { 池中股票数量限制 }
剔除条件: 
  - 连续3日无成交
  - 被实施风险警示
  - 停牌

3.3 多策略股票池管理

高级用法是创建多个策略池,实现策略组合:

策略池名称 策略类型 选股周期 风险等级
激进策略池 动量突破 短期(5-20日)
稳健策略池 趋势跟踪 中期(20-60日)
价值策略池 均值回归 长期(60-120日)

每个策略池独立运行,最终通过组合规则生成最终投资组合。

四、策略回测系统详解

4.1 回测的重要性

回测是验证策略有效性的关键步骤,可以:

  • 评估策略历史表现
  • 发现策略缺陷
  • 优化参数设置
  • 避免过拟合

4.2 通达信回测系统使用

通达信的”专家系统”功能可以进行回测:

步骤1:编写完整交易策略

{ 完整交易策略示例 }
{ 买入条件 }
MA5 := MA(CLOSE, 5);
MA20 := MA(CLOSE, 20);
买入条件 := CROSS(MA5, MA20) AND VOL > MA(VOL, 5) * 1.2;

{ 卖出条件 }
卖出条件 := CROSS(MA20, MA5) OR (C < MA20 * 0.95);  { 止损 }

{ 交易规则 }
BUYCONDITION := 买入条件;
SELLCONDITION := 卖出条件;
BUYPRICE := CLOSE;  { 收盘价买入 }
SELLPRICE := CLOSE; { 收盘价卖出 }

步骤2:执行回测

  1. 打开”专家系统” → “专家系统评价”
  2. 选择策略公式
  3. 设置回测参数:
    • 回测周期:2018-2023年
    • 初始资金:10万元
    • 交易成本:0.1%(印花税+佣金)
    • 滑点:0.1%
  4. 点击”开始回测”

4.3 回测结果分析

回测完成后,重点关注以下指标:

核心绩效指标

{ 通达信回测报告指标 }
总收益率: 年化收益率
最大回撤: 资产曲线最大下跌幅度
胜率: 盈利交易次数/总交易次数
盈亏比: 平均盈利/平均亏损
夏普比率: (收益率-无风险利率)/波动率

案例分析: 假设回测结果显示:

  • 年化收益率:25%
  • 最大回撤:-18%
  • 胜率:42%
  • 盈亏比:2.5

解读

  • 收益率不错,但最大回撤较大
  • 胜率偏低但盈亏比较高,说明是”亏小赚大”型策略
  • 需要优化止损条件以控制回撤

4.4 回测优化方法

参数优化

{ 参数优化示例 }
{ 原始参数 }
MA5 := MA(C, 5);
MA20 := MA(C, 20);

{ 优化后参数 }
MA1 := MA(C, N1);  { N1从3-10遍历 }
MA2 := MA(C, N2);  { N2从15-30遍历 }

优化步骤

  1. 确定参数范围(如N1=3-10,N2=15-30)
  2. 进行网格搜索,测试所有组合
  3. 选择表现最佳的参数组合
  4. 验证参数稳定性

避免过拟合

  • 使用样本外数据验证
  • 参数不宜过多
  • 保持策略逻辑简单
  • 在不同市场环境下测试

五、实战案例:构建多因子选股系统

5.1 多因子策略框架

多因子策略是机构常用的方法,通过多个因子综合打分选股:

{ 多因子选股系统 }
{ 因子1:动量因子 }
MOMENTUM := (C - REF(C, 20)) / REF(C, 20);

{ 因子2:价值因子 }
PE := DYNAINFO(39);  { 静态市盈率 }
PB := DYNAINFO(40);  { 市净率 }

{ 因子3:质量因子 }
ROE := FINANCE(29) / FINANCE(30);  { 净资产收益率 }
GROSS_MARGIN := (FINANCE(20) - FINANCE(21)) / FINANCE(20);  { 毛利率 }

{ 因子4:技术因子 }
VOL_RATIO := VOL / MA(VOL, 20);  { 量比 }
RSI := RSI(14);  { 相对强弱指标 }

{ 因子标准化与打分 }
{ 1. 对每个因子进行标准化处理 }
{ 2. 按因子权重计算总分 }
{ 3. 选择得分最高的股票 }

{ 简化版打分 }
SCORE := 0.3 * RANK(MOMENTUM) 
       + 0.2 * (1 - RANK(PE))  { 低PE加分 }
       + 0.2 * RANK(ROE) 
       + 0.15 * RANK(VOL_RATIO)
       + 0.15 * (100 - RANK(ABS(RSI - 50)));  { RSI接近50加分 }

{ 选股条件 }
SCORE > 80;  { 选择综合得分前20% }

5.2 因子有效性检验

在实际应用前,需要检验因子有效性:

{ 因子IC值计算 }
{ IC = 因子值与未来收益率的相关系数 }
{ 通达信中可通过自定义函数或外部工具计算 }

{ 简单检验方法 }
{ 1. 分组测试:按因子值分组,看各组未来表现 }
{ 2. 回归分析:因子与收益率的回归关系 }
{ 3. 显著性检验:确保结果不是随机产生 }

5.3 实际应用与调整

实战配置建议

  • 初始股票池:全市场A股(剔除ST、停牌、新股)
  • 因子权重:根据市场环境调整(牛市动量权重高,熊市价值权重高)
  • 持仓数量:15-20只分散风险
  • 调仓频率:每月或每季度

动态调整

{ 动态权重调整 }
市场状态 := IF(MA(C, 250) > REF(MA(C, 250), 20), 1, -1);  { 1=牛市, -1=熊市 }

{ 牛市增加动量权重 }
权重_MOMENTUM := IF(市场状态=1, 0.4, 0.2);
权重_PE := IF(市场状态=1, 0.1, 0.3);

六、常见问题与解决方案

6.1 选股结果不理想

问题1:选出的股票太多或太少

  • 解决方案:调整阈值或打分标准
  • 代码示例:
{ 动态阈值 }
COUNT := COUNT(买入条件, 0);  { 满足条件的股票数量 }
阈值 := PERCENTILE(SCORE, 0.2);  { 取前20%分位数 }
最终条件 := SCORE > 阈值;

问题2:选出的股票质量差

  • 检查因子有效性
  • 增加基本面过滤:
{ 基本面过滤 }
基本面良好 := 
  FINANCE(30) > 0  { 净资产为正 }
  AND FINANCE(20) > 0  { 营业收入为正 }
  AND NOT ST_KL  { 非ST }
  AND DYNAINFO(4) > 0;  { 非停牌 }

6.2 回测与实盘差距大

主要原因

  1. 未考虑交易成本
  2. 未考虑滑点
  3. 未来函数使用
  4. 过度拟合

解决方案

{ 更真实的回测设置 }
{ 在回测参数中设置 }
交易成本: 0.15%  { 包含印花税和佣金 }
滑点: 0.2%
持仓限制: 单只股票不超过10%

6.3 策略失效问题

应对方法

  1. 定期重新评估策略
  2. 准备备用策略
  3. 多策略组合
  4. 严格止损纪律

七、进阶技巧与最佳实践

7.1 自动化执行设置

通达信支持定时自动执行选股:

  1. 设置自动任务

    • 打开”功能” → “预警系统” → “条件预警设置”
    • 添加策略公式
    • 设置执行时间(如每日15:05)
  2. 自动更新股票池

{ 自动更新逻辑 }
{ 1. 每日收盘后执行选股 }
{ 2. 更新股票池 }
{ 3. 发送预警通知 }
{ 4. 记录日志 }

7.2 策略组合管理

核心原则

  • 相关性低:不同策略间相关性应低于0.5
  • 风险分散:策略类型覆盖不同市场环境
  • 资金分配:根据夏普比率分配权重

示例组合

策略A(动量突破):40%资金
策略B(均值回归):30%资金
策略C(低波动率):30%资金

7.3 绩效监控与迭代

监控指标

{ 策略健康度监控 }
{ 1. 策略得分衰减 }
{ 2. 胜率变化 }
{ 3. 盈亏比变化 }
{ 4. 最大回撤变化 }

{ 简单监控代码 }
当前胜率 := WIN_RATE;
历史平均胜率 := REF(WIN_RATE, 20);
胜率变化 := (当前胜率 - 历史平均胜率) / 历史平均胜率;

{ 如果胜率下降超过20%,发出警告 }
警告条件 := 胜率变化 < -0.2;

迭代流程

  1. 每月评估策略表现
  2. 分析失效原因
  3. 调整参数或逻辑
  4. 重新回测验证
  5. 小资金实盘测试
  6. 逐步替换旧策略

八、总结与建议

8.1 关键要点回顾

  1. 基础构建:从简单策略开始,逐步增加复杂度
  2. 严格回测:充分验证策略有效性,避免过拟合
  3. 风险控制:设置合理止损,控制单策略资金占比
  4. 持续优化:定期评估,动态调整
  5. 组合管理:多策略分散风险

8.2 新手常见误区

  • ❌ 追求高胜率(应关注盈亏比)
  • ❌ 过度优化参数(导致过拟合)
  • ❌ 忽略交易成本(影响实盘收益)
  • ❌ 单一策略全仓(风险集中)
  • ❌ 频繁更换策略(缺乏耐心)

8.3 进阶学习路径

  1. 第一阶段:掌握基础公式编写(1-2个月)
  2. 第二阶段:熟练回测与优化(2-3个月)
  3. 第三阶段:构建多因子系统(3-6个月)
  4. 第四阶段:策略组合管理(6-12个月)
  5. 第五阶段:机器学习与高级量化(长期)

8.4 最终建议

自动化选股系统是投资工具,不是圣杯。成功的关键在于:

  • 持续学习:市场在变,策略也需要进化
  • 纪律执行:严格按照系统信号操作
  • 风险管理:永远把风险控制放在第一位
  • 心理建设:接受策略的不完美和阶段性失效

通过本文的指导,你应该能够从零开始构建属于自己的自动化选股系统。记住,最好的策略是适合你自己风险偏好和投资目标的策略。开始实践,不断迭代,你将逐步建立起高效的选股体系。


附录:常用通达信选股公式模板

{ 模板1:趋势策略 }
MA5 := MA(C, 5);
MA20 := MA(C, 20);
MA60 := MA(C, 60);
多头排列 := MA5 > MA20 AND MA20 > MA60;
CROSS(MA5, MA20) AND 多头排列;

{ 模板2:突破策略 }
HH := HHV(H, 60);
突破 := C > HH AND V > MA(V, 20) * 1.5;
回调 := C < REF(C, 1) * 0.97;
突破 AND 回调;

{ 模板3:价值策略 }
PE := DYNAINFO(39);
PB := DYNAINFO(40);
ROE := FINANCE(29) / FINANCE(30);
低估值 := PE < 20 AND PB < 3 AND ROE > 15;
低估值;

希望这份指南能帮助你成功构建自动化选股系统!如有问题,欢迎交流讨论。