交易函数简介
交易函数下单跟界面人工点击下单走的下单、风控流程是一样的,唯一的区别是:交易函数下单通过解析下单函数接口传过来的参数,形成相应的下单任务;而界面人工点击下单通过解析界面的输入、选择,形成相应的下单任务。
运作流程:
(1)编写测试策略

(2)运行策略

(3)触发下单,解析参数

(4)生成任务


(5)形成委托,过风控

(6)成交

3.2.4.1. 交易函数基本信息
iQuant 平台提供了一系列的 Python 下单函数接口,如下所示。
## *注:在回测模式中,交易函数调用虚拟账号进行交易,在历史 K 线上记录买卖点,用以计算策略净值/回测指标;实盘运行调用策略中设置的资金账号进行交易,产生实际委托;模拟运行模式下交易函数无效。其中,can_cancel_order, cancel_task, cancel和do_order交易函数在回测模式中无实际意义,不建议使用。
## (1)交易函数
函数名 释义
passorder -----------------------综合交易下单
smart_algo_passorder ----------智能算法交易
get_trade_detail_data -----------取交易细明数据函数
get_value_by_order_id ----------根据委托Id取委托或成交信息
get_last_order_id ----------------获取最新的委托或成交的委托Id
can_cancel_order ---------------查询委托是否可撤销
cancel ---------------------------取消委托
cancel_task ----------------------撤销任务
pause_task ----------------------暂停任务
resume_task --------------------继续任务
do_order ------------------------实时触发前一根bar信号函数
stoploss_limitprice --------------以限价单方式止损/止盈
stoploss_marketprice -----------以市价单方式止损/止盈
get_new_purchase_limit --------获取账号新股申购额度
## (2)股票下单函数
函数名 释义
order_lots ---------------指定手数交易
order_value ------------------------------指定价值交易
order_percent ---------------一定比例下单
order_target_value ---------------目标价值下单
order_target_percent ---------------目标比例下单
order_shares ---------------指定股数交易
## (3)期货下单函数
函数名 释义
buy_open 买入开仓
sell_close_tdayfirst ---------------卖出平仓,平今优先
sell_close_ydayfirst ---------------卖出平仓,平昨优先
sell_open -------------------------卖出开仓
buy_close_tdayfirst ---------------买入平仓,平今优先
buy_close_ydayfirst ---------------买入平仓,平昨优先
综合交易下单
# (1)综合交易下单 passorder()
用法: passorder(opType, orderType, accountid, orderCode, prType, modelprice, volume[, strategyName, quickTrade, userOrderId], ContextInfo)
释义: 综合交易下单
参数:
opType,操作类型,可选值:
期货六键:
0:开多
1:平昨多
2:平今多
3:开空
4:平昨空
5:平今空
期货四键:
6:平多,优先平今
7:平多,优先平昨
8:平空,优先平今
9:平空,优先平昨
期货两键:
10:卖出,如有多仓,优先平仓,优先平今,如有余量,再开空
11:卖出,如有多仓,优先平仓,优先平昨,如有余量,再开空
12:买入,如有空仓,优先平仓,优先平今,如有余量,再开多
13:买入,如有空仓,优先平仓,优先平昨,如有余量,再开多
14:买入,不优先平仓
15:卖出,不优先平仓
股票买卖:
23:股票买入,或沪港通、深港通股票买入
24:股票卖出,或沪港通、深港通股票卖出
融资融券:
27:融资买入
28:融券卖出
29:买券还券
30:直接还券
31:卖券还款
32:直接还款
33:信用账号股票买入
34:信用账号股票卖出
组合交易:
25:组合买入,或沪港通、深港通的组合买入
26:组合卖出,或沪港通、深港通的组合卖出
27:融资买入
28:融券卖出
29:买券还券
31:卖券还款
33:信用账号股票买入
33:信用账号股票卖出
40:期货组合开多
43:期货组合开空
46:期货组合平多,优先平今
47:期货组合平多,优先平昨
48:期货组合平空,优先平今
49:期货组合平空,优先平昨
期权交易:
50:买入开仓
51:卖出平仓
52:卖出开仓
53:买入平仓
54:备兑开仓
55:备兑平仓
56:认购行权
57:认沽行权
58:证券锁定
59:证券解锁
orderType,下单方式
*注:
一、期货不支持 1102 和 1202
二、对所有账号组的操作相当于对账号组里的每个账号做一样的操作,如 passorder(23, 1202, ‘testS’, ‘000001.SZ’, 5, -1, 50000, ContextInfo),意思就是对账号组 testS 里的所有账号都以最新价开仓买入 50000 元市值的 000001.SZ 平安银行;passorder(60,1101,”test”,’510050.SH’,5,-1,1,ContextInfo)意思就是账号test申购1个单位(900000股)的华夏上证50ETF(只申购不买入成分股)。
可选值:
1101:单股、单账号、普通、股/手方式下单
1102:单股、单账号、普通、金额(元)方式下单(只支持股票)
1113:单股、单账号、总资产、比例 [0 ~ 1] 方式下单
1123:单股、单账号、可用、比例[0 ~ 1]方式下单
1201:单股、账号组(无权重)、普通、股/手方式下单
1202:单股、账号组(无权重)、普通、金额(元)方式下单(只支持股票)
1213:单股、账号组(无权重)、总资产、比例 [0 ~ 1] 方式下单
1223:单股、账号组(无权重)、可用、比例 [0 ~ 1] 方式下单
2101:组合、单账号、普通、按组合股票数量(篮子中股票设定的数量)方式下单 > 对应 volume 的单位为篮子的份
2102:组合、单账号、普通、按组合股票权重(篮子中股票设定的权重)方式下单 > 对应 volume 的单位为元
2103:组合、单账号、普通、按账号可用方式下单 > (底层篮子股票怎么分配?答:按可用资金比例后按篮子中股票权重分配,如用户没填权重则按相等权重分配)只对股票篮子支持
2201:组合、账号组(无权重)、普通、按组合股票数量方式下单
2202:组合、账号组(无权重)、普通、按组合股票权重方式下单
2203:组合、账号组(无权重)、普通、按账号可用方式下单只对股票篮子支持
组合套利交易接口特殊设置(accountID、orderType 特殊设置)
passorder(opType, orderType, accountID, orderCode, prType, hedgeRatio, volume, ContextInfo)
accountID = ‘stockAccountID, futureAccountID’
orderCode = ‘basketName, futureName’
hedgeRatio:套利比例(0 ~ 2 之间值,相当于 %0 至 200% 套利)
volume:份数 \ 资金 \ 比例
orderType(特殊设置)
orderType 可选值:
2331:组合、套利、合约价值自动套利、按组合股票数量方式下单
2332:组合、套利、按合约价值自动套利、按组合股票权重方式下单
2333:组合、套利、按合约价值自动套利、按账号可用方式下单
accountID,资金账号
passorder(opType, orderType, accountID, orderCode, prType, price, volume, ContextInfo)
*注:下单的账号ID(可多个)或账号组名或套利组名(一个篮子一个套利账号,如 accountID = ‘股票账户名, 期货账号’)
orderCode,下单代码
passorder(opType, orderType, accountID, orderCode, prType, price, volume, ContextInfo)
*注:
一、如果是单股或单期货、港股,则该参数填合约代码;
二、如果是组合交易,则该参数填篮子名称;
三、如果是组合套利,则填一个篮子名和一个期货合约名(如orderCode = ‘篮子名, 期货合约名’)
prType,下单选价类型
passorder(opType, orderType, accountID, orderCode, prType, price, volume, ContextInfo)
可选值(特别的对于套利,这个 prType 只对篮子起作用,期货的采用默认的方式):
-1:无效(实际下单时,需要用交易面板交易函数那设定的选价类型)
0:卖5价
1:卖4价
2:卖3价
3:卖2价
4:卖1价
5:最新价
6:买1价
7:买2价(组合不支持)
8:买3价(组合不支持)
9:买4价(组合不支持)
10:买5价(组合不支持)
11:(指定价)模型价(只对单股情况支持,对组合交易不支持)
12:涨跌停价
13:挂单价
14:对手价
27:市价即成剩撤(仅对股票期权申报有效)
28:市价即全成否则撤(仅对股票期权申报有效)
29:市价剩转限价(仅对股票期权申报有效)
42:最优五档即时成交剩余撤销申报(仅对上交所申报有效)
43:最优五档即时成交剩转限价申报(仅对上交所申报有效)
44:对手方最优价格委托(仅对深交所申报有效)
45:本方最优价格委托(仅对深交所申报有效)
46:即时成交剩余撤销委托(仅对深交所申报有效)
47:最优五档即时成交剩余撤销委托(仅对深交所申报有效)
48:全额成交或撤销委托(仅对深交所申报有效)
49:科创板盘后定价
price,下单价格
passorder(opType, orderType, accountID, orderCode, prType, price, volume, ContextInfo)
*注:
一、单股下单时,prType 是模型价/科创板盘后定价时 price 有效;其它情况无效;即单股时, prType 参数为 11,49 时被使用。 prType 参数不为 11,49 时也需填写,填写的内容可为 -1,0,2,100 等任意数字;
二、组合下单时,是组合套利时,price 作套利比例有效,其它情况无效。
volume,下单数量(股 / 手 / 元 / %)
passorder(opType, orderType, accountID, orderCode, prType, price, volume, ContextInfo)
根据 orderType 值最后一位确定 volume 的单位:
单股下单时:
1:股 / 手
2:金额(元)
3:比例(%)
组合下单时:
1:按组合股票数量(份)
2:按组合股票权重(元)
3:按账号可用(%)
strategyName,string,自定义策略名,可缺省不写,用来区分 order 委托和 deal 成交来自不同的策略。根据该策略名,get_trade_detail_data,get_last_order_id 函数可以获取相应策略名对应的委托或持仓结果。
*注:strategyName 只对同账号本地客户端有效,即 strategyName 只对当前客户端下的单进行策略区分,且该策略区分只能当前客户端使用。
quickTrade,int,设定是否立即触发下单,可选值:
0:否
1:是
*注:passorder是对最后一根K线完全走完后生成的模型信号在下一根K线的第一个tick数据来时触发下单交易;采用quickTrade参数设置为1时,非历史bar上执行时(ContextInfo.is_last_bar()为True),只要策略模型中调用到就触发下单交易。quickTrade参数设置为2时,不判断bar状态,只要策略模型中调用到就触发下单交易,历史bar上也能触发下单,请谨慎使用。
userOrderId,string,用户自设委托 ID,可缺省不写,写的时候必须把起前面的 strategyName 和 quickTrade 参数也填写。对应 order 委托对象和 deal 成交对象中的 m_strRemark 属性,通过 get_trade_detail_data 函数或委托主推函数 order_callback 和成交主推函数 deal_callback 可拿到这两个对象信息。
userOrderParam,string,用户自定义交易参数模板名称,可缺省不写,写的时候必须把起前面的strategyName和quickTrade参数也填写。
返回: 无
示例:
```py
def handlebar(ContextInfo):
# 单股单账号期货最新价买入 10 手
passorder(0, 1101, 'test', target, 5, -1, 10, ContextInfo)
# 单股单账号期货指定价买入 10 手
passorder(0, 1101, 'test', target, 11, 3000, ContextInfo)
# 单股单账号股票最新价买入 100 股(1 手)
passorder(23, 1101, 'test', target, 5, 0, 100, ContextInfo)
# 单股单账号股票指定价买入 100 股(1 手)
passorder(23, 1101, 'test', target, 11, 7, 100, ContextInfo)
```