通达信官方并未公开一个完整、现成的“量化投资插件项目”代码。但整个开发流程、核心接口和代码结构却非常清晰,我们可以根据开发路线图、核心代码构建自己的项目。
开发路线图与核心技术栈
开发一个通达信插件,本质是创建一个遵循其接口规范的 DLL (动态链接库),让主程序可以加载和调用。完整的量化插件项目开发,可以遵循以下路径:
1. 入门 (公式系统)
· 目标:熟悉通达信内置的量化公式语言通达信插件开发指南:从入门到进阶,实现量化投资项目构建,实现基础策略。
· 说明:这是最快捷的入门方式,无需编译,直接在软件内编写。例如一个简单的双均线策略公式为:CROSS(MA(CLOSE,5),MA(CLOSE,10))。
2. 进阶 (DLL插件)
· 目标:突破公式语言限制,实现复杂算法(如高频监控、机器学习模型集成)。
· 核心技术:使用 C++ 编写原生DLL,这是性能最好、支持最完整的方式。C#和VB也可通过特定方式调用,但兼容性或性能有折衷。
· 关键概念:调用约定、结构体1字节对齐(# pack(1))、通过导出函数与通达信交互。
3. 扩展 (混合编程)
· 目标:利用等语言强大的数据科学生态。
· 实现方式:用C++编写核心DLL桥接层,在DLL内部调用解释器来执行复杂策略。
核心代码模板与项目结构
下面是一个C++ DLL插件的核心文件模板,它实现了通达信插件必须的注册函数和一个自定义计算函数。
项目核心文件 (.h)
此文件定义接口和数据结构。
```cpp
// .h
# once
// 强制1字节对齐,确保与通达信内存结构一致
:4
# pack(push, 1)
// 通达信调用插件函数的指针类型
void (*)(int , float* , float* , float* , float* );
// 插件函数信息结构
{
int ; // 函数唯一标记
; // 函数指针
};
# pack(pop)
// 声明导出函数
"C" () BOOL (** );
```
插件实现文件 (.cpp)
此文件包含具体的函数实现。
```cpp
// .cpp
# ".h"
#
// 示例函数1:计算ATR (真实波幅)近似值
void (int , float* , float* high, float* low, float* close) {
// 简化计算,实际需考虑前一日收盘价
for (int i = 1; i < ; i++) {
float tr1 = high
- low
; // 当日振幅
float tr2 = fabs(high
- close
i-1
); // 当日最高与昨日收盘差
float tr3 = fabs(low
- close
i-1
); // 当日最低与昨日收盘差
= std::max(std::max(tr1, tr2), tr3); // 取最大值作为真实波幅
= 0.0f; // 第一个数据点通常不计算
// 示例函数2:自定义指标计算
void (int , float* , float* price, float* , float* param) {
// 在此实现你的核心量化算法,例如结合价量关系
for (int i = 0; i < ; i++) {
// 示例:价格与成交量的加权计算
= price
* (1.0f + 0.001f *
);

// 全局函数列表,向通达信注册
:5
:8
= {
{1, ()&}, // 标记为1号函数
{2, ()&}, // 标记为2号函数
{0, NULL} // 数组结束标志,必须保留
:8
};
// 通达信启动时会调用的关键注册函数
:5
"C" () BOOL (** ) {
if (* == NULL) {
* = ;
TRUE;
FALSE;
```
DLL入口文件 (.cpp)
这是 DLL的标准入口。
```cpp
// .cpp
# ".h"
BOOL ( , DWORD , ) {
() {
case :
// 插件被加载通达信ddx数据下载,避免在此进行耗时操作
:4
break;
case :
// 插件被卸载,在此释放资源
break;
TRUE;
```
项目设置要点
· 平台:必须选择 Win32 (x86),因为通达信是32位程序。
· 调用约定:在函数声明中务必使用 。
· 关键编译设置:
· C/C++ -> 常规 -> 调试信息格式:设置为 “程序数据库(/Zi)”。
· C/C++ -> 代码生成 -> 启用最小重新生成:设置为 “否(/Gm-)”。
· C/C++ -> 代码生成 -> 启用函数级链接:设置为 “是(/Gy)”。
项目实践:从开发到部署
1. 获取官方头文件:从通达信官方网站的帮助中心下载 通达信DLL函数编程规范.rar,其中包含关键的 .h 头文件。
2. 编译生成DLL:使用 (建议2019或以上) 创建Win32 DLL项目,将上述代码模板集成,并进行编译。
3. 部署插件:
· 将生成的 .dll 文件复制到通达信目录的 \T0002\dlls\ 文件夹下(如无此文件夹请手动创建)。
· 关键步骤:直接从通达信安装目录运行主程序(而非通过桌面快捷方式),以防DLL绑定失败。
4. 在通达信中绑定:
· 打开软件,进入 功能 -> 公式系统 -> 公式管理器。
· 点击 DLL函数 按钮,找到你的DLL并绑定。记住绑定的序号(例如“第2号DLL”)。
5. 在公式中调用:
· 新建一个技术指标公式,使用 格式调用,其中 n 就是绑定的序号。
· 例如,调用上面注册的2号函数::(CLOSE, VOL, 0);
6. 调试:通达信有反调试机制,直接附加调试器较困难。建议采用输出日志文件的方式来调试和验证计算结果。
进阶思路:构建量化系统
一个完整的量化项目不止于一个指标。你可以将上述DLL作为核心计算引擎,并围绕它构建系统:
· 策略层 (/ C#):在外部用进行策略研究和回测,将生成的信号或参数通过文件、共享内存或传递给DLL插件。
· 执行层 (DLL插件):DLL内实现低延迟的行情监听和条件判断,触发信号后,可通过模拟鼠标键盘或调用更高级的交易接口(如有)来执行。
· 风控层:在DLL中内置简单的风控规则(如最大持仓、止损),确保自动化交易的安全。
重要注意事项
· 稳定性第一:不规范的DLL可能导致通达信崩溃。务必确保内存操作安全,做好异常处理。
· 性能考量:DLL运行在通达信进程内,复杂计算应优化性能,避免阻塞主线程。
· 理解数据格式:通达信向DLL传递的 float* 参数都是数组,代表该指标一系列历史值,而非单个值。



