大智慧自动交易函数

股票自动交易软件助手提供了Order.dll , 扩展了大智慧,飞狐,通达信等公式语言的函数。利用这些函数,可以在公式里精细控制下单逻辑和交易策略。比如读取持仓数据,可用资金,指定下单数量等等。

需要注意的是,一般情况下,并不需要在公式里调用这些函数就能实现股票程序化的交易策略。对于一般用户,或者对大部分常用指标来说,使用公式预警条件单更加方便,简单,而不需要在公式里调用下单函数。只需要建立对应的助手预警条件单,并在大智慧,通达信等软件中设置好预警指标即可。只有在使用股票池自动交易或者图表交易纯公式下单的情况下才需要这些函数。

要使用股票自动交易软件助手提供的交易函数,先把助手安装目录里的 Order.dll复制到大智慧根目录下面。大智慧调用过Order.dll后,助手会在大智慧目录下生成 助手日志 目录,里面有调用函数的日志信息,可以查看这个日志信息来确定调用是否正确,条件是否成立等等。一般条件成立了但是助手没反应,可以看这个日志来找出原因。如果这日志的显示是正常的,你可以进一步去助手的安装目录里查看助手日志进一步确定原因。

重要提示

股票自动交易软件助手提供的有些函数的参数,是 条件和变量的乘积,如 BUY 函数的第二个参数就是 条件*数量。表示在条件为1(即成立的情况下),买入对应数量的股票。比如 条件*1000, 条件成立的情况下,条件就是1,乘以1000结果就是1000股,助手就会买入1000股,在条件不成立的情况下条件的数值就会等于0,乘以1000结果也是0,代表条件不成立,因此助手不会买入。有人会问,为什么需要这样呢,大智慧有if语句,用 if 条件成立 then Buy(1000)这样不就行了吗?答案是大智慧if语句,无论怎么样条件是否成立,语句都会被执行的。因此只能用 条件*量 这种传递参数的办法来解决。注意:条件只能是逻辑判断值,1或者0,不能是其他运算的结果,例如 条件:=C >0;不要条件:=C;或条件:=MA(C,5)这样,前者是逻辑判断值,后面是数值计算。

重要提示2 关于助手编号

股票自动交易软件助手提供的几乎所有函数的最后一个参数,是 助手编号,默认是0,是可省略的。大部分情况下可以忽略不管。只有在对不同的助手(对应的不同交易软件的交易账户)使用不同的下单数量时才需要用到。如果你从来没改过助手设置里的助手编号,所有助手都会执行下单动作,在这种情况下,即使开了多个助手,也不需理会这个参数

另外,尊贵版助手的助手编号,个位上的数字表示真正的助手编号,而十位数上的数字表示账号编号。比如 10 表示助手编号为0里的第一个账户,20 表示助手编号为0里的第二个账户。账号编号以助手条件单里的显示顺序为准

助手函数列表
买入函数 BUY(价格, 条件*数量, 公式编号, 助手编号)
条件成立时(即 条件:=1),买入指定数量的股票
卖出函数 SELL(价格, 条件*数量, 公式编号, 助手编号)
条件成立时(即 条件:=1),卖出指定数量的股票
查询持仓数量 PosInfo(类型, 助手编号)
查询当前股票持仓数量,单位(股)
查询可卖数量 PosInfo(类型, 助手编号)
查询当前股票可卖数量,单位(股)
查询成本价 PosInfo(类型, 助手编号)
查询当前股票的成本价
查询盈利金额 PosInfo(类型, 助手编号)
查询当前股票的盈利金额(元)
查询盈利百分比 PosInfo(类型, 助手编号)
查询当前股票的盈利百分比(%),盈利5.5%,返回5.5
查询持仓市值 PosInfo(类型, 助手编号)
查询当前股票的持仓市值
下单天数 PosInfo(类型, 助手编号)
查询当前股票的下单天数,即上次助手下单离现在的天数
持仓天数 PosInfo(类型, 助手编号)
查询当前股票的持仓天数
上次买入价 PosInfo(类型, 助手编号)
查询当前股票的上次买入价
查询可撤买单 OrderInfo(下单类型, 查询类型, 助手编号)
查询当前股票的可撤买单数量(股)
查询可撤买单时间 OrderInfo(下单类型, 查询类型, 助手编号)
查询当前股票的可撤买单的时间离现在的秒数(秒)
查询可撤卖单 OrderInfo(下单类型, 查询类型, 助手编号)
查询当前股票的可撤卖单数量(股)
查询可撤卖单时间 OrderInfo(下单类型, 查询类型, 助手编号)
查询当前股票的可撤卖单的时间离现在的秒数(秒)
撤买单 CancelOrder(条件*类型, 助手编号)
条件成立时撤销当前股票的买入单
撤卖单 CancelOrder(条件*类型, 助手编号)
条件成立时撤销当前股票的卖出单
账户总资产 AccountInfo(类型, 助手编号)
查询当前账户的总资产(元)
账户可用资金 AccountInfo(类型, 助手编号)
查询当前账户的可用资金(元)
账户持仓市值 AccountInfo(类型, 助手编号)
查询当前账户的账户持仓总市值(元)
账户总盈利 AccountInfo(类型, 助手编号)
查询当前账户的账户总盈利(元)
持仓个数 AccountInfo(类型, 助手编号)
查询当前账户的持仓股票数量
清仓 ClearPosition(条件*清仓类型, 助手编号)
条件成立时执行清仓操作
清半仓 ClearPosition(条件*清仓类型, 助手编号)
条件成立时执行清半仓操作
启动交易 Start(条件*类型, 助手编号)
条件成立时启动助手自动交易,相当于按下启动按钮
停止交易 Stop(条件*类型, 助手编号)
条件成立时停止助手自动交易,相当于按下停止按钮
启用条件 Enable(条件*类型, 助手编号)
条件成立时启用当前股票的条件单或止损设置
禁止条件 Disable(条件*类型, 助手编号)
条件成立时禁用当前股票的条件单或止损设置
设置买入条件 SetBuyCondition(条件, 助手编号)
仅用于飞狐系列软件图表交易,在调用BUY函数前调用
设置 卖出条件 SetSellCondition(条件, 助手编号)
仅用于飞狐系列软件图表交易,在调用SELL函数前调用
日志函数 Log(数值)
把数值写到当前日志文件里,方便调试
MsgBox函数 MsgBox(数值)
把数值以消息框的形式弹出来,方便调试
刷新持仓数据 Refresh(条件, 助手编号)
条件成立时刷新持仓,撤单等数据
发送邮件,QQ信息 SendMessages(发送方式, 条件*消息类型, 助手编号)
条件成立时(即 条件:=1),以指定的发送方式发送指定类型的消息
更多函数将完善      

函数说明

BUY(价格, 条件*数量, 公式编号, 助手编号)

条件成立时(即 条件:=1),买入指定数量的股票

参数
价格 指定买入下单价格,如果填0,按助手条件单指定的价格类型或预警股票池全局设置决定买入价
条件*数量 条件,条件变量;数量,买入数量,如果填1,按助手条件单里的指定量买入
公式编号 用来区分是哪个公式或者转移条件买入的,买入和卖出的编号不要相同
助手编号 可选,在多个助手的情况下分别控制不同助手的下单。默认相同编号的会一起下单

例子
 {上穿5日均线买入1000股}
 条件:Cross(C, MA(C,5));
 if 条件 > 0 then 
    执行买入:"Order@BUY"(c, 条件*1000, 1);

SELL(价格, 条件*数量, 公式编号, 助手编号)

条件成立时(即 条件:=1),卖出指定数量的股票

参数
价格 指定下单价格,如果填0,按助手条件单指定的价格类型或预警股票池全局设置决定下单价
条件*数量 条件,条件变量;数量,卖出数量,如果填1,按助手条件单里的指定量卖出
公式编号 用来区分是哪个公式或者转移条件卖出的,买入和卖出的编号不要相同
助手编号 可选,在多个助手的情况下分别控制不同助手的下单。默认相同编号的会一起下单

例子
 {下穿5日均线卖出}
 条件:Cross( MA(C,5), C);
 if 条件 > 0 then 
    执行卖出:"Order@SELL"(c, 条件*1, 2);

PosInfo(类型, 助手编号)

查询当前股票的持仓数量(股)

参数
类型 0,表示查询持仓数,量以股为单位
助手编号 可选,在多个助手的情况下分别查询不同助手的持仓。默认相同编号的只返回第一个的

例子
 个股持仓股数: "Order@PosInfo"(0); 

PosInfo(类型, 助手编号)

查询当前股票的可卖数量(股)

参数
类型 1,表示查询可卖数量,以股为单位
助手编号 可选,在多个助手的情况下分别查询不同助手的持仓。默认相同编号的只返回第一个的

例子
 个股可卖股数: "Order@PosInfo"(1); 

PosInfo(类型, 助手编号)

查询当前股票的成本价(元)

参数
类型 2,表示查询成本价
助手编号 可选,在多个助手的情况下分别查询不同助手的持仓。默认相同编号的只返回第一个的

例子
 成本价: "Order@PosInfo"(2); 

PosInfo(类型, 助手编号)

查询当前股票的盈利金额(元)

参数
类型 3,表示查询盈利金额
助手编号 可选,在多个助手的情况下分别查询不同助手的持仓。默认相同编号的只返回第一个的

例子
 盈利金额: "Order@PosInfo"(3); 

PosInfo(类型, 助手编号)

查询当前股票的盈利百分比(%)

参数
类型 4,查询当前股票的盈利百分比(%),盈利5.5%,返回5.5
助手编号 可选,在多个助手的情况下分别查询不同助手的持仓。默认相同编号的只返回第一个的

例子
 盈利百分比: "Order@PosInfo"(4); 

PosInfo(类型, 助手编号)

查询当前股票的持仓市值(元)

参数
类型 5,查询当前股票的持仓市值(元)
助手编号 可选,在多个助手的情况下分别查询不同助手的持仓。默认相同编号的只返回第一个的

例子
 持仓市值: "Order@PosInfo"(5); 

PosInfo(类型, 助手编号)

查询当前股票的下单天数

参数
类型 6,查询当前股票的下单天数,只对助手下的单有效,并且依赖下单记录
助手编号 可选,在多个助手的情况下分别查询不同助手的持仓。默认相同编号的只返回第一个的

例子
 下单天数: "Order@PosInfo"(6); 

PosInfo(类型, 助手编号)

查询当前股票的持仓天数

参数
类型 7,查询当前股票的持仓天数,只对助手下的单有效(如果设置了下单时间都有效)
助手编号 可选,在多个助手的情况下分别查询不同助手的持仓。默认相同编号的只返回第一个的

例子
 持仓天数: "Order@PosInfo"(7); 

PosInfo(类型, 助手编号)

查询当前股票的上次买入价

参数
类型 8,查询当前股票的上次买入价,只对助手下的单有效
助手编号 可选,在多个助手的情况下分别查询不同助手的持仓。默认相同编号的只返回第一个的

例子
 上次买入价: "Order@PosInfo"(8); 

OrderInfo(下单类型, 查询类型, 助手编号)

查询当前股票的可撤买单数量(股)

参数
下单类型 0,查询买入单,1查询卖出单
查询类型 0,查询数量,1查询时间
助手编号 可选,在多个助手的情况下分别查询不同助手的持仓。默认相同编号的只返回第一个的

例子
 可撤买单数量: "Order@OrderInfo"(0, 0); 

OrderInfo(下单类型, 查询类型, 助手编号)

查询当前股票的可撤买单距现在的时间(秒)

参数
下单类型 0,查询买入单,1查询卖出单
查询类型 0,查询数量,1查询时间
助手编号 可选,在多个助手的情况下分别查询不同助手的持仓。默认相同编号的只返回第一个的

例子
 买单已过秒数: "Order@OrderInfo"(0,1); 

OrderInfo(下单类型, 查询类型, 助手编号)

查询当前股票的可撤卖单数量(股)

参数
下单类型 0,查询买入单,1查询卖出单
查询类型 0,查询数量,1查询时间
助手编号 可选,在多个助手的情况下分别查询不同助手的持仓。默认相同编号的只返回第一个的

例子
 可撤卖单数量: "Order@OrderInfo"(1, 0); 

OrderInfo(下单类型, 查询类型, 助手编号)

查询当前股票的可撤卖单距现在的时间(秒)

参数
下单类型 0,查询买入单,1查询卖出单
查询类型 0,查询数量,1查询时间
助手编号 可选,在多个助手的情况下分别查询不同助手的持仓。默认相同编号的只返回第一个的

例子
 卖单已过秒数: "Order@OrderInfo"(1,1); 

CancelOrder(条件*类型, 助手编号)

条件成立时撤销当前股票的买单

参数
条件*类型 类型:1,撤买单;类型:2,撤卖单
助手编号 可选,在多个助手的情况下分别查询不同助手的持仓。默认相同编号的只返回第一个的

例子
 买单已过秒数:= "Order@OrderInfo"(0,1);
 条件:买单已过秒数 > 60;
 if 条件 then
    撤买单 : "Order@CancelOrder"(1*条件);
		

CancelOrder(条件*类型, 助手编号)

条件成立时撤销当前股票的卖单

参数
条件*类型 类型:1,撤买单;类型:2,撤卖单
助手编号 可选,在多个助手的情况下分别查询不同助手的持仓。默认相同编号的只返回第一个的

例子
 卖单已过秒数: "Order@OrderInfo"(1,1);
 条件:卖单已过秒数 > 60;
 if 条件 then
    撤卖单 : "Order@CancelOrder"(2*条件);;
		

AccountInfo(类型, 助手编号)

查询当前账号的总资产

参数
类型 0, 查询当前账号的总资产(元)
助手编号 可选,在多个助手的情况下分别查询不同助手的数据。默认相同编号的只返回第一个的

例子
 账户总资产 : "Order@AccountInfo"(0);

AccountInfo(类型, 助手编号)

查询当前账号的可用资金

参数
类型 1, 查询当前账号的可用资金(元)
助手编号 可选,在多个助手的情况下分别查询不同助手的数据。默认相同编号的只返回第一个的

例子
 账户可用资金 : "Order@AccountInfo"(1);

AccountInfo(类型, 助手编号)

查询当前账号的总持仓市值

参数
类型 2, 查询当前账号的总持仓市值(元)
助手编号 可选,在多个助手的情况下分别查询不同助手的数据。默认相同编号的只返回第一个的

例子
 账户总持仓市值 : "Order@AccountInfo"(2);

AccountInfo(类型, 助手编号)

查询当前账号的总盈利金额

参数
类型 3, 查询当前账号的总盈利金额 (元)
助手编号 可选,在多个助手的情况下分别查询不同助手的数据。默认相同编号的只返回第一个的

例子
 账户总盈利金额 : "Order@AccountInfo"(3);

AccountInfo(类型, 助手编号)

查询当前账号的持仓个数

参数
类型 4, 查询当前账号的持仓个数
助手编号 可选,在多个助手的情况下分别查询不同助手的数据。默认相同编号的只返回第一个的

例子
 持仓个数 : "Order@AccountInfo"(4);

ClearPosition(条件*类型, 助手编号)

条件成立时执行清仓操作

参数
条件*类型 类型:1,全部清仓;类型:2,清半仓
助手编号 可选,在多个助手的情况下分别清仓

例子
 {此例子假定当前股票池只有上证指数一个股票,当上证指数跌破5日均线清仓}
 条件:Cross(MA(C,5), C);
 if 条件 then
    清仓: "Order@ClearPosition"(1*条件);

ClearPosition(条件*类型, 助手编号)

条件成立时执行半清仓操作

参数
条件*类型 类型:1,全部清仓;类型:2,清半仓
助手编号 可选,在多个助手的情况下分别清仓

例子
 {此例子假定当前股票池只有上证指数一个股票,当上证指数跌破5日均线清半仓}
 条件:Cross(MA(C,5), C);
 if 条件 then
    清仓: "Order@ClearPosition"(2*条件);

Start(条件*类型, 助手编号)

条件成立时启动助手自动交易,相当于按下助手开始按钮

参数
条件*类型 类型:1,启动自动交易
助手编号 可选,在多个助手的情况指定助手编号

例子
 {此例子假定当前股票池只有上证指数一个股票,当上证指数上穿5日均线开启自动交易}
 条件:Cross(C, MA(C,5));
 if 条件 then
    启动交易: "Order@Start"(1*条件);;

Stop(条件*类型, 助手编号)

条件成立时停止助手自动交易,相当于按下助手停止按钮

参数
条件*类型 类型:1,停止自动交易
助手编号 可选,在多个助手的情况指定助手编号

例子
 {此例子假定当前股票池只有上证指数一个股票,当上证指数下穿5日均线停止自动交易}
 条件:Cross( MA(C,5), C);
 if 条件 then
    停止交易: "Order@Stop"(1*条件);

Enable(条件*类型, 助手编号)

条件成立时让当前股票的止损止盈或条件单生效

参数
条件*类型 类型:1,条件成立时让当前股票的止损止盈或条件单生效
助手编号 可选,在多个助手的情况指定助手编号

例子
 {当前股票价格在5日均线之上时让该股票的止损止盈或条件单生效}
 条件:C > MA(C,5);
 if 条件 then
    启用条件: "Order@Enable"(1*条件);

Disable(条件*类型, 助手编号)

条件成立时禁止当前股票的止损止盈或条件单执行

参数
条件*类型 类型:1,条件成立时禁止当前股票的止损止盈或条件单执行
助手编号 可选,在多个助手的情况指定助手编号

例子
 {当前股票价格在5日均线之下时禁止当前股票的止损止盈或条件单执行}
 条件:C < MA(C,5);
 if 条件 then
    禁止条件: "Order@Disable"(1*条件);

SetBuyCondition(条件, 助手编号)

仅用于飞狐系列软件,设置买入条件

参数
条件 仅用于飞狐系列软件图表交易,设置买入条件,需在调用买入函数前调用
助手编号 可选,在多个助手的情况指定助手编号

例子
 {此例子假定在当前日线图上跑图表交易,当该股票上穿5日均线买入1000股}
 买入条件:Cross(C, MA(C,5));
 设置买入条件:="Order@SetBuyCondition"(买入条件);
 买入股票:"Order@BUY"(c, 买入条件*1000, 1);

SetSellCondition(条件, 助手编号)

仅用于飞狐系列软件,设置卖出条件

参数
条件 仅用于飞狐系列软件图表交易,设置卖出条件,需在调用卖出函数前调用
助手编号 可选,在多个助手的情况指定助手编号

例子
 {此例子假定在当前日线图上跑图表交易,当该股票下穿5日均线卖出}
 卖出条件:Cross( MA(C,5), C);
 设置卖出条件:="Order@SetSellCondition"(卖出条件:);
 卖出股票:"Order@SELL"(c, 卖出条件*1, 2);

Log(数值)

把数值写到当前日志文件里,方便调试

参数
数值 把数值写到当前日志文件里,方便调试

例子
 {此例子把当前最新周期的收盘价写到日志文件,此文件位于大智慧或通达信等软件的助手日志下面}
 写日志:="Order@Log"(c);

MsgBox(数值)

把数值以消息框的形式弹出来显示,方便调试

参数
数值 把数值以消息框的形式弹出来显示,方便调试

例子
 {此例子把当前最新周期的收盘价弹出消息框}
 消息框:="Order@MsgBox"(c);

Refresh(条件, 助手编号)

条件成立时刷新持仓,撤单等数据

参数
条件 条件成立时刷新持仓,撤单等数据
助手编号 可选,在多个助手的情况指定助手编号

例子
 {买入前刷新一下持仓信息}
 条件:C > MA(C,5);
 刷新持仓:="Order@Refresh"(条件);
 if 条件 then
    执行买入:"Order@BUY"(c, 条件*100, 1);

SendMessages(发送方式, 条件*消息类型, 助手编号)

条件成立时发送邮件,QQ,微信信息

参数
发送方式 0,发送邮件;1,发送QQ消息;2,发送微信
条件*消息类型 条件成立时(即 条件:=1),发送指定消息类型的消息
助手编号 可选,在多个助手的情况指定助手编号

例子
 {价格大于10元发送类型为5的邮件}
 条件:C > 10;
 if 条件 then
     发邮件:"Order@SendMessages"(0, 5*条件);