引言:为什么你需要一个自动化选股系统?
在股票投资中,选股往往是决定投资成败的关键一步。然而,面对A股市场数千只股票,依靠人工筛选不仅效率低下,而且容易受到情绪和主观偏见的影响。通达信作为国内主流的股票分析软件,提供了强大的策略选股和股票池功能,可以帮助投资者建立自动化的选股系统,从而解决选股难题并进行策略回测。
本文将从零开始,详细讲解如何利用通达信构建自动化选股系统,包括策略编写、股票池管理、回测分析等核心环节,帮助你建立科学、高效的选股体系。
一、通达信选股系统基础概念
1.1 通达信选股系统的核心组件
通达信的选股系统主要由以下几个核心组件构成:
- 公式编辑器:用于编写技术指标和选股策略
- 条件选股:基于单一或复合条件筛选股票
- 策略选股:基于交易策略进行系统性筛选
- 股票池:管理不同策略筛选出的股票集合
- 回测系统:验证策略历史表现的工具
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上穿BHHV(H,N):N日内最高价LLV(L,N):N日内最低价
2.2 编写你的第一个选股策略
让我们从一个经典的均线金叉策略开始:
{ 均线金叉策略 }
MA5 := MA(CLOSE, 5);
MA10 := MA(CLOSE, 10);
CROSS(MA5, MA10); { 5日均线上穿10日均线 }
策略说明:
- 当5日均线上穿10日均线时,产生买入信号
- 这是一个典型的趋势跟踪策略,适合捕捉短期趋势
操作步骤:
- 打开通达信,按
Ctrl+F打开公式编辑器 - 新建技术指标公式,输入上述代码
- 保存为”MA_CROSS”
- 在”条件选股”功能中选择该公式进行选股
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:设置股票池
- 打开”功能” → “策略股票池”
- 新建股票池,命名为”趋势策略池”
- 添加策略节点,选择刚才编写的公式
- 设置执行周期(每日/每周)
- 设置过滤条件(如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:执行回测
- 打开”专家系统” → “专家系统评价”
- 选择策略公式
- 设置回测参数:
- 回测周期:2018-2023年
- 初始资金:10万元
- 交易成本:0.1%(印花税+佣金)
- 滑点:0.1%
- 点击”开始回测”
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遍历 }
优化步骤:
- 确定参数范围(如N1=3-10,N2=15-30)
- 进行网格搜索,测试所有组合
- 选择表现最佳的参数组合
- 验证参数稳定性
避免过拟合:
- 使用样本外数据验证
- 参数不宜过多
- 保持策略逻辑简单
- 在不同市场环境下测试
五、实战案例:构建多因子选股系统
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 回测与实盘差距大
主要原因:
- 未考虑交易成本
- 未考虑滑点
- 未来函数使用
- 过度拟合
解决方案:
{ 更真实的回测设置 }
{ 在回测参数中设置 }
交易成本: 0.15% { 包含印花税和佣金 }
滑点: 0.2%
持仓限制: 单只股票不超过10%
6.3 策略失效问题
应对方法:
- 定期重新评估策略
- 准备备用策略
- 多策略组合
- 严格止损纪律
七、进阶技巧与最佳实践
7.1 自动化执行设置
通达信支持定时自动执行选股:
设置自动任务:
- 打开”功能” → “预警系统” → “条件预警设置”
- 添加策略公式
- 设置执行时间(如每日15:05)
自动更新股票池:
{ 自动更新逻辑 }
{ 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;
迭代流程:
- 每月评估策略表现
- 分析失效原因
- 调整参数或逻辑
- 重新回测验证
- 小资金实盘测试
- 逐步替换旧策略
八、总结与建议
8.1 关键要点回顾
- 基础构建:从简单策略开始,逐步增加复杂度
- 严格回测:充分验证策略有效性,避免过拟合
- 风险控制:设置合理止损,控制单策略资金占比
- 持续优化:定期评估,动态调整
- 组合管理:多策略分散风险
8.2 新手常见误区
- ❌ 追求高胜率(应关注盈亏比)
- ❌ 过度优化参数(导致过拟合)
- ❌ 忽略交易成本(影响实盘收益)
- ❌ 单一策略全仓(风险集中)
- ❌ 频繁更换策略(缺乏耐心)
8.3 进阶学习路径
- 第一阶段:掌握基础公式编写(1-2个月)
- 第二阶段:熟练回测与优化(2-3个月)
- 第三阶段:构建多因子系统(3-6个月)
- 第四阶段:策略组合管理(6-12个月)
- 第五阶段:机器学习与高级量化(长期)
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;
低估值;
希望这份指南能帮助你成功构建自动化选股系统!如有问题,欢迎交流讨论。
