从零到一:精通选股公式编辑教程,打造你的专属交易利器

在量化交易和程序化投资日益普及的今天,许多投资者不再满足于被动等待市场机会,而是希望经过编写选股公式来自动筛选出符合特定逻辑的标的。无论是使用通达信、同花顺、大智慧还是Python量化平台,掌握公式编辑逻辑,都能极大提升交易效率。
这篇文章将为你带来一份详尽的选股公式编辑教程,从基础语法到高级逻辑,助你构建属于自己的智能选股系统。
为什么你需要编写选股公式?
手动翻阅几百只股票,逐一分析K线、指标和基本面数据,不仅耗时耗力,还容易受情绪干扰。选股公式价值在于:
1. 效率提升:几秒钟内扫描全市场,筛选出符合复杂条件的股票。
2. 纪律执行:将主观的交易逻辑转化为客观的代码,避免“知行不一”。
3. 策略回测:公式与回测功能结合,可验证策略的历史胜率。
基础语法与常用函数
不同的软件平台语法略有差异,但核心逻辑相似。以下以国内最通用的通达信(TDX)语法为例,介绍基础元素。
基本数据字段
选股公式中,最基础的变量代表股票的历史行情数据:| 字段名称 | 代码示例 | 含义说明 |
|---|---|---|
| 收盘价 | `CLOSE` 或 `C` | 当日收盘价格 |
| 开盘价 | `OPEN` 或 `O` | 当日开盘价格 |
| 最高价 | `HIGH` 或 `H` | 当日最高价格 |
| 最低价 | `LOW` 或 `L` | 当日最低价格 |
| 成交量 | `VOL` | 当日成交数量(手) |
| 成交额 | `AMOUNT` | 当日成交金额(元) |
| 时间 | `DATE` / `TIME` | 交易日期或时间 |
常用技术指标函数
大多数选股公式是基于经典技术指标的变种:移动平均线:`MA(CLOSE, N)` —— 计算N日收盘价均线。
指数平滑移动平均:`EMA(CLOSE, N)` —— 对近期数据赋予更大权重。
随机指标:`KDJ(N, M1, M2)`
相对强弱指标:`RSI(N)`
布林带:`BOLL(N, P)` —— 返回中轨、上轨、下轨
逻辑判断与运算符
比较运算符:`>` (大于), `<` (小于), `>=` (大于等于), `<=` (小于等于), `=` (等于), `<>` (不等于)。 逻辑运算符:`AND` (且), `OR` (或), `NOT` (非)。 条件选择:`IF(COND, A, B)` —— 如果条件COND成立,返回A,否则返回B。实战演练:编写三个经典选股公式
下面通过三个由浅入深的案例,演示如何从零开始编写选股公式。
案例 1:金叉选股(均线策略)
逻辑描述:当5日均线上穿10日均线,且当日收盘价大于20日均线时,选出该股票。
代码实现(通达信格式):
```pascal
MA5 := MA(CLOSE, 5);
MA10 := MA(CLOSE, 10);
MA20 := MA(CLOSE, 20);
{金叉条件:5日均线上穿10日均线}
GOLDEN_CROSS := CROSS(MA5, MA10);
{价格条件:收盘价在20日均线之上}
PRICE_ABOVE_MA20 := CLOSE > MA20;
{选股信号}
XG: GOLDEN_CROSS AND PRICE_ABOVE_MA20;
```
提示:`XG:` 是选股公式特有的输出标记,表示输出选股信号(1为选中,0为未选中)。
案例 2:放量突破涨停板

逻辑描述:当日股价涨停,且成交量是前5日均量线的2倍以上。
代码实现:
```pascal
{计算涨停板判断,考虑科创板/创业板20%限制较复杂,此处以主板10%为例}
LIMIT_UP := (CLOSE / REF(CLOSE, 1) - 1) >= 0.098; {近似10%}
{计算成交量倍数}
VOL_MA5 := MA(VOL, 5);
VOL_RATIO := VOL / VOL_MA5;
{选股条件:涨停 且 放量超过2倍}
XG: LIMIT_UP AND VOL_RATIO > 2;
```
案例 3:RSI超卖反弹策略
逻辑描述:6日RSI低于20(超卖区),且当日收盘价大于5日均线(企稳信号)。
代码实现:
```pascal
RSI6 := RSI(6);
MA5 := MA(CLOSE, 5);
{RSI超卖}
OVERSOLD := RSI6 < 20;
{价格企稳}
STABILIZE := CLOSE > MA5;
XG: OVERSOLD AND STABILIZE;
```
公式编写常见错误与调试技巧
新手在编写公式时,常遇到“选不出股票”或“选出太多垃圾股”的情况。下面呢是排查指南:
| 常见问题 | 原因 | 解决方案 |
|---|---|---|
| 无选股结果 | 条件过于严格,逻辑互斥 | 放宽条件,将`AND`改为`OR`,或调整均线参数。 |
| 选出所有股票 | 逻辑错误,如使用了`:=`赋值而非`:`输出 | 检查一行是否以`XG:`或`OUTPUT:`结尾,并确保逻辑正确。 |
| 未来函数干扰 | 运用了`ZIG`、`PEAK`等未来函数 | 避免运用任何包含“未来”、“预测”性质的函数,确保信号可实时复现。 |
| 数据缺失 | 未处理停牌或新股 | 在条件中加入`FINANCE(4)>0`(有成交)或`DYNAINFO(4)>0`(非停牌)。 |
调试技巧:
1. 分步验证:先单独测试每个子条件(如只测试`GOLDEN_CROSS`),看是否有结果。
2. 可视化辅助:在公式编辑器中使用`DRAWICON`或`DRAWTEXT`在K线图上标记信号,直观检查是否符合预期。
3. 查看中间变量:将中间变量(如`MA5`)直接输出到副图,观察其走势是否合理。
进阶建议:如何优化选股公式?
1. 加入基本面过滤:
纯技术面选股容易遇到“庄股”或“问题股”。建议在公式中加入基本面条件,:
```pascal
{净利润同比增长大于0}
GOOD_FUNDAMENTAL := FINANCE(33) > 0;
XG: TECH_SIGNAL AND GOOD_FUNDAMENTAL;
```
2. 排除ST与次新股:
为了降低风险,会在公式开头加入排除项:
```pascal
{排除ST股}
NOT_ST := NAMELIKE('ST') = 0;
{排除上市不足60天的新股}
NEW_STOCK := DAYSINLIST < 60;
XG: SIGNAL AND NOT_ST AND NOT NEW_STOCK;
```
3. 多周期共振:
利用`REF`函数引入大周期数据,“日线金叉且周线向上”:
```pascal
WEEK_MA5 := MA(CLOSE, 5); {注意:此处需使用周线数据,不同软件调用方法不同}
```
选股公式编辑并非一蹴而就,它需你对市场逻辑有深刻理解,并不断经过历史数据进行回测和优化。建议初学者从简单的均线交叉开始,逐步加入成交量、基本面等维度,形成自己的交易体系。
记住:公式只是工具,核心在于你赋予它的交易逻辑。没有万能的公式,只有不断进化的策略。
希望这篇教程能帮助你顺利入门选股公式编辑,开启量化交易的新篇章!
