简介:这份《同花顺公式教程.pdf》面向股票投资者与量化选股初学者,系统讲解TDX公式体系的使用与编写方法,帮助读者借助计算机快速完成行情分析、条件选股与交易策略测试。教程围绕四大类公式编辑器展开:技术指标公式用于绘制分析曲线,条件选股公式实现智能选股,五彩K线公式对满足条件的K线形态着色标记,交易系统公式则通过设定买卖点进行模拟操作与参数测试。内容还涵盖公式编写规则、系统函数说明、常用技术指标、公式管理器的树形结构与查找方式,以及公式的加密、引入与输出等管理操作。资源包为1个PDF文件,大小约4.1MB,结构完整、便于随时查阅。目前已有1876人学习下载,适合希望从零掌握公式编写、构建个人选股与交易规则的投资者参考。
1. 同花顺公式教程.pdf:从一份文档到一套能跑的自定义指标
很多人第一次拿到《同花顺公式教程.pdf》这类资料,翻两页就放下了——满屏的语法符号、函数名、参数表,看着像编程手册,又像数学课本,不知道从哪下手。但真正在盘面上用过自定义指标的人都清楚,这份文档的价值不在于“读完”,而在于“查着用”。它本质上是一套公式语言的语法参考加函数字典,核心用途是让你在同花顺的公式管理器里写出自己的技术指标、条件选股和预警信号。
举个最直接的场景:软件自带MACD是固定12、26、9参数,但你想改成8、17、9做短线,或者把金叉条件叠加成交量过滤,这时候就必须自己写公式。教程里讲的就是这套语言的规则——变量怎么定义、引用怎么取、绘图函数怎么调。适合两类人:一是想摆脱“拿来主义”、按自己交易逻辑定制指标的人;二是需要批量做条件选股、把复盘思路固化成代码的人。不需要你会C++或Python,但需要你愿意花半小时理解它的语法逻辑。
2. 公式语言的核心骨架:变量、引用与输出
2.1 变量定义与赋值规则
同花顺公式语言的变量定义非常直接,不需要声明类型,直接写名字加冒号或等号即可。这里有个关键区别:冒号:表示输出到图表,等号=表示中间变量不显示。很多人写公式发现图上多了一堆乱七八糟的线,就是因为把中间变量用了冒号。
{ 正确写法:中间变量用等号,输出用冒号 } MA5:=MA(CLOSE,5); { 中间变量,不画线 } MA10:=MA(CLOSE,10); { 中间变量,不画线 } CROSS_UP:MA5>MA10; { 输出,值为1或0,画线 }逻辑说明:MA(CLOSE,5)表示对收盘价求5周期简单移动平均。CROSS_UP输出的是一个布尔值序列,1代表条件成立,0代表不成立。参数说明:CLOSE是内置变量代表收盘价,也可以换成OPEN、HIGH、LOW、VOL。数字5是周期参数,改大改小直接影响灵敏度。
变量名不能和内置函数重名,比如你不能定义一个叫MA的变量。另外,公式语言对大小写不敏感,close和CLOSE效果一样,但建议统一用大写,方便阅读。
2.2 数据引用与周期控制
公式里最常用的引用就是K线数据。除了CLOSE、OPEN这些当前周期数据,还可以用REF函数取历史值。比如REF(CLOSE,1)就是昨天的收盘价。这个函数在写“今日突破昨日高点”这类条件时必用。
{ 取前N周期数据 } PREV_CLOSE:=REF(CLOSE,1); { 昨日收盘 } PREV_HIGH:=REF(HIGH,1); { 昨日最高 } BREAK_PREV_HIGH:CLOSE>PREV_HIGH; { 今日收盘突破昨日最高 }逻辑说明:REF(X,N)返回N周期前的X值,N必须是常量,不能是变量。参数说明:N=1表示前一周期,N=5表示前五周期。注意如果当前K线数量不足N+1根,返回值会是无效值,公式可能不显示或报错。
跨周期引用要用#符号,比如CLOSE#WEEK取周线收盘价。这个功能在写多周期共振条件时很有用,但要注意:跨周期引用会拖慢计算速度,选股时如果全市场扫描,尽量少用。
2.3 输出控制与绘图函数
输出到图表后,还可以控制画线方式。DRAWTEXT可以在指定位置写字,STICKLINE可以画柱状图,COLOR系列函数可以改颜色。这些在教程里都有,但新手最容易忽略的是NOAXIS和NODRAW——前者让指标不显示坐标轴,后者让输出不画线只做条件判断。
{ 条件满足时在最低价下方画文字 } DRAWTEXT(CROSS_UP,LOW*0.98,'金叉'); { 画红色柱线,宽度8 } STICKLINE(CROSS_UP,0,1,8,0),COLORRED;逻辑说明:DRAWTEXT第一个参数是条件,第二个是位置,第三个是文字内容。STICKLINE参数依次是条件、起点、终点、宽度、是否空心。参数说明:宽度值越大柱子越粗,空心参数0为实心、1为空心。颜色函数写在语句末尾,用逗号隔开。
提示:绘图函数只在主图或副图指标里生效,条件选股公式里写了也不会显示,但不会报错,容易让人误以为公式没生效。
3. 从教程到实战:写一个可用的自定义指标
3.1 搭建一个均线+成交量过滤的选股公式
光看语法没用,直接写一个能跑的条件选股公式。需求:5日均线上穿10日均线,且当日成交量大于5日均量,同时收盘价站上20日均线。这个逻辑在教程里对应的是MA、CROSS、VOL几个函数的组合。
{ 均线金叉+量能过滤选股公式 } MA5:=MA(CLOSE,5); MA10:=MA(CLOSE,10); MA20:=MA(CLOSE,20); VOL5:=MA(VOL,5); { 条件1:5日线上穿10日线 } COND1:=CROSS(MA5,MA10); { 条件2:成交量大于5日均量 } COND2:=VOL>VOL5; { 条件3:收盘价在20日线上方 } COND3:=CLOSE>MA20; { 综合条件输出 } SELECT:COND1 AND COND2 AND COND3;逻辑说明:CROSS(A,B)表示A从下方上穿B,返回布尔值。AND是逻辑与,三个条件同时成立才输出1。参数说明:所有周期参数都可以改,比如把5、10改成3、7就是更短线的版本。SELECT作为输出变量名,在条件选股界面里会被识别为选股结果。
写完保存后,在“条件选股”里选中这个公式,执行一次全市场扫描,就能得到当天满足条件的股票列表。注意:如果当天数据还没收盘,结果会随盘中变化,建议收盘后跑。
3.2 参数优化与回测验证
公式写出来只是第一步,参数合不合适要靠回测。同花顺自带的回测功能可以指定时间段和初始资金,但很多人不知道怎么把自定义公式接进去。正确做法是:在公式管理器里把公式类型设为“交易系统”,然后加上买卖条件。
{ 交易系统公式示例:均线金叉买入,死叉卖出 } MA5:=MA(CLOSE,5); MA10:=MA(CLOSE,10); { 买入条件 } BUY:CROSS(MA5,MA10); { 卖出条件 } SELL:CROSS(MA10,MA5);逻辑说明:交易系统公式里BUY和SELL是保留字,分别对应买入和卖出信号。参数说明:回测时可以在设置里调整手续费和滑点,默认值往往偏低,建议手动改成万三手续费加千一滑点,更接近实盘。
回测结果重点看三个数:总收益率、最大回撤、胜率。如果胜率很高但最大回撤也很大,说明止损没做好;如果总收益高但交易次数极少,可能是参数过拟合。教程里不会告诉你这些,但这是实战里必须自己判断的。
3.3 把公式接入预警系统
选股是盘后的事,预警是盘中的事。同花顺的预警系统支持自定义公式,但有个限制:预警公式里不能用REF取未来数据,也不能用跨周期引用。所以写预警公式要尽量简单,只依赖当前周期数据。
{ 盘中预警:放量突破20日高点 } HH20:=HHV(HIGH,20); { HHV取20周期内最高值 } BREAK:CLOSE>REF(HH20,1) AND VOL>MA(VOL,5)*1.5;逻辑说明:HHV(HIGH,20)取最近20根K线的最高价,REF(HH20,1)取前一周期该值,避免用当前未完成K线。参数说明:VOL>MA(VOL,5)*1.5表示成交量大于5日均量的1.5倍,这个倍数可以按自己需求调,1.5到2.5之间比较常用。
设置预警时,在预警界面选择这个公式,指定监控的股票池和触发频率。注意:预警频率不要设太高,否则盘中频繁弹窗反而干扰操作。一般设1分钟或5分钟检查一次就够了。
4. 避坑与排查:公式不生效的五个常见原因
4.1 现象:公式保存后图上不显示
原因:最常见的是输出变量用了等号而不是冒号。等号定义的变量只在内存里计算,不会画到图上。另一个可能是公式类型选错了,比如把指标公式建成了选股公式,选股公式不画线。
解决:检查所有需要显示的变量,把:=改成:。然后在公式管理器里确认公式类型是“技术指标”而不是“条件选股”。如果还是不行,点“测试公式”看有没有语法报错。
4.2 现象:选股结果为空或明显不对
原因:数据周期不对。比如公式里用了日线数据,但选股时设置的是分钟周期,结果自然不对。另一个原因是REF的周期数超过了数据长度,比如新股上市不足20天,REF(CLOSE,20)就取不到值。
解决:在选股界面确认周期设置和公式设计一致。对于新股,可以在公式开头加一个数据长度判断:IF(BARSCOUNT(CLOSE)<20,0,1),数据不足20根时直接返回0,避免无效计算。
4.3 现象:预警频繁触发但实际没机会
原因:用了未来函数或者未完成K线。比如CLOSE在盘中是变动的,如果预警条件里直接用了CLOSE,盘中价格一波动就可能触发,但收盘时条件又不成立了。
解决:预警公式里尽量用REF(CLOSE,1)代替CLOSE,或者加一个时间过滤,比如只在14:30之后才允许触发。另外检查有没有用到ZIG、PEAK这类未来函数,它们在预警里会导致信号漂移。
4.4 现象:回测收益很高但实盘完全不行
原因:过拟合。参数调得太细,比如把均线周期设成7、13这种非标准值,回测时刚好拟合了历史走势,但未来不会重复。另一个原因是回测时没扣手续费和滑点,实盘一扣就亏。
解决:用多组参数分别回测,看收益是否稳定。如果只有某一组参数特别高,其他都一般,大概率是过拟合。另外把手续费设成万三、滑点设成千一,再跑一遍回测,如果收益大幅缩水,说明策略本身利润空间太薄。
4.5 现象:公式在A股票上正常,B股票上报错
原因:B股票可能有停牌、除权或者数据缺失。停牌期间K线不更新,REF取到的可能是停牌前的数据,导致逻辑混乱。除权会导致价格跳空,均线类指标会失真。
解决:在公式里加除权判断,或者直接用前复权数据。同花顺里可以在公式管理器设置里勾选“使用前复权数据”。对于停牌股票,加一个VOL>0的条件过滤掉停牌日。
5. 进阶技巧:用公式管理器做批量维护与版本管理
5.1 公式的导入导出与批量备份
写多了公式之后,管理是个麻烦事。同花顺的公式管理器支持导出为.exp文件,但一次只能导出一个。批量备份的土办法是直接复制安装目录下的formula文件夹,里面按公式类型分了子目录。
# 假设安装目录在D盘,备份公式文件夹 # Windows下用robocopy做增量备份 robocopy "D:\同花顺安装目录\formula" "E:\公式备份\formula" /MIR /LOG:E:\公式备份\backup.log逻辑说明:/MIR表示镜像模式,源目录删掉的文件备份目录也删掉,保持完全一致。/LOG把操作记录写到日志文件,方便排查。参数说明:如果只想备份不删除,把/MIR换成/E。这个命令可以做成计划任务,每周自动跑一次。
注意:不同版本的同花顺公式文件夹路径可能不同,一般在安装目录的
bin或data子目录下,找包含.alg或.fnc文件的文件夹就是。
5.2 用注释和版本号管理公式迭代
公式写多了,过两个月自己都忘了当时为什么这么写。养成在公式开头加注释的习惯,记录版本、日期、修改内容。同花顺公式语言支持大括号{}包裹的注释,也支持双斜杠//单行注释。
{ 公式名称:均线金叉选股 } { 版本:v1.2 } { 日期:2025-06-15 } { 修改记录:增加成交量过滤条件,调整均线周期为5/10 } { 参数:MA5周期=5,MA10周期=10,量比阈值=1.5 } MA5:=MA(CLOSE,5); MA10:=MA(CLOSE,10); VOL5:=MA(VOL,5); COND1:=CROSS(MA5,MA10); COND2:=VOL>VOL5*1.5; SELECT:COND1 AND COND2;逻辑说明:注释不参与计算,但能让你半年后还能看懂。参数说明:把可调参数写在注释里,改的时候直接对照。如果公式复杂,建议把参数提取到公式管理器的“参数设置”里,这样不用改代码就能调参。
5.3 一个验证公式是否可靠的小技巧
写完一个公式,别急着上实盘。先用“历史回放”功能跑一遍,看看过去半年里信号出现的位置和实际走势是否吻合。同花顺的历史回放可以手动控制K线前进,逐根验证。
具体操作:在K线图上按F5进入分析周期设置,选“历史回放”,然后加载公式。每按一次前进键,K线走一根,公式输出同步更新。重点看信号出现后3到5根K线的走势,如果大部分信号后面都是反向行情,说明逻辑有问题。
我自己的习惯是:任何新公式先跑三个月历史回放,信号次数少于10次的直接放弃,样本太少没有统计意义。信号次数在20到50次之间的,再看胜率和盈亏比。只有回放验证通过的公式,才会放进预警系统里跑模拟盘。
希望帮到你。
本文还有配套的精品资源,点击获取