从零到精通:怎样编写选股公式教程(保姆级指南)

在量化投资和自动化交易日益普及的今天,编写选股公式(Stock Selection Formula)已成为很多的股民进阶的需要技能。无论是通达信、同花顺还是东方财富,其核心逻辑都大同小异。不过,对于初学者而言,面对满屏的代码感到无从下手。
这篇文章将为你拆解“怎样编写选股公式”的全过程,从基础逻辑到高级技巧,辅以实战案例和数据对比,助你快速掌握这一利器。
为什么你需要编写选股公式?
手动复盘几千只股票效率低下且容易受情绪干扰。经由编写公式,你可实现:
1. 自动化筛选:在几秒钟内从全市场筛选出符合特定技术形态或基本面条件的股票。
2. 策略回测:验证你的交易想法在历史行情中是否有效。
3. 纪律执行:克服人性弱点,严格执行既定的交易信号。
编写选股公式的四大核心步骤
步:明确选股逻辑(Strategy Definition)
在打开软件之前,你必须用自然语言清晰地描述你的选股条件。:“我想找出最近5天内,收盘价站上20日均线,且成交量放大超过前一日1.5倍的股票。”
将自然语言转化为逻辑要素:
时间周期:最近5天
价格条件:收盘价 > 20日均线
量能条件:当日成交量 > 前一日成交量 1.5
步:熟悉常用函数(Function Library)
不同的炒股软件拥有各自的函数库,但核心函数通用。下面呢是编写选股公式最常用的函数表:
| 函数类别 | 常用函数 | 含义说明 | 示例 |
|---|---|---|---|
| 价格类 | `CLOSE` | 收盘价 | `CLOSE > OPEN` |
| `OPEN` | 开盘价 | ||
| `HIGH` | 最高价 | ||
| `LOW` | 最低价 | ||
| 均线类 | `MA(CLOSE, N)` | N日简单移动平均线 | `MA(CLOSE, 5)` 表示5日均线 |
| 成交量类 | `VOL` | 当日成交量 | `VOL > MA(VOL, 5)` |
| 技术指标 | `REF(CLOSE, 1)` | 前一日收盘价 | 用于比较昨日与今日 |
| `CROSS(A, B)` | 金叉/死叉 | `CROSS(MA5, MA10)` 体现5日均线上穿10日均线 | |
| 逻辑运算 | `AND`, `OR`, `NOT` | 且、或、非 | `COND1 AND COND2` |
步:编写代码(Coding)
以通达信为例,我们将上面这些“均线突破+放量”的逻辑编写为代码:
```pascal
{定义变量}
MA20 := MA(CLOSE, 20); {计算20日均线}
VOL_MA5 := MA(VOL, 5); {计算5日平均成交量}
{定义选股条件}
{条件1:收盘价站上20日均线}
COND_PRICE := CLOSE > MA20;
{条件2:成交量放大,超过前一日1.5倍,且大于5日均量}
COND_VOL := VOL > REF(VOL, 1) 1.5 AND VOL > VOL_MA5;
{选股信号:满足价格和成交量条件}
XG: COND_PRICE AND COND_VOL;
```
注意:在通达信中,`XG:` 是输出选股结果的标志,其他变量若不需要显示可省略冒号。
第四步:测试与优化(Backtesting & Optimization)
编写完成后,不要立即实盘使用。必须进行回测:
1. 历史回测:查看该公式在过去1-3年中发出的信号胜率如何。
2. 参数调整:如果信号太少,放宽条件(如将1.5倍改为1.3倍);如果信号太多且无效,收紧条件。
3. 避免未来函数:确保公式中不包含`ZIG`、`PEAK`等未来函数,否则回测结果会严重失真。

实战案例:编写“底部放量启动”选股公式
这是一个经典的短线启动信号,逻辑如下:
1. 股价经过长期下跌或盘整,处于相对低位。
2. 近期出现大阳线,涨幅超过7%。
3. 成交量显著放大,达到5日均量的2倍以上。
4. 股价站上5日和10日均线。
通达信代码示例:
```pascal
{基础数据}
MA5 := MA(CLOSE, 5);
MA10 := MA(CLOSE, 10);
VOL_MA5 := MA(VOL, 5);
{条件1:大阳线,涨幅大于7%}
BIG_YANG := (CLOSE - REF(CLOSE, 1)) / REF(CLOSE, 1) 100 > 7;
{条件2:成交量放大至5日均量的2倍以上}
VOL_SURGE := VOL > VOL_MA5 2;
{条件3:股价站上5日和10日均线}
PRICE_UP := CLOSE > MA5 AND CLOSE > MA10;
{条件4:5日均线上穿10日均线(可选,增强趋势确认)}
TREND_UP := CROSS(MA5, MA10);
{输出}
XG: BIG_YANG AND VOL_SURGE AND PRICE_UP AND TREND_UP;
```
常见误区与避坑指南
过度拟合(Overfitting)
现象:在历史数据上表现完美,但实盘一塌糊涂。 原因:参数设置过于精确地迎合了过去的特定行情(如将均线周期设为17.3日)。 建议:参数应保持整数且符合市场常识(如5、10、20、60),并在不同市场环境下(牛市、熊市、震荡市)验证稳定性。忽视交易成本
现象:公式筛选出的股票看似利润丰厚,但扣除佣金和印花税后亏损。 建议:在回测时务必开启“手续费”设置,一般股票交易佣金约为万分之2.5,印花税为千分之1(卖出时)。忽略基本面风险
现象:选出大量技术面完美但基本面恶化的股票(如ST股、即将退市股)。 建议:在公式中加入基本面过滤,排除ST股:`NOT(NAMELIKE('S') OR NAMELIKE('S'))`。数据说明:不同选股策略的回测表现对比
为了更直观地展示编写选股公式的价值,以下模拟数据展示了三种不同策略在2023年沪深300成分股中的回测表现(假设持有周期为5个交易日):
| 策略类型 | 选股条件简述 | 年化收益率 | 最大回撤 | 胜率 | 交易频率 |
|---|---|---|---|---|---|
| 策略A:纯均线突破 | 5日均线上穿20日均线 | 12.5% | -18.3% | 45% | 高 |
| 策略B:放量突破 | 突破20日均线 + 成交量放大2倍 | 18.7% | -15.2% | 52% | 中 |
| 策略C:量价共振+趋势 | 放量突破 + 股价在60日均线上方 + 非ST | 24.3% | -12.8% | 58% | 低 |
注:以上数据为模拟演示,,不构成投资建议。
从表中,策略C通过增加“趋势过滤”和“基本面过滤”,虽然降低了交易频率,但显著提高了胜率和年化收益,控制了最大回撤。这正是编写精细选股公式的意义所在。
编写选股公式并非一蹴而就,它是一个“逻辑构建 -> 代码实现 -> 测试优化”的迭代过程。
给初学者的建议:
1. 从简单开始:先编写只包含2-3个条件的简单公式。
2. 多参考经典:学习通达信、同花顺官方自带的经典公式,理解其逻辑。
3. 保持敬畏:公式只是工具,不能保证100%盈利。结合市场情绪、资金流向和宏观政策,才能发挥最大效用。
希望这篇教程能为你打开量化选股的大门。现在,打开你的炒股软件,尝试编写你的个选股公式吧!
