
通达信量化交易系统的基础架构
通达信的量化交易核心在于其公式系统(TFL),这套语言支持从简单均线到复杂机器学习模型的实现。公式编辑器内置了12类共300+个函数,包括行情函数、统计函数、逻辑判断函数等。比如CLOSE
获取收盘价,MA(C,5)
计算5日均线,CROSS(MA1,MA2)
判断金叉死叉。
编写指标公式时要注意三个层级结构:
典型的多空指标源码示例:
VAR1:=(CLOSE-LLV(LOW,9))/(HHV(HIGH,9)-LLV(LOW,9))100;
K:SMA(VAR1,3,1);
D:SMA(K,3,1);
J:3
K-2D;
高频交易策略的源码实现
日内高频策略需要特别关注Tick级数据处理,通达信通过DYNAINFO
函数组获取实时盘口数据。一个典型的突破策略包含这些关键要素:
TICKCOUNT
统计单位时间成交量ASKPRICE(1)
和BIDPRICE(1)
监控买卖档位TIME
函数控制交易时段函数 | 说明 | 示例 |
---|---|---|
DYNAINFO(7) | 现价 | 10.25 |
DYNAINFO(11) | 涨停价 | 11.30 |
DYNAINFO(37) | 量比 | 1.8 |
机器学习指标的移植方法
虽然通达信原生不支持Python,但可以通过特定方法实现机器学习模型部署。常用的两种方案:
INET
函数调用外部API#IMPORT"D:AIpredict.dll",Predict
SLOPEAI_SIGNAL:Predict(CLOSE,VOL);
内置实现方式:
用 函数模拟线性回归
FORCAST
函数实现简单预测
STD
函数计算标准差
实盘风控模块的编写要点
完整的交易系统必须包含严格的风控逻辑,在通达信中主要通过条件判断和仓位控制实现:
止损策略示例:
tfl
STOPLOSS:C/ENTERPRICE
动态仓位算法:
tfl
POSITION:(C-LLV(L,20))/ATR(20)0.1;
函数做信号回溯,这会导致 函数问题。正确的回测应该:
BACKSET
关键风控参数 设置范围:
单票仓位5-15% 日最大回撤2-5% 滑点控制0.1-0.3% 策略回测的常见误区
很多用户直接用
典型的问题策略特征包括:交易次数5次等。
实盘和回测出现差距最直接的原因往往是数据颗粒度不同。回测常用的1分钟或5分钟K线数据,实际上已经过滤掉了大量微观市场行为,比如盘口的瞬时跳动、大单冲击成本这些关键细节。真实的Tick级交易中,一个简单的突破策略可能会因为0.1秒的延迟就错过最佳入场点,这种微观层面的损耗累计起来,完全能让年化收益缩水5-15%。更别说那些基于Level2数据的算法,回测时用的十档行情和实际千档行情根本是两回事。
另一个容易被忽视的因素是市场阶段特性。很多策略在2015-2018年的趋势行情里表现亮眼,但放到2020-2023年的震荡市就频繁止损。这不是策略失效,而是市场波动率从年化20%降到15%以下时,原有的参数阈值需要动态调整。比如突破策略的触发阈值在波动率25%时设2%很合理,但当波动率降到12%时,这个参数就得压缩到1-1.5%才能保持信号质量。
常见问题解答
通达信公式语言(TFL)和Python有什么区别?
通达信TFL是专为金融量化设计的领域特定语言,优势在于实时行情处理和低延迟,但缺乏Python的通用机器学习库。Python更适合复杂模型开发,而TFL更适合高频交易场景。两者可以通过DLL插件或API实现协同工作。
如何避免指标公式中的 函数?
关键要检查是否使用了BACKSET、REFX等可能引用 数据的函数。 在编写完成后,用专业版回测引擎进行10-20次历史数据验证,特别关注信号是否在K线闭合前就出现。
为什么我的策略实盘表现和回测差距很大?
常见原因包括:未考虑滑点( 预留0.1-0.3%)、忽略交易手续费、Tick级数据与分钟级数据差异、以及市场环境变化(如策略在震荡市和趋势市的表现差异可达30-50%)。
机器学习指标在通达信中运行效率如何?
通过DLL调用的简单模型(如线性回归)延迟在1-5毫秒,复杂神经网络 在外部服务器运行。内置函数实现的机器学习逻辑,处理1000支股票约需2-3秒,适合分钟级以上的策略。
日内高频策略最少需要多少资金?
考虑到手续费损耗和流动性需求,A股市场 单策略初始资金5-10万元起,商品期货需要20-50万元。资金低于这个范围时,手续费占比可能超过收益的30%。