通达信+大智慧数据同步存调DLL
通达信/大智慧自定义数据同步采集与调用DLL
数据同步存调DLL(通达信版+大智慧版)
通达信版说明书
(TdxSaveData.dll)
一、功能
在通达信中绑定本DLL,可以实现以下功能:
1.可以实现通达信与通达信之间、大智慧与大智慧之间、通达信与大智慧之间的自定义数据存储后的互转换、互调用。数据可以是公式、函数、计算结果等等能取到的任何数值型数据。且转存是实时进行的,转后是可立马调用的(无需导入等步骤,直接可以在公式中调用)。
此功能特别适合批量、定时保存重要的盘中实时数据,如9:20后每一分钟的竞价数据、所有的历史及当天的开盘数据、盘中分时价格变动数据、通达信中有大智慧中没有或大智慧中有通达信中没有的数据。。。等等。因为保存格式可以是序列数据,所以它不仅会保存当天的,也会一起保存其它日期的历史数据。当然也可保存当天数据。(将序列数据使用CONST函数转换后即可得到常量数据,即单笔不带日期的数据)
本说明书仅简介通达信中使用的DLL,本DLL能存储通达信中或大智慧中使用的格式的自定义数据。(另外,还有另一款大智慧DLL,它在大智慧软件中使用,可存储通达信或大智慧格式的自定义数据,这里就不作介绍了)这样,就实现了通达信内部、大智慧内部、通达信与大智慧跨软件的数据存储、转换、调用了!!!
2.除保存成自定义序列数据外,也可保存成自定义外部(文本、数值)数据,即保存到extern_user.txt文件中(通达信直接可调用它)。
3.可将板块或股池中的代码保存到TXT或BLK文件,实现与其它软件或其它通达信之间的代码互通。
4.其它更多功能刚下面函数介绍。
【部分使用场景举例】:
1.竞价图选股:竞价结束后,想找出竞价走势(竞价图)9:20到9:24四分钟走直线,最后1分钟向上飞涨3个点以上的个股。
逻辑思路:使用股池,利用它可定时运行的特点,通过DLL的第1个函数功能,将所有个股竞价时段共5分钟的价格保存成5个数据值。当竞价结束后,即可对这5个值进行比较运算,筛选出符合条件的个股。因为通过DLL已经保存了值1、值2、值3、值4、值5共五个值,选股时公式条件设置就是:值1=值2=值3=值4;值5>值4*1.03 就能选出竞价图前4分钟直线,后1分钟涨3个点的股票来了。有了思路,转成公式表达就简单多了。
注:通达信竞价时段取数据与盘中有点不同:取价格应使用DYNAINFO(20)函数,即取买一价;取金额应使用DYNAINFO(15)函数,即取开盘金额;取量当然就是DYNAINFO(15) / DYNAINFO(20)
另外说一点,如果感觉一分钟取一次价太粗糙,你也可以改成10秒保存一次数据值。
2.存开盘金额:之前论坛里看到不少人为了查询个历史开盘金额,痛苦得每天要保存开盘金额为扩展数据,一天忘了或一天操作错了,还会丢失所有的历史数据。如果你用这DLL,就不会再有这烦恼了。同样通过股池的定时运行功能,设计个股池,源池是所有A股,使用DLL来保存开盘金额,在每天9:26自动运行此股池。即可完成自动保存每天的开盘金额功能。(其实很多人不知道,新版通达信开盘金额是序列数据,直接在公式中用REF(DYNAINFO(15),N)就能调用它的历史数据了)
3.不同通达信共享数据:因保存序列数据的路径是可以自由设置的,所以既可保存到本通达信中供调用,也可保存到本机其它通达信里使用。
4.使用第3个函数的存TXT功能,和幻影联动软件的分时选股配合,可实现分时选股加自动买入。
5.短周期选股,如15分钟选股、5分钟选股:如果盘中要实现速度快、出票及时又不用下载分钟数据的简易的短周期选股,可使用本DLL。如5分钟选股,可以将盘中总计4小时,每5分钟存一次数据(股价),共存储成48个数据号,这样公式中就可对这48个数据进行比对筛选,实现粗略的短周期选股。
6.大智慧数据(如ACE)同步给通达信用:本DLL有大智慧版本,可以将大智慧盘中能取到的数据,自动转为通达信的自定义数据(也是通过股池来负责保存数据),且整个数据的存储过程是自动的,数据直接存到通达信里,通达信可直接调用,无需任何人工操作步骤。
7.通达信的数据同步给大智慧使用
二、安装及使用
共二个文件:TdxSaveData.dll和TdxSaveData.ini配置文件
将这两个文件复制到通达信T0002\dlls目录下,然后在通达信公式管理器中点击“DLL函数”,在弹出的“绑定DLL函数”窗里,选择可绑定的函数号进行绑定。记住绑定的号数,后面在使用公式时,必须修改TDXDLL1这个后面的1为你绑定的数字。如绑定第2号函数,则公式中要把所有含TDXDLL1的地方改成TDXDLL2。
下面均以绑定1号函数来示例。绑定其它号上的请自行更改公式。
1号函数,功能:将通达信数据存为通达信序列数据
*** 注意:只支持存储数值型数据,不支持存储文字类数据 ***
第一步:按需新建自定义数据号
先在通达信自定义数据管理器中,新建数据号,要用到几个数据就建几个数据号。数据号与公式调用中的数据号对应,且值不超99。属性选“序列(日期、数值)”项,建好后关闭该自定义数据管理器窗口。
第二步:新建保存数据公式
NO:=【数据号】;{注释:此处自定义数据的数据号,不能大于99}
DATA:=【值】;{ 注释:要保存的数据, 注意:最大值包含小数点不能超7位}
TDXDLL1(1,STR2CON(STRCAT(CON2STR(INTPART(NO/10),0),CODE)),DATE*10+(NO-INTPART(NO/10)*10), ROUND2(DATA,2));
使用时,请把公式中【】里的内容替换成你实际的公式表达(含【】一起替换掉)
如:
NO:=5;
DATA:=C;
TDXDLL1(1,STR2CON(STRCAT(CON2STR(INTPART(NO/10),0),CODE)),DATE*10+(NO-INTPART(NO/10)*10), ROUND2(DATA,2));
以上公式表示保存历史及当日的收盘价到5号自定义数据中。
第三步:下载一年以上的完整日K数据
第四步:建股池,定时自动保存数据
因序列数据一般都用于一批股票,所以使用股池来完成保存数据的工作比较合适。将公式放在股池的转移条件里,源池设置成这一批股票。另外,因同一个数据号同一日期只能有一个数据,所以要保存当天多个时间段数据的话,需要保存成不同的数据号。
还是以上面的“使用场景举例”中的第一个例子,保存竞价时段每分钟的价格数据供后续调用,可设计股池如下:
从上图设计可看出,它利用了股池的定时执行一次功能,股池自动会在9:21、9:22、9:23、9:24、9:25分别将收盘价保存到各自的数据号中。后续通过调用自定义数据函数,即可取到该5个值。
第五步:通达信中调用数据公式
SIGNALS_USER(【数据号】,2)
如调用5号数据的公式为 SIGNALS_USER(5,2)
这样就可以调用你已经保存的任何自定义数据了。
高级:
应用①、前面有介绍,本序列数据默认是保存到DLL所在的通达信里的,如果你想保存到其它通达信里,供其它通达信调用,则可在配置文件TdxSaveData.ini中,在[set]节点下,添加一行SelfDataSavePath=【通达信目录】\T0002\signals即可。
如添加一行 SelfDataSavePath=d:\new_tdx\T0002\signals 则会将数据保存到D盘的通达信中(该通达信可以未运行)。
应用②、配置文件TdxSaveData.ini中,在[set]节点下,添加一行WritErrData=1或0 可以决定无效值是否被写入。无效值指无值或超长值(在通达信里输出时是一条小横线),但0除外,0是有效值。
WritErrData=1 无效值将会以 一个很长的负数形式写入,
WritErrData=0 无效值不写入; 默认不写入
应用③、配置文件TdxSaveData.ini中,在[set]节点下,添加一行RwriteData=0 (或1或2或3) 可以决定写入数据时是以什么模式写入。
RwriteData=0 补充模式: 仅插入新的数据项
RwriteData=1 清空模式: 原有数据全清空,然后全部新写入 默认1清空模式
RwriteData=2 覆盖模式:用现有数据覆盖同项数据
RwriteData=3 仅覆盖当日: 覆盖当日数据,之前数据不理会
举例:
原有数据:大前天A;昨天B;今天C
待写数据: 前天X;昨天Y;今天Z
四种模式写入后的最终结果:
补充模式: 大前天A;前天X;昨天B;今天C
清空模式: 前天X;昨天Y;今天Z
覆盖模式: 大前天A;前天X;昨天Y;今天Z
仅覆盖当日:大前天A;昨天B;今天Z
应用④、如果要追求存储速度更快,且不存在调用上一交易日的历史数据,则可以采用“仅覆盖当日”模式,即在配置文件第2行加入一行 RwriteData=3 这样写入数据的速度会快得多。经实测,在i3-10100内存16G的电脑上,全A共5300只股票,使用RwriteData=3模式,完成一个数据号的存入共耗时19秒。
应用⑤、因通达信绑定了DLL就无法交易,如果你还想在使用本DLL的通达信里又进行交易,有个曲线的方法就是:另外再开个不交易的通达信,将DLL绑定在它上面,保存数据时,在DLL配置中设置成保存到要交易的那个通达信目录下,这样交易的通达信就能直接调用到数据了,且也不影响交易。
2号函数,功能:将数据存为自定义外部(文本、数值)数据
和自定义序列数据不同,自定义外数据是当天的、一维的数据,并不含有历史日期数据。
*** 注意:只支持存储数值型数据,不支持存储文字类数据 ***
第一步:新建数据号和使用股池保存数据和1号函数相同,参看楼上
第二步:保存数据公式
TDXDLL1(2,STR2CON(CODE),【数据号】,【数值】)
使用时,请把公式中【】里的内容替换成你实际的公式表达(含【】一起替换掉)
如:TDXDLL1(2,STR2CON(CODE),5,33.00) 即可保存到extern_user.txt中
格式如0|300310|5||33.00
以上这些不了解不要紧,只要知道如何存,后面如何调用即可。
第三步:调用数据公式
提示:通达信的自定义外部(文本、数值)数据和自定义序列数据不同,它是要通达信重开才能生效的,这点不像我们DLL的1号函数生成的序列数据那样实时存实时用。不如序列数据方便。
调用公式:
EXTERNVALUE(0,【数据号】)
如调用5号数据,公式为EXTERNVALUE(0,5)
注:由于通达信原因,外部软件写的自定义文本数据,还需要您手动打开一次“自定义管理器”窗口,然后关了此窗,即可将数据立即同步显示到通达信各部件中,这样就能立即调用数据了。
高级应用:
应用①、本函数所存的数据默认是保存到DLL所在的通达信里的,如果你想保存到其它通达信里,供其它通达信调用,则可在配置文件TdxSaveData.ini中,在[set]节点下,添加一行TextDataPath=【通达信目录】\T0002\signals即可。
如添加一行 TextDataPath=d:\new_tdx\T0002\signals 则会将数据保存到D盘的通达信中(该通达信可以未运行)。
3号函数,功能:将股票代码存为TXT或BLK文件
通达信中选股出票,时常会想引入到其它自动交易、微信转发等软件工具中使用。此函数即可将代码保存为TXT文件或BLK文件。其中BLK文件为通达信板块文件的格式,所以也可用于代码同步到另一个通达信。
(补充说下,存BLK文件到另一通达信目录里,如果需要在通达信软件上实时看到效果,需要对存入的目标通达信进行设置:在“选项” - “自定义板块设置” 窗中,取消勾选 “缓存板块” 项,即可实现实时热更新)
公式:
TDXDLL1(3,STR2CON(CODE),【索引】,【类型】)
【类型】:1为存成.TXT;2为存成.BLK
【索引】:指在本DLL的配置文件TdxSaveData.ini中[set]节点下“SaveFile”键名后跟的数字。其后跟的值是为了确定此TXT文件存放的路径。
听着很难理解是吧,举个例子就简单了:
如果你想把代码存入到c:\1.txt中,那么请先在TdxSaveData.ini文件的[set]下面,添加一行:SaveFile2=c:\1.txt,公式就使用TDXDLL1(3,STR2CON(CODE),2,1)
可以看出,公式中有个2,和SaveFile后面也有个2,它们是对应的。
如果你还想再存其它代码到e:\1.txt中,你就在TdxSaveData.ini文件的[set]下面,再添加一行:SaveFile4=e:\1.txt,公式就使用TDXDLL1(3,STR2CON(CODE),4,1)
可以看出,公式中有个4,和SaveFile后面也有个4,它们是对应的。这个数字就是一个代号,你可以随意换数字,但必须保证公式和配置文件中,这两数字是对应相同的。这样的设计主要是为了能同时保存多个TXT,且又能让DLL区分各TXT保存的不同路径。
存BLK类型文件与存TXT相同方法,唯有类型参数用2这一区别。这里就不再重复介绍了。
另外,其实保存TXT的路径不设置,也会输出到默认的路径,默认路径就是DLL文件所在的文件夹,即:【通达信目录】\T0002\dlls,保存的默认文件名为code.txt;当然BLK文件也是一样。所以,如果不想麻烦,直接使用以下公式
注意:因通达信公式缺陷,不管你调用公式时使用了什么条件判断,只要公式里有TDXDLL1,都会调用DLL,相当于都会把代码写进TXT,出于这一点,“判断条件,符合条件的代码写入TXT”就需要使用二条公式:
公式一:公式名“TXT引用”
TXT:TDXDLL1(3,STR2CON(CODE),0,1);
公式二:在你的公式中引用下面语句
条件判断:=【你的判断条件】;
IFC(条件判断<>1,TESTSKIP(1),TXT引用.TXT());
这样,当条件符合时,就会在【通达信目录】\T0002\dlls文件夹下,生成一个文件CODE.TXT,里面就是所有符合条件的股票代码。
4号函数,功能:将通达信数据存为大智慧中使用的序列数据
第一步:按需在大智慧中新建自定义数据号
先在大智慧自定义数据管理器中,新建自定义数据,名称取名必须是数字,要与公式中的数据号对应,后面存储和调用都将用此数字作为数据号来区分。要用到几个数据就建几个数据号。属性选“股票相关序列值”项,建好后关闭该自定义数据管理器窗口。
第二步:新建保存数据公式
NO:=【数据号】;{注释:自定义数据数据号(大智慧中叫自定义数据名称)}
DATA:=【值】;{ 注释:要保存的数据, 注意:最大值包含小数点不能超7位}
TDXDLL1(4,STR2CON(STRCAT(CON2STR(INTPART(NO/10),0),CODE)),DATE*10+(NO-INTPART(NO/10)*10), ROUND2(DATA,2));
使用时,请把公式中【】里的内容替换成你实际的公式表达(含【】一起替换掉)
如:
NO:=5;
DATA:=C;
TDXDLL1(4,STR2CON(STRCAT(CON2STR(INTPART(NO/10),0),CODE)),DATE*10+(NO-INTPART(NO/10)*10), ROUND2(DATA,2));
以上公式表示保存历史及当日的收盘价到5号自定义数据中。
第三步:在配置文件中设置存储的路径
本函数存储的数据是供大智慧中使用的,因此要设置存储数据的文件位置。请在本DLL配置文件TdxSaveData.ini中第2行后面,增加一行:
DzhSelfDataSavePath=【大智慧主目录】\USERDATA\SelfData
如果配置文件中未设置此路径,存储的数据文件将放在通达信目录下:
【通达主信目录】\T0002\dlls\USERDATA\SelfData
这样的话你就需要将整个USERDATA复制到大智慧主程序目录下才可使用。
第四步:下载一年以上的完整日K数据
第五步:建股池,定时自动保存数据
参考1号函数用法
第五步:在大智慧中调用数据的公式
SELFDATA(【数据号】)
如调用5号数据的公式为SELFDATA(5)
这样就可以在大智慧中调用你通达信里保存的自定义数据了。
高级应用:
A、配置文件TdxSaveData.ini中,在[set]节点下,添加一行WritErrData=1或0 可以决定无效值是否被写入。无效值指无值或超长值(在通达信里输出时是一条小横线),但0除外,0是有效值。
WritErrData=1 无效值将会以 一个很长的负数形式写入,
WritErrData=0 无效值不写入; 默认不写入
C、配置文件TdxSaveData.ini中,在[set]节点下,添加一行RwriteData=0 (或1或2或3) 可以决定写入数据时是以什么模式写入。
RwriteData=0 补充模式: 仅插入新的数据项
RwriteData=1 清空模式: 原有数据全清空,然后全部新写入默认1清空模式
RwriteData=2 覆盖模式:用现有数据覆盖同项数据
RwriteData=3 仅覆盖当日: 覆盖当日数据,之前数据不理会
举例:
原有数据:大前天A;昨天B;今天C
待写数据: 前天X;昨天Y;今天Z
四种模式写入后的最终结果:
补充模式: 大前天A;前天X;昨天B;今天C
清空模式: 前天X;昨天Y;今天Z
覆盖模式: 大前天A;前天X;昨天Y;今天Z
仅覆盖当日:大前天A;昨天B;今天Z
5号函数,功能:删除通达信序列数据
功能:
删除通达信某个数据号下所有代码在指定日期的数据。
公式:
TDXDLL1(5,【数据号】,【开始日期】,【结束日期】)
日期格式是6位,如240222 表示2024年2月22日
年份的后2位接月接日;月或日不足2位的补个0
如果只有开始日期,结束日期填0,则只删除开始日期这一天对应的所有代码的数据;如果既有开始又有结束日期,则删除这个连续时间段内所有代码的数据(包含开始和结束这两个日期)。
说明:本函数删除的是1号函数建立的自定义数据,所以删除的自定义数据文件路径与1号函数建立数据时的路径是同个设置值。
高级:
仅保留最近一个月自定义数据,其它删除:
TDXDLL1(5,【数据号】,200308,MACHINEDATE-1000100);
6号函数,功能:删除大智慧序列数据
功能:
删除通达信某个数据号下所有代码在指定日期的数据。
公式:
TDXDLL1(6,【数据号】,【开始日期】,【结束日期】)
日期格式是6位,如240222 表示2024年2月22日
年份的后2位接月接日;月或日不足2位的补个0
如果只有开始日期,结束日期填0,则只删除开始日期这一天对应的所有代码的数据;如果既有开始又有结束日期,则删除这个连续时间段内所有代码的数据(包含开始和结束这两个日期)。
说明:本函数删除的是4号函数建立的自定义数据。所以删除的自定义数据文件路径与4号函数建立数据时的路径是同个设置值。
=====================================================================================================================
大智慧版说明书
(DZHSD32.dll)
一、功能
1. 可以将大智慧中公式或函数能取到的数据实时转成通达信的自定义序列数据,且立马即可在通达信公式中调用。
此功能特别适合批量、定时保存重要的盘中实时数据。因为保存格式是序列数据,所以它不仅会保存当天的,也会一起保存之前日期的历史数据。
DLL转成的是通达信可直接使用的格式,DLL自动保存数据完成后,即可通过公式调用这些数据,不需要额外繁杂的导入操作。
2. 除保存成自定义序列数据外,也可保存成通达信的自定义外部(文本、数值)数据,即保存到extern_user.txt文件中(通达信直接可调用它)。
3. 可将大智慧板块或股池中的代码保存到 .TXT或 .BLK(通达信的板块)文件,实现与其它软件之间的代码互通。
【部分使用场景举例】:
1.竞价图选股:竞价结束后,想找出竞价走势(竞价图)9:20到9:24四分钟走直线,最后1分钟向上飞涨3个点以上的个股。
逻辑思路:使用股池,利用它可定时运行的特点,通过DLL的第1个函数功能,将所有个股竞价时段共5分钟的价格保存成5个数据值。当竞价结束后,即可对这5个值进行比较运算,筛选出符合条件的个股。因为通过DLL已经保存了值1、值2、值3、值4、值5共五个值,选股时公式条件设置就是:值1=值2=值3=值4;值5>值4*1.03 就能选出竞价图前4分钟直线,后1分钟涨3个点的股票来了。有了思路,转成公式表达就简单多了。
另外说一点,如果感觉一分钟取一次价太粗糙,你也可以改成10秒保存一次数据值。
2.盘中实时变化又无法事后调用的行情数据:盘中有些数据是实时变化的,后面无法对它进行调用或比对,这时就需要DLL帮你前面发生的数据保存起来,后面就可以通过调用存储的自定义数据对它进行运算比对了。
3.不同大智慧共享数据:因保存序列数据的路径是可以自由设置的,所以既可保存到本大智慧中供调用,也可保存到本机其它大智慧里使用。
4.短周期选股,如15分钟选股、5分钟选股:如果盘中要实现速度快、出票及时又不用下载分钟数据的简易的短周期选股,可使用本DLL。如5分钟选股,可以将盘中总计4小时,每5分钟存一次数据(股价),共存储成48个数据号,这样公式中就可对这48个数据进行比对筛选,实现粗略的短周期选股。
5.大智慧数据(如ACE)同步给通达信用:本DLL有大智慧版本,可以将大智慧盘中能取到的数据,自动转为通达信的自定义数据(也是通过股池来负责保存数据),且整个数据的存储过程是自动的,数据直接存到通达信里,通达信可直接调用,无需任何人工操作步骤。
6.通达信的数据同步给大智慧使用
二、安装及使用
共二个文件:SD32.dll和SD32.ini配置文件
如果是64位版本: SD64.dll和SD64.ini配置文件(下面以32位示例,64位的请把公式中32改成64)
将上面这两个文件复制到大智慧主程序文件夹下即完成了安装。
函数F1 功能:将大智慧数据存为通达信的序列数据
第一步:DLL配置保存自定义数据的路径
打开配置文件SD32.ini,在[set]下面任意位置新增一行,内容:
SelfDataSavePath=【通达信目录】\T0002\signals
注:请把【通达信目录】改为你的通达信主目录。
第二步:在通达信中按需新建自定义数据号
在通达信自定义数据管理器中,新建数据号,要用到几个数据就建几个数据号。数据号与公式调用中的数据号对应,且值不超99。属性选“序列(日期、数值)”项,建好后关闭该自定义数据管理器窗口。
第三步:大智慧中保存数据的公式:
NO:=【数据号】;{注释:此处自定义数据的数据号,不能大于99}
DATA:=【值】;{ 注释:要保存的数据, 注意:最大值包含小数点不能超7位}
"SD32@F1"(DATA,NO);
使用时,请把公式中【】里的内容替换成你实际的公式表达
如:
NO:=88;
DATA:=CLOSE;
"SD32@F1"(DATA,NO);
以上公式表示保存历史及当日的收盘价到通达信的自定义数据中,数据号88号。
第四步:大智慧里建股池定时保存数据
因序列数据一般都用于一批股票,所以使用股池来完成保存数据的工作比较合适。将公式放在股池的转移条件里,源池设置成这一批股票。另外,因同一个数据号同一日期只能有一个数据,所以要保存当天多个时间段数据的话,需要保存成不同的数据号。
假设保存竞价时段每分钟的价格数据供后续调用,可设计股池如下:
从上图设计可看出,它利用了股池的定时执行一次功能,股池自动会在9:21、9:22、9:23、9:24、9:25分别将收盘价保存到各自的数据号中。后续通过调用自定义数据函数,即可取到该5个值。
第四步:通达信中调用数据公式:
SIGNALS_USER(【数据号】,2)
如调用5号数据的公式为 SIGNALS_USER(5,2)
这样就可以调用你大智慧里保存进去的任何自定义数据了。
函数F2 功能:将大智慧数据存为大智慧的序列数据
第一步:DLL配置保存自定义数据的路径
打开配置文件SD32.ini,在[set]下面任意位置新增一行,内容:
DzhSelfDataSavePath=【大智慧目录】\USERDATA\SelfData
注:请把【大智慧目录】改为你的大智慧主目录。
第二步:在大智慧中按需新建自定义数据号
在大智慧自定义数据管理器中,新建一个自定义数据,注意:名称必须为数字(我们称它为数据号),要用到几个数据就建几个数据号。数据号与公式调用中的数据号对应。属性选“股票相关序列值”项,建好后关闭该自定义数据管理器窗口。
第三步:大智慧中保存数据的公式:
NO:=【数据号】;{注释:此处填自定义数据名称,必须为数字}
DATA:=【值】;{ 注释:要保存的数据}
"SD32@F2"(DATA,NO);
使用时,请把公式中【】里的内容替换成你实际的公式表达(含【】一起替换掉)
如:
NO:=1;
DATA:=CLOSE;
"SD32@F2"(DATA,NO);
以上公式表示保存历史及当日的收盘价到大智慧的自定义数据中,数据号(自定义数据名称)为1。
第四步:下载一年以上的完整日K数据
第五步:大智慧里建股池定时保存数据
因序列数据一般都用于一批股票,所以使用股池来完成保存数据的工作比较合适。将公式放在股池的转移条件里,源池设置成这一批股票。另外,因同一个数据号同一日期只能有一个数据,所以要保存当天多个时间段数据的话,需要保存成不同的数据号。
假设保存竞价时段每分钟的价格数据供后续调用,可设计股池如下:
从上图设计可看出,它利用了股池的定时执行一次功能,股池自动会在9:21、9:22、9:23、9:24、9:25分别将收盘价保存到各自的数据号中。后续通过调用自定义数据函数,即可取到该5个值。
第六步:大智慧中调用数据公式:
selfdata (‘【数据号】’)
如调用名称为1的数据的公式为SELFDATA(‘1’)
注意数据号两头要加单引号。这样就可以调用你大智慧里保存进去的任何自定义数据了。
高级应用:
A、配置文件SD32.ini中,在[set]节点下,添加一行WritErrData=1或0 可以决定无效值是否被写入。无效值指无值或超长值(在通达信里输出时是一条小横线),但0除外,0是有效值。
WritErrData=1 无效值将会以 一个很长的负数形式写入
WritErrData=0 无效值不写入; 默认不写入
B、配置文件DZHSD32.ini中,在[set]节点下,添加一行RwriteData=0 (或1或2或3) 可以决定写入数据时是以什么模式写入。
RwriteData=0 补充模式: 仅插入新的数据项
RwriteData=1 清空模式: 原有数据全清空,然后全部新写入 默认1清空模式
RwriteData=2 覆盖模式:用现有数据覆盖同项数据
RwriteData=3 仅覆盖当日: 覆盖当日数据,之前数据不理会
举例:
原有数据:大前天A;昨天B;今天C
待写数据: 前天X;昨天Y;今天Z
四种模式写入后的最终结果:
补充模式: 大前天A;前天X;昨天B;今天C
清空模式: 前天X;昨天Y;今天Z
覆盖模式: 大前天A;前天X;昨天Y;今天Z
仅覆盖当日:大前天A;昨天B;今天Z
注:
如果要追求存储速度更快,且不存在调用上一交易日的历史数据,则可以采用“仅覆盖当日”模式,即在配置文件第2行加入一行 RwriteData=3 这样写入数据的速度会快得多。经实测,在i3-10100内存16G的电脑上,全A共5300只股票,使用RwriteData=3模式,完成一个数据号的存入共耗时19秒。
函数F5 功能:将大智慧数据存为通达信自定义外部(文本、数值)数据
和自定义序列数据不同,自定义外数据是当天的、一维的数据,并不含有历史日期数据。
第一步:在通达信中新建数据号、使用股池保存数据和F1函数相同,参看楼上
第二步:大智慧中保存数据公式
"SD32@F5"(【数值】,【数据号】)
使用时,请把公式中【】里的内容替换成你实际的公式表达
如:"SD32@F5"(33,5) 即可保存到extern_user.txt中
格式如0|300310|5||33.00
以上这些不了解不要紧,只要知道如何存,后面如何调用即可。
第三步:通达信中调用数据公式
EXTERNVALUE(0,【数据号】)
如调用5号数据,公式为EXTERNVALUE(0,5)
函数F6 功能:将股票代码存为TXT或BLK文件
大智慧中选股出票,时常会想引入到其它自动交易、微信转发等软件工具中使用。此函数即可将代码保存为TXT文件或BLK文件。其中BLK文件为通达信板块文件的格式,所以也可用于代码同步到通达信。
(补充说下,存BLK文件到另一通达信目录里,如果需要在通达信软件上实时看到效果,需要对存入的目标通达信进行设置:在“选项” - “自定义板块设置” 窗中,取消勾选 “缓存板块” 项,即可实现实时热更新)
公式:
"SD32@F6"(【类型】, 【索引】);
【类型】:1为存成.TXT;2为存成.BLK;3为存成大智慧的.BLK
【索引】:指在本DLL的配置文件SD32.ini中[set]节点下“SaveFile”键名后跟的数字。其后跟的值是为了确定此TXT文件存放的路径。
听着很难理解是吧,举个例子就简单了:
如果你想把代码存入到c:\1.txt中,那么请先在SD32.ini文件的[set]下面,添加一行:SaveFile2=c:\1.txt,公式就使用"SD32@F6"(1,2);
可以看出,公式中有个2,和SaveFile后面也有个2,它们是对应的。
如果你还想再存其它代码到e:\1.txt中,你就在TdxSaveData.ini文件的[set]下面,再添加一行:SaveFile4=e:\1.txt,公式就使用"SD32@F6"(1,4);
可以看出,公式中有个4,和SaveFile后面也有个4,它们是对应的。这个数字就是一个代号,你可以随意换数字,但必须保证公式和配置文件中,这两数字是对应相同的。这样的设计主要是为了能同时保存多个TXT,且又能让DLL区分各TXT保存的不同路径。
存BLK类型文件与存TXT相同方法,唯有类型参数用2这一区别。如"SD32@F6"(2,4);这里就不再重复介绍了。
另外,其实保存TXT的路径不设置,也会输出到默认的路径,默认路径就是DLL文件所在的文件夹,保存的默认文件名为code.txt;当然BLK文件也是一样。,会存为code.blk。
如果用在选股公式中,可参照以下写法:
if 条件判断变量>0 then
begin
"SD32@SAVECODE"(3,1);
End
此功能可用于将大智慧股池出票输出到大智慧自选股板块里(当然需要运行一次大智慧自选股本地化工具.exe)
例:将大智慧股池出票输出到大智慧自选股8:
公式:上方公式
配置文件中加行:SaveFile1=大智慧主目录\USERDATA\block\自选股8.blk
函数F7 功能:将股票代码按指定模板发送到钉钉群
公式:
"SD32@F7"(【索引】,【价格】,【涨幅】,【其它】);
在DLL的配置文件SD32.ini中[set]节点下添加二行,分别是:
DingDingUrl1=【钉钉机器人设置中的Webhook 地址】
DingDingMode1=【发送的消息模板】
这里DingDingUrl和DingDingMode后跟的数字1即为索引,它是个大于0的数字,可以使用任意数字,只要索引号和对应的调用公式中的索引号对应即可。以用于区分不同的发送地址和发送内容。
举例:
假设现在使用1号索引来配置模板和Webhook地址,再使用同样的1号索引来在大智慧公式中调用并发送消息:
配置文件SD32.ini中[set]节点下,添加二行:
DingDingUrl1=https://oapi.dingtalk.com/robot/send?access_token=XXXXXXXXXX
DingDingMode1=预警报告: 股票代码:[代码][换行]股票名称:[名称][换行]价格:[价格][换行]涨幅:[涨幅][换行]其它:[其它][换行]时间:[时间]
大智慧中调用公式则为:
"SD32@F7"(1,CLOSE, DYNAINFO(14),0);
假设要使用2号作为索引,那么在配置文件中添加的就是
DingDingUrl2=…
DingDingMode2=…
同样,调用公式就要改为
"SD32@F7"(2,CLOSE, DYNAINFO(14),0);
发送预警消息时,模板中[代码]在实际发送时,会连同方括号一起,被替换为大智慧传给DLL的真实的股票代码。模板中的[价格]将会被替换成传给DLL的第2个参数(即CLOSE),[涨幅]被替换成传给DLL的第3个参数(即DYNAINFO(14));[其它]被替换成传给DLL的第4个参数。[换行]将会被替换成钉钉消息里的换行。
另外要注意的是,钉钉群机器人安全设置中,要在“自定义关键词”前打勾,关键词可以任意填,但必须要在发送的消息模板中夹带此关键词。否则发送时钉钉会返回无关键词的报错。
相同代码,每10秒至多发送一次
股涨幅:=((CLOSE-REF(CLOSE,1))/REF(CLOSE,1))*100;
其它值:=0;
"SD32@F7"(1,CONST(CLOSE),CONST(股涨幅),其它值);
函数F3 功能:删除通达信的自定义数据
公式:
"SD32@F3"(【数据号】,【开始日期】,【结束日期】)
日期格式是6位,如240222 表示2024年2月22日
年份的后2位接月接日;月或日不足2位的补个0
如果只有开始日期,结束日期填0,则只删除开始日期这一天对应的所有代码的数据;如果既有开始又有结束日期,则删除这个连续时间段内所有代码的数据(包含开始和结束这两个日期)。
说明:本函数删除的是第1个函数F1所建立的自定义数据,所以其所删文件的路径与F1函数建立数据时的路径是同个设置值。
函数F4 功能:删除大智慧的自定义数据
公式:
"SD32@F4"(【数据号】,【开始日期】,【结束日期】)
日期格式是6位,如240222 表示2024年2月22日
年份的后2位接月接日;月或日不足2位的补个0
如果只有开始日期,结束日期填0,则只删除开始日期这一天对应的所有代码的数据;如果既有开始又有结束日期,则删除这个连续时间段内所有代码的数据(包含开始和结束这两个日期)。
说明:本函数删除的是F2函数所建立的自定义数据,所以其所删文件的路径与F2函数建立数据时的路径是同个设置值。