通达信自动交易函数
这是通达信技术指标编程 编程的参考
http://www.gupiaohelp.com/help/13_4.html python 可以参考调试 详细请官网
############## 股票自动交易软件助手提供了Order.dll , 扩展了大智慧,飞狐,通达信等公式语言的函数。利用这些函数,可以在公式里精细控制下单逻辑和交易策略。比如读取持仓数据,可用资金,指定下单数量等等。
需要注意的是,一般情况下,并不需要在公式里调用这些函数就能实现股票程序化的交易策略。对于一般用户,或者对大部分常用指标来说,使用公式预警条件单更加方便,简单,而不需要在公式里调用下单函数。只需要建立对应的助手预警条件单,并在大智慧,通达信等软件中设置好预警指标即可。只有在使用股票池自动交易或者图表交易,纯公式下单的情况下才需要这些函数。
要使用股票自动交易软件助手提供的交易函数,先把 order.dll 复制到 通达信目录 T0002\dlls 下面,然后还要绑定DLL,查看如何绑定DLL。通达信调用过Order.dll后,助手会在通达信目录下生成 “助手日志” 目录,里面有调用函数的日志信息,可以查看这个日志信息来确定调用是否正确,条件是否成立等等。一般条件成立了但是助手没反应,可以看这个日志来找出原因。如果这日志的显示是正常的,你可以进一步去助手的安装目录里查看助手日志进一步确定原因。
重要提示 股票自动交易软件助手提供的有些函数的参数,是 条件和变量的乘积,如 买入 函数的最后个参数就是 条件数量。表示在条件为1(即成立的情况下),买入对应数量的股票。比如 条件1000, 条件成立的情况下,条件就是1,乘以1000结果就是1000股,助手就会买入1000股,在条件不成立的情况下条件的数值就会等于0,乘以1000结果也是0,代表条件不成立,因此助手不会买入。注意:条件只能是逻辑判断值,1或者0,不能是其他运算的结果,例如 条件:=C >0;不要条件:=C;或条件:=MA(C,5)这样,前者是逻辑判断值,后面是数值计算。
重要提示2 通达信的调用外部dll函数的方式比较特别,首先需要绑定dll,绑定到第几号dll,函数调用的函数名就是 TDXDLL数字 ,我们一般绑定助手Order.dll为第一个dll,因此调用助手提供的函数的名字都是 TDXDLL1,表示调用第一个绑定的dll,也就是Order.dll。此外每个调用都必须指定调用的是dll里的第几个函数,Order.dll提供的买入函数是第一个函数,因此调用买入函数就像这样:买入股票:=TDXDLL1(1, STR2CON(CODE), 1, 100);其中第一个参数1,表示第一个函数就是买入函数。同理,卖出股票函数是第二个函数,因此调用卖出函数就像这样:卖出股票:TDXDLL1(2, STR2CON(CODE), 2, 100);其他函数余此类推。
另外,通达信的函数最多只能有4个参数,并且参数不能省略,而有些助手函数不需要那么多参数的,这时候只要填0就行。并且通达信的参数只能传递数值,因此股票要传递股票代码的时候调用 STR2CON(CODE), 这样来传递。由于最多只能传递4个参数,因此不能像大智慧一样指定助手编号,如果要指定助手编号,需要调用 选择账户1:=TDXDLL1(7, 1, 0, 0); 这样来调用。大部分情况下可以忽略不管助手编号。只有在对不同的助手(对应的不同交易软件的交易账户)使用不同的下单数量时才需要用到。如果你从来没改过助手设置里的助手编号,所有助手都会执行下单动作,在这种情况下,即使开了多个助手,也不需理会这个参数。
助手函数列表 买入函数 TDXDLL1(1, 股票代码, 公式编号,条件数量) 条件成立时(即 条件:=1),买入指定数量的股票 卖出函数 TDXDLL1(2, 股票代码, 公式编号,条件数量) 条件成立时(即 条件:=1),卖出指定数量的股票 查询持仓数量 TDXDLL1(3, 股票代码, 类型, 0) 查询当前股票持仓数量,单位(股) 查询可卖数量 TDXDLL1(3, 股票代码, 类型, 0) 查询当前股票可卖数量,单位(股) 查询成本价 TDXDLL1(3, 股票代码, 类型, 0) 查询当前股票的成本价 查询盈利金额 TDXDLL1(3, 股票代码, 类型, 0) 查询当前股票的盈利金额(元) 查询盈利百分比 TDXDLL1(3, 股票代码, 类型, 0) 查询当前股票的盈利百分比(%),盈利5.5%,返回5.5 查询持仓市值 TDXDLL1(3, 股票代码, 类型, 0) 查询当前股票的持仓市值 下单天数 TDXDLL1(3, 股票代码, 类型, 0) 查询当前股票的下单天数,即上次助手下单离现在的天数 持仓天数 TDXDLL1(3, 股票代码, 类型, 0) 查询当前股票的持仓天数 上次买入价 TDXDLL1(3, 股票代码, 类型, 0) 查询当前股票的上次买入价 查询可撤买单 TDXDLL1(4, 股票代码,下单类型, 查询类型) 查询当前股票的可撤买单数量(股) 查询可撤买单时间 TDXDLL1(4, 股票代码,下单类型, 查询类型) 查询当前股票的可撤买单的时间离现在的秒数(秒) 查询可撤卖单 TDXDLL1(4, 股票代码,下单类型, 查询类型) 查询当前股票的可撤卖单数量(股) 查询可撤卖单时间 TDXDLL1(4, 股票代码,下单类型, 查询类型) 查询当前股票的可撤卖单的时间离现在的秒数(秒) 撤买单 TDXDLL1(6, 股票代码, 条件类型) 条件成立时撤销当前股票的买入单 撤卖单 TDXDLL1(6, 股票代码, 条件类型) 条件成立时撤销当前股票的卖出单 账户总资产 TDXDLL1(5, 类型) 查询当前账户的总资产(元) 账户可用资金 TDXDLL1(5, 类型) 查询当前账户的可用资金(元) 账户持仓市值 TDXDLL1(5, 类型) 查询当前账户的账户持仓总市值(元) 账户总盈利 TDXDLL1(5, 类型) 查询当前账户的账户总盈利(元) 持仓个数 TDXDLL1(5, 类型) 查询当前账户的持仓股票数量 清仓 TDXDLL1(9, 股票代码, 条件清仓类型) 条件成立时执行清仓操作 清半仓 TDXDLL1(9, 股票代码, 条件清仓类型) 条件成立时执行清半仓操作 启动交易 TDXDLL1(12, 股票代码, 条件) 条件成立时启动助手自动交易,相当于按下启动按钮 停止交易 TDXDLL1(13, 股票代码, 条件) 条件成立时停止助手自动交易,相当于按下停止按钮 启用条件 TDXDLL1(10, 股票代码, 条件) 条件成立时启用当前股票的条件单或止损设置 禁止条件 TDXDLL1(11, 股票代码, 条件) 条件成立时禁用当前股票的条件单或止损设置 刷新持仓 TDXDLL1(14, 股票代码, 条件) 条件成立时刷新持仓数据 设置买入价 TDXDLL1(15, 股票代码, 类型, 价格) 如果要指定买入价需在调用买入函数前调用 设置卖出价 TDXDLL1(15, 股票代码, 类型, 价格) 如果要指定卖出入价需在调用买入函数前调用 日志函数 TDXDLL1(16, 股票代码, 数值) 把数值写到当前日志文件里,方便调试 MsgBox函数 TDXDLL1(16, 股票代码, 数值) 把数值以消息框的形式弹出来,方便调试 指定助手编号和账户编号 TDXDLL1(7, 助手编号, 账号编号) 指定助手编号和账户编号 发送邮件,QQ信息 TDXDLL1(18, 股票代码, 发送方式, 条件消息类型) 条件成立时(即 条件:=1),以指定的发送方式发送指定类型的消息 更多函数将完善 函数说明 TDXDLL1(1, 股票代码, 公式编号,条件数量) 条件成立时(即 条件:=1),买入指定数量的股票
参数 1 1,第一个函数是买入函数,因此填1 股票代码 股票代码,一般写成 STR2CON(CODE) 就行 公式编号 用来区分是哪个公式或者转移条件买入的,买入和卖出的编号不要相同 条件数量 条件,条件变量;数量,买入数量,如果填1,按助手条件单里的指定量买入 例子 {上穿5日均线买入1000股} 条件:Cross(C, MA(C,5)); 买入股票:=TDXDLL1(1, STR2CON(CODE), 1, 条件1000); TDXDLL1(2, 股票代码, 公式编号,条件*数量) 条件成立时(即 条件:=1),卖出指定数量的股票
参数 2 2,第二个函数是卖出函数,因此填2 股票代码 股票代码,一般写成 STR2CON(CODE) 就行 公式编号 用来区分是哪个公式或者转移条件卖出的,买入和卖出的编号不要相同 条件数量 条件,条件变量;数量,卖出数量,如果填1,按助手条件单里的指定量卖出 例子 {下穿5日均线卖出} 条件:Cross( MA(C,5), C); 卖出股票:=TDXDLL1(2, STR2CON(CODE), 2, 条件1); TDXDLL1(3, 股票代码, 类型, 0) 查询当前股票的持仓数量(股)
参数 3 3,第三个函数是查询持仓信息函数,因此填3 股票代码 股票代码,一般写成 STR2CON(CODE) 就行 类型 0,表示查询持仓数量,以股为单位 0 最后一个参数没用到,填0就行 例子 个股持仓股数: TDXDLL1(3, STR2CON(CODE), 0, 0); TDXDLL1(3, 股票代码, 类型, 0) 查询当前股票的可卖数量(股)
参数 3 3,第三个函数是查询持仓信息函数,因此填3 股票代码 股票代码,一般写成 STR2CON(CODE) 就行 类型 1,表示查询可卖数量,以股为单位 0 最后一个参数没用到,填0就行 例子 个股可卖股数: TDXDLL1(3, STR2CON(CODE), 1, 0); TDXDLL1(3, 股票代码, 类型, 0) 查询当前股票的成本价(元)
参数 3 3,第三个函数是查询持仓信息函数,因此填3 股票代码 股票代码,一般写成 STR2CON(CODE) 就行 类型 2,表示查询查询当前股票的成本价 0 最后一个参数没用到,填0就行 例子 成本价: TDXDLL1(3, STR2CON(CODE), 2, 0); TDXDLL1(3, 股票代码, 类型, 0) 查询当前股票的盈利金额(元)
参数 3 3,第三个函数是查询持仓信息函数,因此填3 股票代码 股票代码,一般写成 STR2CON(CODE) 就行 类型 3,表示查询当前股票的盈利金额 0 最后一个参数没用到,填0就行 例子 盈利金额: TDXDLL1(3, STR2CON(CODE), 3, 0) TDXDLL1(3, 股票代码, 类型, 0) 查询当前股票的盈利百分比(%)
参数 3 3,第三个函数是查询持仓信息函数,因此填3 股票代码 股票代码,一般写成 STR2CON(CODE) 就行 类型 4,表示查询当前股票的盈利百分比(%),盈利5.5%,返回5.5 0 最后一个参数没用到,填0就行 例子 盈利百分比: TDXDLL1(3, STR2CON(CODE), 4, 0); TDXDLL1(3, 股票代码, 类型, 0) 查询当前股票的持仓市值(元)
参数 3 3,第三个函数是查询持仓信息函数,因此填3 股票代码 股票代码,一般写成 STR2CON(CODE) 就行 类型 5,表示查询当前股票的持仓市值 0 最后一个参数没用到,填0就行 例子 持仓市值: TDXDLL1(3, STR2CON(CODE), 5, 0); TDXDLL1(3, 股票代码, 类型, 0) 查询当前股票的下单天数
参数 3 3,第三个函数是查询持仓信息函数,因此填3 股票代码 股票代码,一般写成 STR2CON(CODE) 就行 类型 6,表示查询当前股票的下单天数,只对助手下的单有效,并且依赖下单记录 0 最后一个参数没用到,填0就行 例子 下单天数: TDXDLL1(3, STR2CON(CODE), 6, 0); TDXDLL1(3, 股票代码, 类型, 0) 查询当前股票的持仓天数
参数 3 3,第三个函数是查询持仓信息函数,因此填3 股票代码 股票代码,一般写成 STR2CON(CODE) 就行 类型 7,查询当前股票的持仓天数,只对助手下的单有效(如果设置了下单时间都有效) 0 最后一个参数没用到,填0就行 例子 持仓天数: TDXDLL1(3, STR2CON(CODE), 7, 0); TDXDLL1(3, 股票代码, 类型, 0) 查询当前股票的上次买入价
参数 3 3,第三个函数是查询持仓信息函数,因此填3 股票代码 股票代码,一般写成 STR2CON(CODE) 就行 类型 8,查询当前股票的上次买入价,只对助手下的单有效 0 最后一个参数没用到,填0就行 例子 上次买入价: TDXDLL1(3, STR2CON(CODE), 8, 0); TDXDLL1(4, 股票代码,下单类型, 查询类型) 查询当前股票的可撤买单数量(股)
参数 4 4,第四个函数是查询持仓撤单函数,因此填4 股票代码 股票代码,一般写成 STR2CON(CODE) 就行 下单类型 0,查询买入单,1查询卖出单 查询类型 0,查询数量,1查询时间 例子 可撤买单数量: TDXDLL1(4, STR2CON(CODE), 0, 0); TDXDLL1(4, 股票代码,下单类型, 查询类型) 查询当前股票的可撤买单距现在的时间(秒)
参数 4 4,第四个函数是查询持仓撤单函数,因此填4 股票代码 股票代码,一般写成 STR2CON(CODE) 就行 下单类型 0,查询买入单,1查询卖出单 查询类型 0,查询数量,1查询时间 例子 买单已过秒数: TDXDLL1(4, STR2CON(CODE), 0, 1); TDXDLL1(4, 股票代码,下单类型, 查询类型) 查询当前股票的可撤卖单数量(股)
参数 4 4,第四个函数是查询持仓撤单函数,因此填4 股票代码 股票代码,一般写成 STR2CON(CODE) 就行 下单类型 0,查询买入单,1查询卖出单 查询类型 0,查询数量,1查询时间 例子 可撤卖单数量: TDXDLL1(4, STR2CON(CODE), 1, 0); TDXDLL1(4, 股票代码,下单类型, 查询类型) 查询当前股票的可撤卖单距现在的时间(秒)
参数 4 4,第四个函数是查询持仓撤单函数,因此填4 股票代码 股票代码,一般写成 STR2CON(CODE) 就行 下单类型 0,查询买入单,1查询卖出单 查询类型 0,查询数量,1查询时间 例子 卖单已过秒数: TDXDLL1(4, STR2CON(CODE), 1, 1); TDXDLL1(6, 股票代码, 条件*类型, 0) 条件成立时撤销当前股票的买单
参数 6 6,第六个函数是撤单函数,因此填6 股票代码 股票代码,一般写成 STR2CON(CODE) 就行 类型 1,撤买单;类型:2,撤卖单 0 最后一个参数没用到,填0就行 例子 买单已过秒数:= TDXDLL1(4, STR2CON(CODE), 0, 1); 条件:买单已过秒数 > 60; 撤买单:=TDXDLL1(6, STR2CON(CODE), 条件1, 0); TDXDLL1(6, 股票代码, 条件类型, 0) 条件成立时撤销当前股票的卖单
参数 6 6,第六个函数是撤单函数,因此填6 股票代码 股票代码,一般写成 STR2CON(CODE) 就行 类型 1,撤买单;类型:2,撤卖单 0 最后一个参数没用到,填0就行 例子 卖单已过秒数: TDXDLL1(4, STR2CON(CODE), 1, 1); 条件:卖单已过秒数 > 60; 撤卖单 := TDXDLL1(6, STR2CON(CODE), 条件*2, 0); TDXDLL1(5, 类型, 0, 0) 查询当前账号的总资产
参数 5 5,第五个函数是查询账号信息,因此填5 类型 0, 查询当前账号的总资产(元) 0 这个参数没用到,填0就行 0 这个参数没用到,填0就行 例子 账户总资产 : TDXDLL1(5, 0, 0, 0); TDXDLL1(5, 类型, 0, 0) 查询当前账号的可用资金
参数 5 5,第五个函数是查询账号信息,因此填5 类型 1, 查询当前账号的可用资金(元) 0 这个参数没用到,填0就行 0 这个参数没用到,填0就行 例子 账户可用资金 : TDXDLL1(5, 1, 0, 0); TDXDLL1(5, 类型, 0, 0) 查询当前账号的总持仓市值
参数 5 5,第五个函数是查询账号信息,因此填5 类型 2, 查询当前账号的总持仓市值(元) 0 这个参数没用到,填0就行 0 这个参数没用到,填0就行 例子 账户总持仓市值 : TDXDLL1(5, 2, 0, 0); TDXDLL1(5, 类型, 0, 0) 查询当前账号的总盈利金额
参数 5 5,第五个函数是查询账号信息,因此填5 类型 3, 查询当前账号的总盈利金额(元) 0 这个参数没用到,填0就行 0 这个参数没用到,填0就行 例子 账户总盈利金额 : TDXDLL1(5, 3, 0, 0); TDXDLL1(5, 类型, 0, 0) 查询当前账号的持仓个数
参数 5 5,第五个函数是查询账号信息,因此填5 类型 4, 查询当前账号的持仓个数 0 这个参数没用到,填0就行 0 这个参数没用到,填0就行 例子 持仓个数 : TDXDLL1(5, 4, 0, 0); TDXDLL1(9, 股票代码, 条件*清仓类型) 条件成立时执行清仓操作
参数 9 9,第九个函数是清仓函数,因此填9 股票代码 股票代码,一般写成 STR2CON(CODE) 就行 类型 类型:1,全部清仓;类型:2,清半仓 0 最后一个参数没用到,填0就行 例子 {此例子假定当前股票池只有上证指数一个股票,当上证指数跌破5日均线清仓} 条件:Cross(MA(C,5), C); 清仓:= TDXDLL1(9, STR2CON(CODE), 条件1, 0); TDXDLL1(9, 股票代码, 条件清仓类型) 条件成立时执行半清仓操作
参数 9 9,第九个函数是撤单函数,因此填9 股票代码 股票代码,一般写成 STR2CON(CODE) 就行 类型 类型:1,全部清仓;类型:2,清半仓 0 最后一个参数没用到,填0就行 例子 {此例子假定当前股票池只有上证指数一个股票,当上证指数跌破5日均线清半仓} 条件:Cross(MA(C,5), C); 清半仓:= TDXDLL1(9, STR2CON(CODE), 条件*2, 0); TDXDLL1(12, 股票代码, 条件) 条件成立时启动助手自动交易,相当于按下助手开始按钮
参数 12 12,第十二个函数是启动自动交易函数,因此填12 股票代码 股票代码,一般写成 STR2CON(CODE) 就行 条件 条件变量 0 最后一个参数没用到,填0就行 例子 {此例子假定当前股票池只有上证指数一个股票,当上证指数上穿5日均线开启自动交易} 条件:Cross(C, MA(C,5)); 启动交易:= TDXDLL1(12, STR2CON(CODE), 条件, 0); TDXDLL1(13, 股票代码, 条件) 条件成立时停止助手自动交易,相当于按下助手停止按钮
参数 13 13,第十三个函数是停止自动交易函数,因此填13 股票代码 股票代码,一般写成 STR2CON(CODE) 就行 条件 条件变量 0 最后一个参数没用到,填0就行 例子 {此例子假定当前股票池只有上证指数一个股票,当上证指数下穿5日均线停止自动交易} 条件:Cross( MA(C,5), C); 停止交易:= TDXDLL1(13, STR2CON(CODE), 条件, 0); TDXDLL1(10, 股票代码, 条件) 条件成立时让当前股票的止损止盈或条件单生效
参数 10 10,第十个函数是条件生效函数,因此填10 股票代码 股票代码,一般写成 STR2CON(CODE) 就行 条件 条件变量 0 最后一个参数没用到,填0就行 例子 {当前股票价格在5日均线之上时让该股票的止损止盈或条件单生效} 条件:C > MA(C,5); 启用条件:= TDXDLL1(10, STR2CON(CODE), 条件, 0); TDXDLL1(11, 股票代码, 条件) 条件成立时禁止当前股票的止损止盈或条件单执行
参数 11 11,第十一个函数是禁止条件单生效函数,因此填11 股票代码 股票代码,一般写成 STR2CON(CODE) 就行 条件 条件变量 0 最后一个参数没用到,填0就行 例子 {当前股票价格在5日均线之下时禁止当前股票的止损止盈或条件单执行} 条件:C < MA(C,5); 禁止条件:= TDXDLL1(11, STR2CON(CODE), 条件, 0); TDXDLL1(14, 股票代码, 条件) 条件成立时刷新持仓数据
参数 14 14,第十四个函数刷新持仓函数,因此填14 股票代码 股票代码,一般写成 STR2CON(CODE) 就行 条件 条件成立时刷新持仓数据 0 这个参数没用到,填0 例子
条件:Cross(c, MA(c,5)); 刷新持仓:=TDXDLL1(14, STR2CON(CODE), 条件, 0); TDXDLL1(15, 股票代码, 类型, 价格) 设置买入价格
参数 15 15,第十五个函数是设置买入或卖出价格,因此填15 股票代码 股票代码,一般写成 STR2CON(CODE) 就行 类型 类型:0设置买入价格,类型:1设置卖出价格 价格 买入价格 例子 {设定卖5价买入} 设定买入价:=TDXDLL1(15, STR2CON(CODE) , 0, DYNAINFO(21)+0.04); TDXDLL1(15, 股票代码, 类型, 价格) 设置卖出价格
参数 15 15,第十五个函数是设置买入或卖出价格,因此填15 股票代码 股票代码,一般写成 STR2CON(CODE) 就行 类型 类型:0设置买入价格,类型:1设置卖出价格 价格 卖出价格 例子 {设定买5价卖出} 设定卖出价:=TDXDLL1(15, STR2CON(CODE) , 1, DYNAINFO(20)-0.04); TDXDLL1(16, 股票代码, 数值) 把数值写到当前日志文件里,方便调试
参数 16 16,第十六个函数是写日志信息,因此填16 股票代码 股票代码,一般写成 STR2CON(CODE) 就行 数值 把数值写到当前日志文件里,方便调试 0 这个参数没用到,填0就行 例子 {此例子把当前最新周期的收盘价写到日志文件,此文件位于大智慧或通达信等软件的助手日志下面} 写日志:=TDXDLL1(16, STR2CON(CODE), C, 0); TDXDLL1(17, 股票代码, 数值) 把数值以消息框的形式弹出来显示,方便调试
参数 17 17,第十七个函数是写日志信息,因此填17 股票代码 股票代码,一般写成 STR2CON(CODE) 就行 数值 把数值以消息框的形式弹出来显示,方便调试 0 这个参数没用到,填0就行 例子 {此例子把当前最新周期的收盘价弹出消息框} 消息框:=TDXDLL1(17, STR2CON(CODE), C, 0); TDXDLL1(7, 助手编号, 账号编号) 指定助手编号
参数 7 7,第七个函数是写指定助手编号,因此填7 助手编号 助手编号 账号编号 账号编号按助手条件单里的下拉列表显示顺序为准。这个参数只对尊贵版有用,其他没用到,填0就行 0 这个参数没用到,填0就行 例子 {指定(切换)助手编号,后面所有语句都是针对这个编号为1的助手起作用} 选择账户1:=TDXDLL1(7, 1, 0, 0);} 尊贵版选择账户例子 {指定(切换)账号编号,后面所有语句都是针对这个编号为1的账号起作用,账号编号以助手条件单里的排序为准} 选择账户1:=TDXDLL1(7, 0, 1, 0);} TDXDLL1(18, 股票代码, 发送方式, 条件*消息类型) 条件成立时发送邮件,QQ,微信信息
参数 18 18,第十八个函数是写日志信息,因此填18 股票代码 股票代码,一般写成 STR2CON(CODE) 就行 发送方式 0,发送邮件;1,发送QQ消息;2,发送微信 条件消息类型 条件成立时(即 条件:=1),发送指定消息类型的消息 例子 {价格大于10元发送类型为5的邮件} 条件:C > 10; 发邮件:=TDXDLL1(18, STR2CON(CODE), 0, 条件5);