交易函数
# 3.2.4. 交易函数
交易函数下单跟界面人工点击下单走的下单、风控流程是一样的,唯一的区别是:交易函数下单通过解析下单函数接口传过来的参数,形成相应的下单任务;而界面人工点击下单通过解析界面的输入、选择,形成相应的下单任务。
运作流程:
(1)编写测试策略
(2)运行策略
(3)触发下单,解析参数
(4)生成任务
(5)形成委托,过风控
(6)成交
# 3.2.4.1. 交易函数基本信息
QMT 系统提供了一系列的 Python 下单函数接口,如下所示。
提示
在回测模式中,交易函数调用虚拟账号进行交易,在历史 K 线上记录买卖点,用以计算策略净值/回测指标;实盘运行调用策略中设置的资金账号进行交易,产生实际委托;模拟运行模式下交易函数无效。其中,can_cancel_order, cancel_task, cancel和do_order交易函数在回测模式中无实际意义,不建议使用。
(1)交易函数
函数名 | 释义 |
---|---|
passorder | 综合交易下单 |
algo_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 | 买入平仓,平昨优先 |
# 3.2.4.2. 交易函数介绍
# (1)综合交易下单 passorder()
用法: passorder(opType, orderType, accountid, orderCode, prType, price, 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:信用账号股票买入
34:信用账号股票卖出
35:普通账号一键买卖
36:信用账号一键买卖
40:期货组合开多
43:期货组合开空
46:期货组合平多,优先平今
47:期货组合平多,优先平昨
48:期货组合平空,优先平今
49:期货组合平空,优先平昨
期权交易:
50:买入开仓
51:卖出平仓
52:卖出开仓
53:买入平仓
54:备兑开仓
55:备兑平仓
56:认购行权
57:认沽行权
58:证券锁定
59:证券解锁
ETF交易:
60:申购
61:赎回
专项两融:
70:专项融资买入
71:专项融券卖出
72:专项买券还券
73:专项直接还券
74:专项卖券还款
75:专项直接还款
可转债:
80:普通账户转股
81:普通账户回售
82:信用账户转股
83:信用账户回售
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:是
2:是
提示
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 可拿到这两个对象信息。
返回: 无
示例:
def handlebar(ContextInfo):
# 单股单账号期货最新价买入 10 手
passorder(0, 1101, 'test', target, 5, -1, 10, ContextInfo)
# 单股单账号期货指定价买入 10 手
passorder(0, 1101, 'test', target, 11, 3000, 10, ContextInfo)
# 单股单账号股票最新价买入 100 股(1 手)
passorder(23, 1101, 'test', target, 5, 0, 100, ContextInfo)
# 单股单账号股票指定价买入 100 股(1 手)
passorder(23, 1101, 'test', target, 11, 7, 100, ContextInfo)
# 申购 中证500指数ETF
passorder(60, 1101, 'test', '510030.SH', 5, 0, 1, 2, ContextInfo)
# 赎回 中证500指数ETF
passorder(61, 1101, 'test', '510030.SH', 5, 0, 1, 2, ContextInfo)
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# (2)智能算法交易 smart_algo_passorder()
用法: smart_algo_passorder(opType,orderType,accountid,orderCode,prType,price,volume,strageName,quickTrade,userid,smartAlgoType,limitOverRate,minAmountPerOrder,[targetPriceLevel,startTime,endTime,limitControl],ContextInfo)
释义: 智能算法交易
参数:
opType,操作类型,可选值:
股票买卖:
23:股票买入,或沪港通、深港通股票买入
24:股票卖出,或沪港通、深港通股票卖出
融资融券:
27:融资买入
28:融券卖出
29:买券还券
30:直接还券algo_passorder
31:卖券还款
32:直接还款
33:信用账号股票买入
34:信用账号股票卖出
35:普通账号一键买卖
36:信用账号一键买卖
orderType,下单方式
可选值:
1101:单股、单账号、普通、股/手方式下单
1102:单股、单账号、普通、金额(元)方式下单(只支持股票)
1113:单股、单账号、总资产、比例 [0 ~ 1] 方式下单
1123:单股、单账号、可用、比例[0 ~ 1]方式下单
1201:单股、账号组(无权重)、普通、股/手方式下单
1202:单股、账号组(无权重)、普通、金额(元)方式下单(只支持股票)
1213:单股、账号组(无权重)、总资产、比例 [0 ~ 1] 方式下单
1223:单股、账号组(无权重)、可用、比例 [0 ~ 1] 方式下单
accountID,资金账号
提示
下单的账号ID(可多个)或账号组名或套利组名(一个篮子一个套利账号,如accountID=’股票账户名,期货账号’)
orderCode,下单代码
提示
有两种如果是单股或单期货、港股,则该参数填合约代码;如果是组合交易,则该参数填篮子名称.如果是组合套利,则填一个篮子名和一个期货合约名(如orderCode=’篮子名,期货合约名’)
prType,下单选价类型
提示
特别的对于套利:这个prType只对篮子起作用,期货的采用默认的方式
可选值:
11:限价(只对单股情况支持,对组合交易不支持)
12:市价
智能算法仅支持以上两种报价类型
price,下单价格
提示
prType是模型价时price有效;其它情况无效
volume,下单数量(股 / 元 / %)
根据 orderType 值最后一位确定 volume 的单位:
单股下单时:
1:股
2:金额(元)
3:比例(%)
strageName,策略名
不同于passorder,这里不可缺省
quickTrade,参数内容说明
quickTrade:int,是否立马触发下单,0 否,1 是
提示
passorder是对最后一根K线完全走完后生成的模型信号在下一根K线的第一个tick数据来时触发下单交易;
采用quickTrade参数设置为1时,非历史bar上执行时(ContextInfo.is_last_bar()为True),只要策略模型中调用到就触发下单交易。
quickTrade参数设置为2时,不判断bar状态,只要策略模型中调用到就触发下单交易,历史bar上也能触发下单,请谨慎使用。
userid,投资备注
不同于passorder,这里不可缺省
smartAlgoType,string,智能算法类型
可选值:
被动算法列表:
VWAP:VWAP
TWAP:TWAP
VP:跟量
PINLINE:跟价
DMA:快捷
FLOAT:盘口
SWITCH:换仓
ICEBERG:冰山
MOC:尾盘
STWAP:短时TWAP
VP+:跟量+
XTFAST:快速交易
SLOS:极速融券
SLOH:融券对冲
SNIPER:狙击手
MOOPLUS:开盘+
主动算法列表:
VWAPA1:主动VWAP
VWAPM1:混合VWAP
VWAPAPLUS:主动VWAPPLUS
VWAP_ALPHA:阿尔法VWAP
limitOverRate,int,量比,数据范围0-100
提示
网格算法无此项。
若在algoParam中填写量比,则填写范围0-1的小数。minAmountPerOrder,int,智能算法最小委托金额,数据范围0-100000
targetPriceLevel,智能算法目标价格
可选值:
1:己方盘口1
2:己方盘口2
3:己方盘口3
4:己方盘口4
5:己方盘口5
6:最新价
7:对方盘口
提示
一、输入无效值则targetPriceLevel为1;
二、本项只针对冰山算法,其他算法可缺省。
startTime,智能算法开始时间
格式"HH:MM:SS",如"10:30:00"。如果缺省值,则默认为"09:30:00"
- endTime,智能算法截止时间
格式"HH:MM:SS",如"14:30:00"。如果缺省值,则默认为"15:30:00"
limitControl,涨跌停控制
1:涨停不卖跌停不卖
0:无
默认值为1
algoParam,算法参数,字典类型
#示例: algoParam = {'maxPercentageDeal':0.1,'upLimit':0.1,'downLimit':0.1,'limitAction':1,'afterAction':0}
1
2若使用该字典填写参数,则调用形式必须为:smart_algo_passorder(opType,orderType,accountid,orderCode,prType,modelprice,volume,strageName,quickTrade,userid,smartAlgoType,startTime,endTime,algoParam,ContextInfo),且参数均不可缺省
#示例: algoParam = {'maxPercentageDeal':0.1,'upLimit':0.1,'downLimit':0.1,'limitAction':1,'afterAction':0} smart_algo_passorder(23,1101,'600000105','000001.SZ',12,-1,50000,"strageName",1,"remark","POV_CORE","10:08:00","15:30:00",algoParam,ContextInfo)
1
2
3
4
返回: 无
示例:
def handlebar(ContextInfo):
# 账户600000105最新价开仓买入50000股的000001.SZ平安银行,使用TWAP智能算法,量比20%,最小买卖金额0:
smart_algo_passorder(23,1101,'600000105','000001.SZ',5,-1,50000,"strageName",0,"remark","TWAP",20,0,ContextInfo)
# 账户600000105最新价快速交易开仓买入50000股的000001.SZ平安银行,使用TWAP智能算法,量比20%,最小买卖金额0 且有效时长为09:30-14:00:
smart_algo_passorder(23,1101,'600000105','000001.SZ',5,-1,50000,"strageName",1,"remark","TWAP",20,0,0,'09:30:00','14:00:00',ContextInfo)
# 账户600000105最新价快速交易开仓买入50000股的000001.SZ平安银行,使用TWAP智能算法,量比20%,最小买卖金额0 且有效时长为09:30-14:00,不对智能算法涨停做限制:
smart_algo_passorder(23,1101,'600000105','000001.SZ',5,-1,50000,"strageName",1,"remark","TWAP",20,0,0,'09:30:00','14:00:00',0,ContextInfo)
2
3
4
5
6
7
8
9
# (3)获取交易明细数据 get_trade_detail_data()
用法: get_trade_detail_data(accountID, strAccountType, strDatatype, strategyName) 或不区分策略get_trade_detail_data(accountID, strAccountType, strDatatype)
释义: 获取交易明细数据函数
参数:
accountID:string,资金账号。
strAccountType:string,账号类型,可选值:
'FUTURE':期货
'STOCK':股票
'CREDIT':信用
'HUGANGTONG':沪港通
'SHENGANGTONG':深港通
'STOCK_OPTION':期权
strDatatype:string,数据类型:
'POSITION':持仓
'ORDER':委托
'DEAL' :成交
'ACCOUNT':账号
'TASK':任务
strategyName:string,策略名,对应 passorder 下单函数中的参数 strategyName 的值,只对委托 'ORDER'、成交 'DEAL' 起作用。
返回: list,list 中放的是 PythonObj,通过 dir(pythonobj) 可返回某个对象的属性列表。
示例:
def handlebar(ContextInfo):
obj_list = get_trade_detail_data('6000000248','stock','position')
for obj in obj_list:
print(obj.m_strInstrumentID)
# 查看有哪些属性字段
print(dir(obj))
# 可用资金查询
acct_info = get_trade_detail_data('6000000248', 'stock', 'account')
for i in acct_info:
print(i.m_dAvailable)
# 当前持仓查询
position_info = get_trade_detail_data('6000000248', 'stock', 'position')
for i in position_info:
print(i.m_strInstrumentID, i.m_nVolume)
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# (4)根据委托号获取委托或成交信息 get_value_by_order_id()
用法: get_value_by_order_id(orderId, accountID, strAccountType, strDatatype)
释义: 根据委托号获取委托或成交信息。
参数:
orderId:string,委托号。
accountID:string,资金账号。
strAccountType:string,账号类型,可选值:
'FUTURE':期货
'STOCK':股票
'CREDIT':信用
'HUGANGTONG':沪港通
'SHENGANGTONG':深港通
'STOCK_OPTION':期权
strDatatype:string,数据类型:
'ORDER':委托
'DEAL' :成交
示例:
def init(ContextInfo):
ContextInfo.accid = '6000000248'
def handlebar(ContextInfo):
orderid = get_last_order_id(ContextInfo.accid, 'stock', 'order')
print(orderid)
obj = get_value_by_order_id(orderid,ContextInfo.accid, 'stock', 'order')
print(obj.m_strInstrumentID)
2
3
4
5
6
7
8
# (5)获取最新的委托或成交的委托号 get_last_order_id()
用法: get_last_order_id(accountID, strAccountType, strDatatype, strategyName) 或不区分策略 get_last_order_id(accountID, strAccountType, strDatatype)
释义: 获取最新的委托或成交的委托号。
参数:
accountID:string,资金账号。
strAccountType:string,账号类型,可选值:
'FUTURE':期货
'STOCK':股票
'CREDIT':信用
'HUGANGTONG':沪港通
'SHENGANGTONG':深港通
'STOCK_OPTION':期权
strDatatype:string,数据类型:
'ORDER':委托
'DEAL' :成交
strategyName,string,策略名,对应 passorder 下单函数中的参数 strategyName 的值。
返回: String,委托号,如果没找到返回 '-1'。
示例:
def init(ContextInfo):
ContextInfo.accid = '6000000248'
def handlebar(ContextInfo):
orderid = get_last_order_id(ContextInfo.accid, 'stock', 'order')
print(orderid)
obj = get_value_by_order_id(orderid,ContextInfo.accid, 'stock', 'order')
print(obj.m_strInstrumentID)
2
3
4
5
6
7
8
# (6)查询委托是否可撤销 can_cancel_order()
用法: can_cancel_order(orderId, accountID, strAccountType)
释义: 查询委托是否可撤销。
参数:
orderId,string,委托号。
accountID:string,资金账号。
strAccountType:string,账号类型,可选值:
'FUTURE':期货
'STOCK':股票
'CREDIT':信用
'HUGANGTONG':沪港通
'SHENGANGTONG':深港通
'STOCK_OPTION':期权
返回: bool,是否可撤,返回值含义:
True:可撤销
False:不可撤销
示例:
def init(ContextInfo):
ContextInfo.accid = '6000000248'
def handlebar(ContextInfo):
orderid = get_last_order_id(ContextInfo.accid,'stock','order')
print(orderid)
can_cancel = can_cancel_order(orderid,ContextInfo.accid,'stock')
print('是否可撤:', can_cancel)
2
3
4
5
6
7
8
# (7)取消委托 cancel()
用法: cancel(orderId, accountId, accountType, ContextInfo)
释义: 取消委托。
参数:
orderId,string,委托号。
accountID:string,资金账号。
strAccountType:string,账号类型,可选值:
'FUTURE':期货
'STOCK':股票
'CREDIT':信用
'HUGANGTONG':沪港通
'SHENGANGTONG':深港通
'STOCK_OPTION':期权
ContextInfo:pythonobj
返回: bool,是否发出了取消委托信号,返回值含义:
True:是
False:否
示例:
'''
(1)下单前,根据 get_trade_detail_data 函数返回账号的信息,判定资金是否充足,账号是否在登录状态,统计持仓情况等等。
(2)满足一定的模型条件,用 passorder 下单。
(3)下单后,时刻根据 get_last_order_id 函数获取委托和成交的最新id,注意如果委托生成了,就有了委托号(这个id需要自己保存做一个全局控制)。
(4)用该委托号根据 get_value_by_order_id 函数查看委托的状态,各种情况等。
当一个委托的状态变成“已成'后,那么对应的成交 deal 信息就有一条成交数据;用该委托号可查看成交情况。
*注:委托列表和成交列表中的委托号是一样的,都是这个 m_strOrderSysID 属性值。
可用 get_last_order_id 获取最新的 order 的委托号,然后根据这个委托号获取 deal 的信息,当获取成功后,也说明这笔交易是成了,可再根据 position 持仓信息再进一步验证。
(5)根据委托号获取委托信息,根据委托状态,或模型设定,用 cancel 取消委托。
'''
def init(ContextInfo):
ContextInfo.accid = '6000000248'
def handlebar(ContextInfo):
orderid = get_last_order_id(ContextInfo.accid, 'stock', 'order')
print(cancel(orderid, ContextInfo.accid, 'stock', ContextInfo))
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# (8)撤销任务 cancel_task()
用法: cancel_task(taskId,accountId,accountType,ContextInfo)
释义: 撤销任务。
参数:
taskId,string,任务编号, 为空的时候表示撤销所有该资金账号可撤的任务。
accountID:string,资金账号。
strAccountType:string,账号类型,可选值:
'FUTURE':期货
'STOCK':股票
'CREDIT':信用
'HUGANGTONG':沪港通
'SHENGANGTONG':深港通
'STOCK_OPTION':期权
ContextInfo:pythonobj
返回: bool,是否发出了取消任务信号,返回值含义:
True:是
False:否
示例:
'''
(1)根据get_trade_detail_data函数返回任务的信息,获取任务编号(m_nTaskId),任务状态等等;
(2)根据任务编号,用cancel_task取消委托。
'''
def init(ContextInfo):
ContextInfo.accid = '6000000248'
def handlebar(ContextInfo):
objlist = get_trade_detail_data(ContextInfo.accid,'stock','task')
for obj in obj_list:
cancel_task(str(obj.m_nTaskId),ContextInfo.accid,'stock',ContextInfo)
2
3
4
5
6
7
8
9
10
11
12
# (9)暂停任务 pause_task()
用法: pause_task(taskId,accountId,accountType,ContextInfo)
释义: 暂停智能算法任务。
参数:
taskId,string,任务编号, 为空的时候表示暂停所有该资金账号可暂停的任务。
accountId:string,资金账号。
accountType:string,账号类型,可选值:
'FUTURE':期货
'STOCK':股票
'CREDIT':信用
'HUGANGTONG':沪港通
'SHENGANGTONG':深港通
'STOCK_OPTION':期权
ContextInfo:pythonobj
返回: bool,是否发出了暂停任务信号,返回值含义:
True:是
False:否
示例:
'''
(1)根据get_trade_detail_data函数返回任务的信息,获取任务编号(m_nTaskId),任务状态等等;
(2)根据任务编号,用pause_task暂停智能算法任务。
'''
def init(ContextInfo):
ContextInfo.accid = '6000000248'
def handlebar(ContextInfo):
objlist = get_trade_detail_data(ContextInfo.accid,'stock','task')
for obj in obj_list:
pause_task(obj.m_nTaskId,ContextInfo.accid,'stock',ContextInfo)
2
3
4
5
6
7
8
9
10
11
# (10)继续任务 resume_task()
用法: resume_task(taskId,accountId,accountType,ContextInfo)
释义: 继续智能算法任务。
参数:
taskId,string,任务编号, ,为空的时候表示启动所有该资金账号已暂停的任务。
accountId:string,资金账号。
accountType:string,账号类型,可选值:
'FUTURE':期货
'STOCK':股票
'CREDIT':信用
'HUGANGTONG':沪港通
'SHENGANGTONG':深港通
'STOCK_OPTION':期权
ContextInfo:pythonobj
返回: bool,是否发出了重启信号,返回值含义:
True:是
False:否
示例:
'''
(1)根据get_trade_detail_data函数返回任务的信息,获取任务编号(m_nTaskId),任务状态等等;
(2)根据任务编号,用resume_task启动已暂停智能算法任务。
'''
def init(ContextInfo):
ContextInfo.accid = '6000000248'
def handlebar(ContextInfo):
objlist = get_trade_detail_data(ContextInfo.accid,'stock','task')
for obj in obj_list:
resume_task(obj.m_nTaskId,ContextInfo.accid,'stock',ContextInfo)
2
3
4
5
6
7
8
9
10
11
# (11)实时触发前一根 bar 信号函数 do_order()
用法: do_order(ContextInfo)
释义: 实时触发前一根bar信号函数。
系统实盘中交易下单函数一般是把上一个周期产生的信号在最新的周期的第一个 tick 下单出去,而日 K 线第一个 tick 是在 9:25 分集合竞价结束时产生,如果策略模型在 9:25 分之后跑又想把前一天的下单信号发出去,就可用 do_order 函数配合实现。
特别的,需要注意,有调用 do_order 函数的策略模型跑在 9:25 分之前或别的日内周期下时,原有下单函数和 do_order 函数都有下单信号,有可能导致重复下单。、
参数: 无
返回: 无
示例:
# 实现跑日 K 线及以上周期下,在固定时间点把前一周期的交易信号发送出去
def init(ContextInfo):
pass
def handlebar(ContextInfo):
order_lots('000002.SZ', 1, ContextInfo, '600000248')
ticktimetag = ContextInfo.get_tick_timetag()
int_time = int(timetag_to_datetime(ticktimetag, '%H%M%S'))
if 100500 <= int_time < 100505:
do_order(ContextInfo)
2
3
4
5
6
7
8
9
10
# (12)指定手数交易 order_lots()
用法: order_lots(stockcode, lots[, style, price], ContextInfo[, accId])
释义: 指定手数交易,指定手数发送买/卖单。如有需要落单类型当做一个参量传入,如果忽略掉落单类型,那么默认以最新价下单。
参数:
stockcode:代码,string,如 '000002.SZ'
lots:手数,int
style:下单选价类型,string,默认为最新价 'LATEST',可选值:
'LATEST':最新
'FIX':指定 选此参数时必须指定有效的
price
参数,其他style值可不用传入price参数'HANG':挂单 用己方盘口挂单,即买入时用盘口买一价下单,卖出时用卖一价挂单,
'COMPETE':对手
'MARKET':市价
'SALE5', 'SALE4', 'SALE3', 'SALE2', 'SALE1':卖5-1价
'BUY1', 'BUY2', 'BUY3', 'BUY4', 'BUY5':买1-5价
price:价格,double
ContextInfo:PythonObj,Python 对象,这里必须是 ContextInfo
accId:账号,string
返回: 无
示例:
def handlebar(ContextInfo):
# 按最新价下 1 手买入
order_lots('000002.SZ', 1, ContextInfo, '600000248')
# 用对手价下 1 手卖出
order_lots('000002.SZ', -1, 'COMPETE', ContextInfo, '600000248')
# 用指定价 37.5 下 2 手卖出
order_lots('000002.SZ', -2, 'fix', 37.5, ContextInfo, '600000248')
2
3
4
5
6
7
8
9
# (13)指定价值交易 order_value()
用法: order_value(stockcode, value[, style, price], ContextInfo[, accId])
释义: 指定价值交易,使用想要花费的金钱买入 / 卖出股票,而不是买入 / 卖出想要的股数,正数代表买入,负数代表卖出。股票的股数总是会被调整成对应的 100 的倍数(在中国 A 股市场 1 手是 100 股)。当您提交一个卖单时,该方法代表的意义是您希望通过卖出该股票套现的金额,如果金额超出了您所持有股票的价值,那么您将卖出所有股票。需要注意,如果资金不足,该 API 将不会创建发送订单。
参数:
stockcode:代码,string,如 '000002.SZ'
value:金额(元),double
style:下单选价类型,string,默认为最新价 'LATEST',可选值:
'LATEST':最新
'FIX':指定
'HANG':挂单
'COMPETE':对手
'MARKET':市价
'SALE5', 'SALE4', 'SALE3', 'SALE2', 'SALE1':卖5-1价
'BUY1', 'BUY2', 'BUY3', 'BUY4', 'BUY5':买1-5价
price:价格,double
ContextInfo:PythonObj,Python 对象,这里必须是 ContextInfo
accId:账号,string
返回: 无
示例:
def handlebar(ContextInfo):
# 按最新价下 10000 元买入
order_value('000002.SZ', 10000, ContextInfo, '600000248')
# 用对手价下 10000 元卖出
order_value('000002.SZ', -10000, 'COMPETE', ContextInfo, '600000248')
# 用指定价 37.5 下 20000 元卖出
order_value('000002.SZ', -20000, 'fix', 37.5, ContextInfo, '600000248')
2
3
4
5
6
7
8
9
# (14)指定比例交易 order_percent()
用法: order_percent(stockcode, percent[, style, price], ContextInfo[, accId])
释义: 指定比例交易,发送一个等于目前投资组合价值(市场价值和目前现金的总和)一定百分比的买 / 卖单,正数代表买,负数代表卖。股票的股数总是会被调整成对应的一手的股票数的倍数(1 手是 100 股)。百分比是一个小数,并且小于或等于1(小于等于100%),0.5 表示的是 50%。需要注意,如果资金不足,该 API 将不会创建发送订单。
参数:
stockcode:代码,string,如 '000002.SZ'
percent:比例,double
style:下单选价类型,string,默认为最新价 'LATEST',可选值:
'LATEST':最新
'FIX':指定
'HANG':挂单
'COMPETE':对手
'MARKET':市价
'SALE5', 'SALE4', 'SALE3', 'SALE2', 'SALE1':卖5-1价
'BUY1', 'BUY2', 'BUY3', 'BUY4', 'BUY5':买1-5价
price:价格,double
ContextInfo:PythonObj,Python 对象,这里必须是 ContextInfo
accId:账号,string
返回: 无
示例:
def handlebar(ContextInfo):
# 按最新价下 5.1% 价值买入
order_percent('000002.SZ', 0.051, ContextInfo, '600000248')
# 用对手价下 5.1% 价值卖出
order_percent('000002.SZ', -0.051, 'COMPETE', ContextInfo, '600000248')
# 用指定价 37.5 下 10.2% 价值卖出
order_percent('000002.SZ', -0.102, 'fix', 37.5, ContextInfo, '600000248')
2
3
4
5
6
7
8
9
# (15)指定目标价值交易 order_target_value()
用法: order_target_value(stockcode, tar_value[, style, price], ContextInfo[, accId])
释义: 指定目标价值交易,买入 / 卖出并且自动调整该证券的仓位到一个目标价值。如果还没有任何该证券的仓位,那么会买入全部目标价值的证券;如果已经有了该证券的仓位,则会买入 / 卖出调整该证券的现在仓位和目标仓位的价值差值的数目的证券。需要注意,如果资金不足,该API将不会创建发送订单。
参数:
stockcode:代码,string,如 '000002.SZ'
tar_value:目标金额(元),double,非负数
style:下单选价类型,string,默认为最新价 'LATEST',可选值:
'LATEST':最新
'FIX':指定
'HANG':挂单
'COMPETE':对手
'MARKET':市价
'SALE5', 'SALE4', 'SALE3', 'SALE2', 'SALE1':卖5-1价
'BUY1', 'BUY2', 'BUY3', 'BUY4', 'BUY5':买1-5价
price:价格,double
ContextInfo:PythonObj,Python 对象,这里必须是 ContextInfo
accId:账号,string
返回: 无
示例:
def handlebar(ContextInfo):
# 按最新价下调仓到 10000 元持仓
order_target_value('000002.SZ', 10000, ContextInfo, '600000248')
# 用对手价调仓到 10000 元持仓
order_target_value('000002.SZ', 10000, 'COMPETE', ContextInfo, '600000248')
# 用指定价 37.5 下调仓到 20000 元持仓
order_target_value('000002.SZ', 20000, 'fix', 37.5, ContextInfo, '600000248')
2
3
4
5
6
7
8
9
# (16)指定目标比例交易 order_target_percent()
用法: order_target_percent(stockcode, tar_percent[, style, price], ContextInfo[, accId])
释义: 指定目标比例交易,买入 / 卖出证券以自动调整该证券的仓位到占有一个指定的投资组合的目标百分比。投资组合价值等于所有已有仓位的价值和剩余现金的总和。买 / 卖单会被下舍入一手股数(A 股是 100 的倍数)的倍数。目标百分比应该是一个小数,并且最大值应该小于等于1,比如 0.5 表示 50%,需要注意,如果资金不足,该API将不会创建发送订单。
参数:
stockcode:代码,string,如 '000002.SZ'
tar_percent:目标百分比 [0 ~ 1],double
style:下单选价类型,string,默认为最新价 'LATEST',可选值:
'LATEST':最新
'FIX':指定
'HANG':挂单
'COMPETE':对手
'MARKET':市价
'SALE5', 'SALE4', 'SALE3', 'SALE2', 'SALE1':卖5-1价
'BUY1', 'BUY2', 'BUY3', 'BUY4', 'BUY5':买1-5价
price:价格,double
ContextInfo:PythonObj,Python 对象,这里必须是 ContextInfo
accId:账号,string
返回: 无
示例:
def handlebar(ContextInfo):
# 按最新价下买入调仓到 5.1% 持仓
order_target_percent('000002.SZ', 0.051, ContextInfo, '600000248')
# 用对手价调仓到 5.1% 持仓
order_target_percent('000002.SZ', 0.051, 'COMPETE', ContextInfo, '600000248')
# 用指定价 37.5 调仓到 10.2% 持仓
order_target_percent('000002.SZ', 0.102, 'fix', 37.5, ContextInfo, '600000248')
2
3
4
5
6
7
8
9
# (17)指定股数交易 order_shares()
用法: order_shares(stockcode, shares[, style, price], ContextInfo[, accId])
释义: 指定股数交易,指定股数的买 / 卖单,最常见的落单方式之一。如有需要落单类型当做一个参量传入,如果忽略掉落单类型,那么默认以最新价下单。
参数:
stockcode:代码,string,如 '000002.SZ'
shares:股数,int
style:下单选价类型,string,默认为最新价 'LATEST',可选值:
'LATEST':最新
'FIX':指定
'HANG':挂单
'COMPETE':对手
'MARKET':市价
'SALE5', 'SALE4', 'SALE3', 'SALE2', 'SALE1':卖5-1价
'BUY1', 'BUY2', 'BUY3', 'BUY4', 'BUY5':买1-5价
price:价格,double
ContextInfo:PythonObj,Python 对象,这里必须是 ContextInfo
accId:账号,string
返回: 无
示例:
def handlebar(ContextInfo):
# 按最新价下 100 股买入
order_shares('000002.SZ', 100, ContextInfo, '600000248')
# 用对手价下 100 股卖出
order_shares('000002.SZ', -100, 'COMPETE', ContextInfo, '600000248')
# 用指定价 37.5 下 200 股卖出
order_shares('000002.SZ', -200, 'fix', 37.5, ContextInfo, '600000248')
2
3
4
5
6
7
8
9
# (18)期货买入开仓 buy_open()
用法: buy_open(stockcode, amount[, style, price], ContextInfo[, accId])
释义: 期货买入开仓
参数:
stockcode:代码,string,如 'IF1805.IF'
amount:手数,int
style:下单选价类型,string,默认为最新价 'LATEST',可选值:
'LATEST':最新
'FIX':指定
'HANG':挂单
'COMPETE':对手
'MARKET':市价
'SALE1':卖一价
'BUY1':买一价
price:价格,double
ContextInfo:PythonObj,Python 对象,这里必须是 ContextInfo
accId:账号,string
返回: 无
示例:
def handlebar(ContextInfo):
# 按最新价 1 手买入开仓
buy_open('IF1805.IF', 1, ContextInfo, '110476')
# 用对手价 1 手买入开仓
buy_open('IF1805.IF', 1, 'COMPETE', ContextInfo, '110476')
# 用指定价 3750 元 2 手买入开仓
buy_open('IF1805.IF', 2, 'fix', 3750, ContextInfo, '110476')
2
3
4
5
6
7
8
9
# (19)期货买入平仓(平今优先) buy_close_tdayfirst()
用法: buy_close_tdayfirst(stockcode, amount[, style, price], ContextInfo[, accId])
释义: 期货买入平仓,平今优先
参数:
stockcode:代码,string,如 'IF1805.IF'
amount:手数,int
style:下单选价类型,string,默认为最新价 'LATEST',可选值:
'LATEST':最新
'FIX':指定
'HANG':挂单
'COMPETE':对手
'MARKET':市价
'SALE1':卖一价
'BUY1':买一价
price:价格,double
ContextInfo:PythonObj,Python 对象,这里必须是 ContextInfo
accId:账号,string
返回: 无
示例:
def handlebar(ContextInfo):
# 按最新价 1 手买入平仓,平今优先
buy_close_tdayfirst('IF1805.IF', 1, ContextInfo, '110476')
# 用对手价 1 手买入平仓,平今优先
buy_close_tdayfirst('IF1805.IF', 1, 'COMPETE', ContextInfo, '110476')
# 用指定价 3750 元 2 手买入平仓,平今优先
buy_close_tdayfirst('IF1805.IF', 2, 'fix', 3750, ContextInfo, '110476')
2
3
4
5
6
7
8
9
# (20)期货买入平仓(平昨优先) buy_close_ydayfirst()
用法: buy_close_ydayfirst(stockcode, amount[, style, price], ContextInfo[, accId])
释义: 期货买入开仓,平昨优先
参数:
stockcode:代码,string,如 'IF1805.IF'
amount:手数,int
style:下单选价类型,string,默认为最新价 'LATEST',可选值:
'LATEST':最新
'FIX':指定
'HANG':挂单
'COMPETE':对手
'MARKET':市价
'SALE1':卖一价
'BUY1':买一价
price:价格,double
ContextInfo:PythonObj,Python 对象,这里必须是 ContextInfo
accId:账号,string
返回: 无
示例:
def handlebar(ContextInfo):
# 按最新价 1 手买入平仓,平昨优先
buy_close_ydayfirst('IF1805.IF', 1, ContextInfo, '110476')
# 用对手价 1 手买入平仓,平昨优先
buy_close_ydayfirst('IF1805.IF', 1, 'COMPETE', ContextInfo, '110476')
# 用指定价 3750 元 2 手买入平仓,平昨优先
buy_close_ydayfirst('IF1805.IF', 2, 'fix', 3750, ContextInfo, '110476')
2
3
4
5
6
7
8
9
# (21)期货卖出开仓 sell_open()
用法: sell_open(stockcode, amount[, style, price], ContextInfo[, accId])
释义: 期货卖出开仓
参数:
stockcode:代码,string,如 'IF1805.IF'
amount:手数,int
style:下单选价类型,string,默认为最新价 'LATEST',可选值:
'LATEST':最新
'FIX':指定
'HANG':挂单
'COMPETE':对手
'MARKET':市价
'SALE1':卖一价
'BUY1':买一价
price:价格,double
ContextInfo:PythonObj,Python 对象,这里必须是 ContextInfo
accId:账号,string
返回: 无
示例:
def handlebar(ContextInfo):
# 按最新价 1 手卖出开仓
sell_open('IF1805.IF', 1, ContextInfo, '110476')
# 用对手价 1 手卖出开仓
sell_open('IF1805.IF', 1, 'COMPETE', ContextInfo, '110476')
# 用指定价 3750 元 2 手卖出开仓
sell_open('IF1805.IF', 2, 'fix',3750, ContextInfo, '110476')
2
3
4
5
6
7
8
9
# (22)期货卖出平仓(平今优先) sell_close_tdayfirst()
用法: sell_close_tdayfirst(stockcode, amount[, style, price], ContextInfo[, accId])
释义: 期货卖出平仓,平今优先
参数:
stockcode:代码,string,如 'IF1805.IF'
amount:手数,int
style:下单选价类型,string,默认为最新价 'LATEST',可选值:
'LATEST':最新
'FIX':指定
'HANG':挂单
'COMPETE':对手
'MARKET':市价
'SALE1':卖一价
'BUY1':买一价
price:价格,double
ContextInfo:PythonObj,Python 对象,这里必须是 ContextInfo
accId:账号,string
返回: 无
示例:
def handlebar(ContextInfo):
# 按最新价下 1 手卖出平仓,平今优先
sell_close_tdayfirst('IF1805.IF', 1, ContextInfo, '110476')
# 用对手价 1 手卖出平仓,平今优先
sell_close_tdayfirst('IF1805.IF', 1, 'COMPETE', ContextInfo, '110476')
# 用指定价 3750 元 2 手卖出平仓,平今优先
sell_close_tdayfirst('IF1805.IF', 1, 'fix', 3750, ContextInfo, '110476')
2
3
4
5
6
7
8
9
# (23)期货卖出平仓(平昨优先) sell_close_ydayfirst()
用法: sell_close_ydayfirst(stockcode, amount[, style, price], ContextInfo[, accId])
释义: 期货卖出平仓,平昨优先
参数:
stockcode:代码,string,如 'IF1805.IF'
amount:手数,int
style:下单选价类型,string,默认为最新价 'LATEST',可选值:
'LATEST':最新
'FIX':指定
'HANG':挂单
'COMPETE':对手
'MARKET':市价
'SALE1':卖一价
'BUY1':买一价
price:价格,double
ContextInfo:PythonObj,Python 对象,这里必须是 ContextInfo
accId:账号,string
返回: 无
示例:
def handlebar(ContextInfo):
# 按最新价 1 手卖出平仓,平昨优先
sell_close_ydayfirst('IF1805.IF', 1, ContextInfo, '110476')
# 用对手价 1 手卖出平仓,平昨优先
sell_close_ydayfirst('IF1805.IF', 1, 'COMPETE', ContextInfo, '110476')
# 用指定价 3750 元 2 手卖出平仓,平昨优先
sell_close_ydayfirst('IF1805.IF', 2, 'fix', 3750, ContextInfo, '110476')
2
3
4
5
6
7
8
9
# (24)[已弃用]获取两融负债合约明细 get_debt_contract()
用法: get_debt_contract(accId)
释义: 获取信用账户负债合约明细
此接口已弃用,替代接口为get_unclosed_compacts(获取未了结负债)和get_closed_compacts(获取已了结负债)
参数:
- accId:信用账户
返回: list,list 中放的是 PythonObj,通过 dir(pythonobj) 可返回某个对象的属性列表。
示例:
def handlebar(ContextInfo):
obj_list = get_debt_contract('6000000248')
for obj in obj_list:
# 输出负债合约名
print(obj.m_strInstrumentName)
2
3
4
5
# (25)获取两融担保标的明细 get_assure_contract()
用法: get_debt_contract(accId)
释义: 获取信用账户担保合约明细
参数:
- accId:信用账户
返回: list,list 中放的是 PythonObj,通过 dir(pythonobj) 可返回某个对象的属性列表。
示例:
def handlebar(ContextInfo):
obj_list = get_assure_contract('6000000248')
for obj in obj_list:
# 输出担保合约名
print(obj.m_strInstrumentName)
2
3
4
5
# (26)获取可融券明细 get_enable_short_contract()
提示
注:由于字段m_dSloRatio、m_dSloStatus提供来源和取担保品明细(get_assure_contract)重复,字段在2021年9月移除,后续用担保品明细接口获取,具体见 担保标的对象字段说明
用法: get_enable_short_contract(accId)
释义: 获取信用账户当前可融券的明细
参数:
- accId:信用账户
返回: list,list 中放的是 PythonObj,通过 dir(pythonobj) 可返回某个对象的属性列表。
示例:
def handlebar(ContextInfo):
obj_list = get_enable_short_contract('6000000248')
for obj in obj_list:
# 输出可融券合约名
print(obj.m_strInstrumentName)
2
3
4
5
# (27)获取当日新股新债信息 get_ipo_data()
用法: get_ipo_data([,type])
释义: 获取当日新股新债信息,返回结果为一个字典,包括新股申购代码,申购名称,最大申购数量,最小申购数量等数据
参数:
- type:为空时返回新股新债信息,type="STOCK"时只返回新股申购信息,type="BOND"时只返回新债申购信息
示例:
def init(ContextInfo):
ipoData=get_ipo_data()# 返回新股新债信息
ipoStock=get_ipo_data("STOCK")# 返回新股信息
ipoCB=get_ipo_data("BOND")# 返回新债申购信息
2
3
4
# (28)获取账户新股申购额度get_new_purchase_limit()
用法: get_new_purchase_limit(accid)
释义: 获取账户新股申购额度,返回结果为一个字典,包括上海主板,深圳市场,上海科创版的申购额度
参数:
- accid:资金账号,必须时股票账号或者信用账号
示例:
def init(ContextInfo):
ContextInfo.accid="10000001"# 返回新股新债信息
purchase_limit=get_new_purchase_limit(ContextInfo.accid)
2
3
# (29)算法交易下单algo_passorder()
用法: algo_passorder(opType,orderType,accountid,orderCode,prType,price,volume,[strategyName,quickTrade,userOrderId,userOrderParam],ContextInfo)
释义: 算法交易下单,此时使用交易面板-程序交易-函数交易-函数交易参数中设置的下单类型(普通交易,算法交易,随机量交易) 如果函数交易参数使用未修改的默认值,此函数和passorder函数一致, 设置了函数交易参数后,将会使用函数交易参数的超价等拆单参数,algo_passorder内的prType若赋值,则优先使用该参数,若algo_passorder内的prType=-1,将会使用userOrderParam内的opType,若userOrderParam未赋值,则使用界面上的函数交易参数的报价方式
参数:
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,资金账号
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,dict,用户自定义交易参数,主要用于修改算法交易的参数,内容说明:
字典类型,用户自定义交易参数,主要用于修改算法交易的参数
OrderType 普通交易:0、算法交易:1、随机量交易:2
PriceType 报价方式:数值同prType
MaxOrderCount 最大下单次数
SinglePriceRange 波动区间是否单向否:0,是:1
PriceRangeType 波动区间类型按比例:0,按数值1
PriceRangeValue 波动区间(按数值)
PriceRangeRate 波动区间(按比例)[0-1]
SuperPriceType 单笔超价类型按比例:0,按数值1
SuperPriceRate 单笔超价(按比例)[0-1]
SuperPriceValue 单笔超价(按数值)
VolumeType 单笔基准量类型卖1+2+3+4+5量:0,卖1+2+3+4量:1,...卖1量:4,买1量:5,...买1+2+3+4+5量:9,目标量:10,目标剩余量:11,持仓数量:12
VolumeRate 单笔下单比率[0-1]
SingleNumMin 单笔下单量最小值
SingleNumMax 单笔下单量最大值
ValidTimeType 有效时间类型,默认为0
ValidTimeElapse 有效持续时间,ValidTimeType设置为0时生效
ValidTimeStart 有效开始时间偏移,ValidTimeType设置为1时生效
ValidTimeEnd 有效结束时间偏移,ValidTimeType设置为1时生效
UndealtEntrustRule 未成委托处理数值同pyType
PlaceOrderInterval 下撤单时间间隔
UseTrigger 是否触价否:0,是:1
TriggerType 触价类型:最新价大于:1,最新价小于:2
TriggerPrice 触价价格
SuperPriceEnable 超价启用笔数
userparam={"OrderType":1,"MaxOrderCount":20,'PlaceOrderInterval':15}
algo_passorder(23,1101,'918800000818','000001.SZ',11,21,200,'name',2,'algo_passorder_test',userparam,ContextInfo)
#表示设置交易类型为算法交易,最大委托次数为20,下撤单时间间隔15s,其他参数同函数交易参数中设置
示例:
userparam = {
"OrderType": 1,
"MaxOrderCount": 20,
"SuperPriceType": 1,
"SuperPriceValue": 1.12}
accid = '918800000818' #资金账号
algo_passorder(23,1101,accid,'000001.SZ',5,15,1000,'',1,'strReMark',userparam,ContextInfo)
#表示修改算法交易的最大委托次数为20,单笔下单基准类型为按价格类型超价,单笔超价1.12元,其他参数同函数交易参数中设置
2
3
4
5
6
7
8
# (30)获取股票篮子 get_basket()
用法: get_basket(basketName)
释义: 获取股票篮子
参数:
- basketName:股票篮子名称
示例:
print( get_basket('basket1') )
# (31)设置股票篮子 set_basket()
用法: set_basket(basketDict)
释义: 设置passorder的股票篮子,仅用于passorder进行篮子交易,设置成功后,用get_basket可以取出后即可进行passorder组合交易下单
参数:
- basketDict:股票篮子 {'name':股票篮子名称,'stocks':[{'stock':股票名称,'weight',权重,'quantity':数量,'optType':交易类型}]} 。
示例:
print( set_basket('basket1') )
# (32)获取未了结负债合约明细 get_unclosed_compacts()
用法: get_unclosed_compacts(accountID,accountType)
释义: 获取未了结负债合约明细
参数:
- accountID:str,资金账号
- accountType:str,账号类型,这里应该填'CREDIT'
返回:
list([ CStkUnclosedCompacts, ... ]) 负债列表,CStkUnclosedCompacts属性如下:
m_strAccountID - str 账号ID
m_nBrokerType - int 账号类型(1-期货账号,2-股票账号,3-信用账号,5-期货期权账号,6-股票期权账号,7-沪港通账号,11-深港通账号)
m_strExchangeID - str 市场
m_strInstrumentID - str 证券代码
m_eCompactType - int 合约类型(32-不限制,48-融资,49-融券)
m_eCashgroupProp - int 头寸来源(32-不限制,48-普通头寸,49-专项头寸)
m_nOpenDate - int 开仓日期(如'20201231')
m_nBusinessVol - int 合约证券数量
m_nRealCompactVol - int 未还合约数量
m_nRetEndDate - int 到期日(如'20201231')
m_dBusinessBalance - float 合约金额
m_dBusinessFare - float 合约息费
m_dRealCompactBalance - float 未还合约金额
m_dRealCompactFare - float 未还合约息费
m_dRepaidFare - float 已还息费
m_dRepaidBalance - float 已还金额
m_strCompactId - str 合约编号
m_strEntrustNo - str 委托编号
m_nRepayPriority - int 偿还优先级
m_strPositionStr - str 定位串
m_eCompactRenewalStatus - int 合约展期状态(48-可申请,49-已申请,50-审批通过,51-审批不通过,52-不可申请,53-已执行,54-已取消)
m_nDeferTimes - int 展期次数
示例:
get_unclosed_compacts('6000000248', 'CREDIT')
# (33)获取已了结负债合约明细 get_closed_compacts()
用法: get_closed_compacts(accountID,accountType)
释义: 获取已了结负债合约明细
参数:
- accountID:str,资金账号
- accountType:str,账号类型,这里应该填'CREDIT'
返回:
list([ CStkUnclosedCompacts, ... ]) 负债列表,CStkUnclosedCompacts属性如下:
m_strAccountID - str 账号ID
m_nBrokerType - int 账号类型(1-期货账号,2-股票账号,3-信用账号,5-期货期权账号,6-股票期权账号,7-沪港通账号,11-深港通账号)
m_strExchangeID - str 市场
m_strInstrumentID - str 证券代码
m_eCompactType - int 合约类型(32-不限制,48-融资,49-融券)
m_eCashgroupProp - int 头寸来源(32-不限制,48-普通头寸,49-专项头寸)
m_nOpenDate - int 开仓日期(如'20201231')
m_nBusinessVol - int 合约证券数量
m_nRetEndDate - int 到期日(如'20201231')
m_nDateClear - int 了结日期(如'20201231')
m_nEntrustVol - int 委托数量
m_dEntrustBalance - float 委托金额
m_dBusinessBalance - float 合约金额
m_dBusinessFare - float 合约息费
m_dRepaidFare - float 已还息费
m_dRepaidBalance - float 已还金额
m_strCompactId - str 合约编号
m_strEntrustNo - str 委托编号
m_strPositionStr - str 定位串
示例:
get_closed_compacts('6000000248', 'CREDIT')
# (34)获取沪深港通汇率数据 get_hkt_exchange_rate()
用法: get_hkt_exchange_rate(accountID,accountType)
释义: 获取沪深港通汇率数据
参数:
- accountID:string,账号;
- accountType:string,账号类型,必须填HUGANGTONG或者SHENGANGTONG
返回:
dict,字段释义:
bidReferenceRate:买入参考汇率
askReferenceRate:卖出参考汇率
dayBuyRiseRate:日间买入参考汇率浮动比例
daySaleRiseRate:日间卖出参考汇率浮动比例
示例:
def init(ContextInfo):
data=get_hkt_exchange_rate('6000000248','HUGANGTONG')
print(data)
2
3
# (35)取可融券明细 get_enable_short_contract()
用法: get_enable_short_contract(accountID)
释义: 取可融券明细
参数:
- accountID:string,账号
返回: list,list中放的是PythonObj,通过dir(pythonobj)可返回某个对象的属性列表
示例:
def handlebar(ContextInfo):
obj_list = get_enable_short_contract('6000000248')
for obj in obj_list:
print( obj.m_strInstrumentName)
2
3
4
# (36)取期权标的持仓 get_option_subject_position()
用法: get_option_subject_position(accountID)
释义: 取期权标的持仓
参数:
- accountID:string,账号
返回: list,list中放的是PythonObj,通过dir(pythonobj)可返回某个对象的属性列表
示例:
data=get_option_subject_position('880399990383')
print(len(data));
forobjindata:
print(obj.m_strInstrumentName,obj.m_lockVol,obj.m_coveredVol);
2
3
4
# (37)取期权组合持仓 get_comb_option()
用法: get_comb_option(accountID)
释义: 取期权组合持仓
参数:
- accountID:string,账号
返回: list,list中放的是PythonObj,通过dir(pythonobj)可返回某个对象的属性列表
示例:
obj_list=get_comb_option('880399990383')
print(len(obj_list));
forobjinobj_list:
print(obj.m_strCombCodeName,obj.m_strCombID,obj.m_nVolume,obj.m_nFrozenVolume)
2
3
4
# (38)构建期权组合持仓 make_option_combination()
用法: make_option_combination(combType,orderCodeDict,modelVolume,accountID,strategyName,userOrderId,ContextInfo)
释义: 构建期权组合持仓
参数:
combType:组合策略类型
50:认购牛市价差策略
51:认沽熊市价差策略
52:认沽牛市价差策略
53:认购熊市价差策略
54:跨式空头
55:宽跨式空头
56:保证金开仓转备兑开仓
57:备兑开仓转保证金开仓
orderCodeDict:期权组合,{option:holdType}。其中,option:期权代码,格式如10000001.SHO,holdType:
48:权利
49:义务
50:备兑
modelVolume:下单量
strategyName:策略名
userOrderId:投资备注
示例:
ContextInfo.accid='880399990383'
make_option_combination(50,{'10003006.SHO':48,'10003259.SHO':49},1,ContextInfo.accid,'stragegyName','strRemark',ContextInfo);
#第一个参数50为认购牛市价差策略
#第二个参数10003006.SHO(50ETF购6月3400),48(权利仓)10003259.SHO(50ETF购6月4400)49(义务仓)
#50ETF购6月3400/50ETF购6月4400g构建认购牛市价差策略
2
3
4
5
# (39)解除期权组合持仓 release_option_combination()
用法: release_option_combination(combID,accountID,strategyName,userOrderId,contextInfo)
释义: 解除期权组合持仓
参数:
- combID:持仓中期权组合编码
- accountID:string,账号
- strategyName:string,策略名
- userOrderId:string,投资备注
示例:
ContextInfo.accid='880399990383'
release_option_combination('V950034404',ContextInfo.accid,'strategyName','userOrderId',ContextInfo)
#解除组合号码为V950034404的组合期权(同组合策略持仓中的组合号码)
2
3