交易函数 |
您所在的位置:网站首页 › 转股算法 › 交易函数 |
# 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) 123456789101112131415161718# (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} 12若使用该字典填写参数,则调用形式必须为: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) 1234返回: 无 示例: 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) 123456789# (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) 可返回某个对象的属性列表。 有五种交易相关信息,包括: POSITION:持仓 ORDER:委托 DEAL:成交 ACCOUNT:账号对象或信用账号对象 TASK:任务 示例: 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) 12345678910111213141516# (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) 12345678# (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) 12345678# (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) 12345678# (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)) 1234567891011121314151617# (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) 123456789101112# (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) 1234567891011# (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) 1234567891011# (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 对应 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元,其他参数同函数交易参数中设置 12345678# (30)获取股票篮子 get_basket()用法: get_basket(basketName) 释义: 获取股票篮子 参数: basketName:股票篮子名称示例: print( get_basket('basket1') ) 1# (31)设置股票篮子 set_basket()用法: set_basket(basketDict) 释义: 设置passorder的股票篮子,仅用于passorder进行篮子交易,设置成功后,用get_basket可以取出后即可进行passorder组合交易下单 参数: basketDict:股票篮子 {'name':股票篮子名称,'stocks':[{'stock':股票名称,'weight',权重,'quantity':数量,'optType':交易类型}]} 。示例: print( set_basket('basket1') ) 1# (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') 1# (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') 1# (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) 123# (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) 1234# (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); 1234# (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) 1234# (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构建认购牛市价差策略 12345# (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的组合期权(同组合策略持仓中的组合号码) 123 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |