# tdxtopy **Repository Path**: alans2014/tdxtopy ## Basic Information - **Project Name**: tdxtopy - **Description**: 通过tdx的dll将股票数据传送到python程序,并接收python程序返回的结果,实现通过python来编写通达信的指标公式 - **Primary Language**: C++ - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 17 - **Created**: 2025-02-23 - **Last Updated**: 2025-02-23 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # tdxtopy x64分支 刚发现通达信出了64位版本,又重新写了一个直接调用python库的版本在x64分支 64版本使用更简单,直接把tdx.py和tdxtopy.dll拷贝到主程序的\T0002\dlls目录下即可; 公式编写只用DLL的1号函数,比如编写KDJ: T0:=TDXDLL1(1,1,N,C); {调用1号PYTHON函数暂存数据N,C} T1:=TDXDLL1(1,2,H,L); {调用2号PYTHON函数暂存数据H,L} K:TDXDLL1(1,4,M1,M2); {调用4号PYTHON函数计算KDJ并返回K值} D:TDXDLL1(1,5,0,0); {调用5号PYTHON函数返回D值} J:TDXDLL1(1,6,0,0); {调用6号PYTHON函数返回J值}; python函数请参考附带的tdx.py #### 介绍 通过tdx的dll将股票数据传送到python程序,并接收python程序返回的结果,实现通过python来编写通达信的指标公式 本项目按照 通达信DLL函数编程规范编写 详情请看以下链接内容 https://www.tdx.com.cn/products/userdoc/%E9%80%9A%E8%BE%BE%E4%BF%A1%E6%8F%92%E4%BB%B6%E9%80%89%E8%82%A1%E7%BC%96%E7%A8%8B%E8%A7%84%E8%8C%83.rar #### 软件架构 软件就是将传递到DLL接口的股票数据通过pipe管道写入到python服务端,然后接收python服务端计算后传回的数据返回给股票程序。 本dll需要配合python服务程序使用。 为什么不直接调用python的C++接口 ? 因为通达信只有32位的,直接调用python的C++接口就只能使用32位的python,现在很多库已经不支持32位python。 #### 安装教程 1.dll安装说明 将生成的dll文件拷贝到主程序的\T0002\dlls目录下(如果没有此目录,请人工建立) 主程序进入后,ctrl+F打开公式管理器,点击“DLL函数”按钮。 ![绑定dll函数](https://foruda.gitee.com/images/1730886702564839590/4bbbd78d_2242880.png "屏幕截图") 如图tdxtopy.dll绑定在了1号dll,那么在编写公式时 使用 TDXDLL1 来调用这个dll中的函数,以此类推。 2.python程序安装说明 python程序由python文件夹下的三个文件组成 gui.pyw 图形界面程序,方便实时刷新模块和关闭重启服务程序 tdxserver.py 服务程序,负责与通达信DLL进行数据交互 tdx.py 指标计算程序,编写指标只需在这个文件里添加函数 需要查看错误信息就使用 python gui.pyw 启动程序 平时可以把.pyw设置为由pythonw默认启动,这样直接双击gui.pyw就可以启动窗口程序。 ![输入图片说明](python/1730907757277.png) 第一次启动点击 启动通达信 然后在对话框中选择通达信的启动程序。以后就会自动启动通达信。 对tdx.py进行修改后,点击刷新模块。然后在通达信程序中切换下股票就能按修改后的程序计算指标 #### 公式编写使用说明 1. 通达信公式的编写 {**本公式演示怎么使用DLL和PYTHON来编写KDJ指标 **DLL函数说明: DLL函数只可以接收四个参数, 第一个参数指定由DLL中的第几号函数来处理数据 第二个参数指定由PYTHON中第几号函数来接收处理数据 第三,第四两个参数是传递给PYTHON的股票数据 本DLL只设计了三个DLL函数 1号函数负责传递2个数据给PYTHON函数,并从PYTHON函数接收一个结果 2号函数负责传递2个数据给PYTHON函数,不接收结果 3号函数不传递数据给PYTHON函数,只从PYTHON函数接收一个结果 KDJ指标计算用到的数据: CLOSW HIGH LOW 和 参数 N,M1,M2 一般参数直接在PYTHON中定义就可以,这里为了演示也把参数传递过去 1.首先使用DLL的2号函数将KDJ计算所需的数据C和N传递给PYTHON, 因为C和N两个数据无法计算,所以这里不会有结果返回。 即使不返回值,系统还是会返回零或乱码,这里用T1接收后丢弃。 } T1:=TDXDLL1(2,1,N,C); {第二个参数1代表 调用PYTHON的1号函数来保存C和N两个数据} {2.继续使用DLL的2号函数传递H,L两个数据给PYTHON,第二参数2代表 调用PYTHON的2号函数 } T2:TDXDLL1(2,2,H,L); {3.这里传递了M1,M2两个参数给PYTHON,并接收计算的K值; 所以这里使用DLL1号函数来接收K的值。 第二参数4代表 调用PYTHON的4号函数 } K:TDXDLL1(1,4,M1,M2); {4.到这里所有计算所需的数据都传完了,不需要再传数据了。 所以这里用DLL3号函数接收D值,后面两个数据参数写0 } D:TDXDLL1(3,5,0,0); {4.继续用DLL3号函数接收J值,后面两个数据参数写0 } J:TDXDLL1(3,6,0,0); { 总结: 1.传递数据并接收返回值 用DLL的1号函数 2.传递数据不接收返回值 用DLL的2号函数 3.不传递数据只接收返回值 用DLL的3号函数 每一条语句都对应一个PYTHON函数,由第二个参数指定具体调用哪个函数 }; 2. python函数的编写 参考tdx.py中kdj指标的编写即可