QMT Python API
交易函数
交易下单函数
综合下单函数 - passorder
综合下单函数,用于股票、期货、期权等下单和新股、新债申购、融资融券等交易操作推荐使用
提示
- 推荐使用
- 可覆盖多品种下单
- 注意参数的变化
调用方法:
passorder( opType, orderType, accountid , orderCode, prType, price, volume , strategyName, quickTrade, userOrderId , ContextInfo)'''passorder( 2 #opType 操作号 , 1101 #orderType 组合方式 , '1000044' #accountid 资金账号 , 'cu2403.SF' #orderCode 品种代码 , 14 #prType 报价类型 , 0.0 #price 价格 , 2 #volume 下单量 , '示例下单' #strategyName 策略名称 , 1 #quickTrade 快速下单标记 , '投资备注' #userOrderId 投资备注 , C #ContextInfo 策略上下文)'''参数:
| 参数名 | 类型 | 说明 | 提示 |
|---|---|---|---|
opType | int | 交易类型 | 可选买、买,期货开仓、平仓等 可选值参考opType-操作类型 |
orderType | int | 下单方式 | 可选值参考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 (只申购不买入成分股)。 |
accountID | string | 资金账号 | 下单的账号ID(可多个)或账号组名或套利组名(一个篮子一个套利账号,如 accountID = '股票账户名, 期货账号') |
orderCode | string | 下单代码 | 1. 如果是单股或单期货、港股,则该参数填合约代码; 2. 如果是组合交易, 则该参数填篮子名称,参考组合交易; 3. 如果是组合套利,则填一个篮子名和一个期货合约名(如orderCode = '篮子名, 期货合约名'),请参考组合套利交易 |
prType | int | 下单选价类型 | 可选值参考prType-下单选价类型 特别的对于套利,这个 prType 只对篮子起作用,期货的采用默认的方式) |
price | float | 下单价格 | 一、单股下单时,prType 是模型价/科创板盘后定价时 price 有效;其它情况无效;1.1 即单股时, prType 参数为 11,49 时被使用。 1.2 prType 参数不为 11,49 时也需填写,填写的内容可为 -1,0,2,100 等任意数字;二、组合下单时,是组合套利时,price 作套利比例有效,其它情况无效。 |
volume | int | 下单数量(股 / 手 / 元 / %) | 根据 orderType 值最后一位确定 volume 的单位,可选值参考volume - 下单 |
strategyName | string | 自定义策略名 | 一、用来区分 order 委托和deal 成交来自不同的策略。根据该策略名, get_trade_detail_data,get_last_order_id 函数可以获取相应策略名对应的委托或成交集合。 strategyName 只对同账号本地客户端有效,即 strategyName 只对当前客户端下的单进行策略区分,且该策略区分只能当前客户端使用。 |
quickTrade | int | 设定是否立即触发下单 | 可选值参考quicktrade - 快速下单 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 可拿到这两个对象信息。 |
| ContextInfo | class | 系统参数 | 含有k线信息和接口的上下文对象 |
返回:
无
更多示例:
算法下单(拆单)函数 - 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未赋值,则使用界面上的函数交易参数的报价方式
参数:
其他参数同passorder,详细解释可参考passorder的说明userOrderParam dict[str:value] 是用户自定义交易参数,主要用于修改算法交易的参数 其中Key Value定义如下
注:所有参数均为非必选
| Key | Value类型 | Value |
|---|---|---|
| OrderType | int | 普通交易:0算法交易: 1随机量交易: 2 |
| PriceType | int | 报价方式:数值同passorde prType |
| MaxOrderCount | int | 最大下单次数 |
| SinglePriceRange | int | 波动区间是否单向: 否: 0,是: 1 |
| PriceRangeType | int | 波动区间类型按比例:0,按数值1 |
| PriceRangeValue | float | 波动区间(按数值) |
| PriceRangeRate | float | 波动区间(按比例)[0-1] |
| SuperPriceType | int | 单笔超价类型: 按比例: 0按数值 1 |
| SuperPriceRate | float | 单笔超价(按比例)[0-1] |
| SuperPriceValue | float | 单笔超价(按数值) |
| VolumeType | int | 单笔基准量类型卖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 | float | 单笔下单比率[0-1] |
| SingleNumMin | float | 单笔下单量最小值 |
| SingleNumMax | float | 单笔下单量最大值 |
| ValidTimeType | int | 有效时间类型:0:按持续时间1 按时间区间,默认为0 |
| ValidTimeElapse | int | 有效持续时间,ValidTimeType设置为0时生效 |
| ValidTimeStart | int | 有效开始时间偏移,ValidTimeType设置为1时生效 |
| ValidTimeEnd | int | 有效结束时间偏移,ValidTimeType设置为1时生效 |
| UndealtEntrustRule | int | 未成委托处理数值同prType |
| PlaceOrderInterval | int | 下撤单时间间隔 |
| UseTrigger | int | 是否触价: 否: 0是: 1 |
| TriggerType | int | 触价类型: 最新价大于: 1最新价小于: 2 |
| TriggerPrice | float | 触价价格 |
| SuperPriceEnable | int | 超价启用笔数 |
返回
无
示例
#coding:gbkuserparam = { "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元,其他参数同函数交易参数中设置智能算法(VWAP 等)函数 - smart_algo_passorder
提示
- 调用该函数需要有【智能算法】使用权限
用于使用主动算法或被动算法交易的函数如VWAP TWAP等
调用方法一:
smart_algo_passorder(opType,orderType,accountid,orderCode,prType,price,volume,strageName,quickTrade,userOrderId,smartAlgoType,limitOverRate,minAmountPerOrder,[targetPriceLevel,startTime,endTime,limitControl],ContextInfo)提示
可选参数可缺省
参数:
其他参数同passorder,详细解释可参考passorder的说明
| 参数名 | 类型 | 说明 | 提示 |
|---|---|---|---|
| prType | int | 可选值: 11:限价(只对单股情况支持,对组合交易不支持) 12:市价 特别的对于套利:这个prType只对篮子起作用,期货的采用默认的方式 | |
| smartAlgoType | str | 智能算法类型 [enum_constants#smartAlgoType智能算法类型] | |
| limitOverRate | int | 量比 数据范围0-100 | 网格算法无此项 若在algoParam中填写量比,则填写范围0-1的小数。 |
| minAmountPerOrder | int | 智能算法最小委托金额,数据范围0-100000 | |
| targetPriceLevel | int | 智能算法目标价格,可选值: 1:己方盘口 1 2:己方盘口2 3:己方盘口3 4:己方盘口4 5:己方盘口5 6:最新价 7:对方盘口 | 一、输入无效值则targetPriceLevel为1 二、本项只针对冰山算法,其他算法可缺省。 |
| startTime | str | 智能算法开始时间 | 格式"HH:MM:SS",如"10:30:00"。如果缺省值,则默认为"09:30:00" |
| endTime | str | 智能算法截止时间 | 格式"HH:MM:SS",如"14:30:00"。如果缺省值,则默认为"15:30:00" |
| limitControl | int | 涨跌停控制 | 默认值为1 1:涨停不卖跌停不买 0:无限制 |
返回
无
示例:
#coding:gbk def init(ContextInfo): pass def after_init(ContextInfo): # # 使用smart_algo_passorder 下单 smart_algo_passorder( 23, # 买入 1101, # 表示volume的单位是股 account, # 资金账号 '000001.SZ', 12, # 11限价,12市价 0, # 限价时,价格填任意数量占位 50000, # 5000股 '', 2, # quickTrade '', 'VWAP', 25, # 量比25% 0, # 智能算法最小委托金额 1, # 智能算法目标价格 本项只针对冰山算法,其他算法可缺省。 "10:25:00", # 开始时间 "14:50:00", # 结束时间 1, # 涨跌停控制 1为涨停不卖跌停不卖 0 为无限制 ContextInfo )调用方法二:
当时用algoParam时,函数声明为:smart_algo_passorder(opType,orderType,accountid,orderCode,prType,modelprice,volume,strageName,quickTrade,userid,smartAlgoType,startTime,endTime,algoParam,ContextInfo)参数均不可缺省smartAlgoType,startTime,endTime 含义同上,algoParam请使用下面的方法获取:
获取algoParam具体字段
释义
获取智能算法参数配置信息
用法
get_smart_algo_param(algoList)参数
| 参数 | 类型 | 说明 |
|---|---|---|
algoList | list | 需要查询参数配置信息的算法名称列表, 若传空则查询全部有权限的算法参数配置信息 |
返回
返回一个字典,键为算法名称,值为参数字典列表。
| 字段 | 类型 | 说明 |
|---|---|---|
key | string | 参数名称key值,即smart_algo_order中algoList字典需要传的键值 |
name | string | 参数名称 |
dataType | string | 参数类型 |
valueRange | string | 参数范围 |
defaultValue | string | 参数默认值 |
enumName | string | 参数枚举值的名称 |
enumValue | string | 参数实际的枚举值 |
unit | string | 参数的单位, 当单位为%时, 值要填写小数而非参数范围所示的百分数值 |
valueRangeByName | string | 不同算法参数范围 |
defaultValueByName | string | 不同算法参数默认值 |
示例
#coding:gbk def init(ContextInfo): pass # 方法2 使用algoParam 和smart_algo_passorder # 该方法部分旧版本客户端可能会不支持 # algoParam # 先获取所有需要传入的参数 # print(get_smart_algo_param(['VWAP'])) ''' 输出:[2024-01-30 11:21:10][智能算法1][SH000300][日线] {'VWAP': [ {'key': 'm_dLimitOverRate', 'name': '量比比例', 'dataType': '浮点数', 'valueRange': '0.00-100.00', 'defaultValue': '20.00', 'enumName': '', 'enumValue': '', 'unit': '%', 'valueRangByName': '', 'defaultValueByName': ''}, {'key': 'm_dMinAmountPerOrder', 'name': '委托最小金额', 'dataType': '整数', 'valueRange': '0-100000', 'defaultValue': '0', 'enumName': '', 'enumValue': '', 'unit': '', 'valueRangByName': '', 'defaultValueByName': ''}, {'key': 'm_dMaxAmountPerOrder', 'name': '委托最大金额', 'dataType': '浮点数', 'valueRange': '0.00-100000000.00', 'defaultValue': '0', 'enumName': '', 'enumValue': '', 'unit': '', 'valueRangByName': '', 'defaultValueByName': ''}, {'key': 'm_nStopTradeForOwnHiLow', 'name': '涨跌停控制', 'dataType': '整数', 'valueRange': '', 'defaultValue': '涨停不卖跌停不买', 'enumName': '无,涨停不卖跌停不买', 'enumValue': '0,1', 'unit': '', 'valueRangByName': '', 'defaultValueByName': ''}, {'key': 'm_dMulitAccountRate', 'name': '多账号总量比', 'dataType': '浮点数', 'valueRange': '0.00-100.00', 'defaultValue': '0', 'enumName': '', 'enumValue': '', 'unit': '%', 'valueRangByName': '', 'defaultValueByName': ''}, {'key': 'm_strCmdRemark', 'name': '投资备注', 'dataType': '字符串', 'valueRange': '', 'defaultValue': '', 'enumName': '', 'enumValue': '', 'unit': '', 'valueRangByName': '', 'defaultValueByName': ''}]} ''' algoParam={ 'm_dLimitOverRate': 0.25, # 量比 25% 'm_dMinAmountPerOrder':0, # 委托最小金额 'm_dMaxAmountPerOrder':10000, # 委托最大金额 'm_nStopTradeForOwnHiLow': 1, # 涨跌停控制 'm_dMulitAccountRate':0.30, # 多账号总量比 'm_strCmdRemark': '投资备注1' # 投资备注 } smart_algo_passorder( 23, 1101, account, '600000.SH', 12, 0, 10000, '', 2, # quickTrade '投资备注', 'VWAP', "10:25:00", # 开始时间 "14:50:00", # 结束时间 algoParam, # 算法参数 ContextInfo ) cancel-撤销委托
调用方法cancel(orderId, accountId, accountType, ContextInfo)
参数
| 参数名 | 类型 | 含义 | 说明 |
|---|---|---|---|
| orderId | string | 委托号 | 必填 |
| accountID | string | 资金账号 | 必填 |
| AccountType | string | 账号类型 可选: 'FUTURE':期货 'STOCK':股票 'CREDIT':信用 'HUGANGTONG':沪港通 'SHENGANGTONG':深港通 'STOCK_OPTION':期权 | 必填 |
| ContextInfo | class | 含有k线信息和接口的上下文对象 | 必填 |
返回 bool,是否发出了取消委托信号,返回值含义:
True:是
False:否
示例
#coding:gbk'''(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): if ContextInfo.is_last_bar(): orderid = get_last_order_id(ContextInfo.accid, 'stock', 'order') print(cancel(orderid, ContextInfo.accid, 'stock', ContextInfo))撤销任务 - cancel_task
调用方法cancel_task(taskId,accountId,accountType,ContextInfo)
参数
| 参数名 | 类型 | 含义 | 说明 |
|---|---|---|---|
| taskId | string | 委托号 | 必填 |
| accountID | string | 资金账号 | 必填 |
| AccountType | string | 账号类型 可选: 'FUTURE':期货 'STOCK':股票 'CREDIT':信用 'HUGANGTONG':沪港通 'SHENGANGTONG':深港通 'STOCK_OPTION':期权 | 必填 |
| ContextInfo | class | 含有k线信息和接口的上下文对象 | 必填 |
返回 bool,是否发出了撤销任务信号,返回值含义:
True:是
False:否
示例
#coding:gbk'''(1)根据get_trade_detail_data函数返回任务的信息,获取任务编号(m_nTaskId),任务状态等等;(2)根据任务编号,用cancel_task取消委托。''' def init(ContextInfo): ContextInfo.accid = '6000000248' def handlebar(ContextInfo): # 获取当前客户端所有的任务 if ContextInfo.is_last_bar(): objlist = get_trade_detail_data(ContextInfo.accid,'stock','task') for obj in objlist: cancel_task(str(obj.m_nTaskId),ContextInfo.accid,'stock',ContextInfo)暂停任务 - pause_task
暂停智能算法任务
调用方法 pause_task(taskId,accountId,accountType,ContextInfo)
参数
| 参数名 | 类型 | 含义 | 说明 |
|---|---|---|---|
| taskId | string | 委托号 | 必填 |
| accountID | string | 资金账号 | 必填 |
| AccountType | string | 账号类型 可选: 'FUTURE':期货 'STOCK':股票 'CREDIT':信用 'HUGANGTONG':沪港通 'SHENGANGTONG':深港通 'STOCK_OPTION':期权 | 必填 |
| ContextInfo | class | 含有k线信息和接口的上下文对象 | 必填 |
返回 bool,是否发出了暂停任务信号,返回值含义:
True:是
False:否
示例
#coding:gbk'''(1)根据get_trade_detail_data函数返回任务的信息,获取任务编号(m_nTaskId),任务状态等等;(2)根据任务编号,用pause_task暂停智能算法任务。''' def init(ContextInfo): ContextInfo.accid = '6000000248' def handlebar(ContextInfo): if ContextInfo.is_last_bar(): # 获取当前客户端所有的任务 objlist = get_trade_detail_data(ContextInfo.accid,'stock','task') for obj in objlist: pause_task(obj.m_nTaskId,ContextInfo.accid,'stock',ContextInfo)继续任务 - resume_task
继续智能算法任务
调用方法resume_task(taskId,accountId,accountType,ContextInfo)
参数
| 参数名 | 类型 | 含义 | 说明 |
|---|---|---|---|
| taskId | string | 委托号 | 必填 |
| accountID | string | 资金账号 | 必填 |
| AccountType | string | 账号类型 可选: 'FUTURE':期货 'STOCK':股票 'CREDIT':信用 'HUGANGTONG':沪港通 'SHENGANGTONG':深港通 'STOCK_OPTION':期权 | 必填 |
| ContextInfo | class | 含有k线信息和接口的上下文对象 | 必填 |
返回 bool,是否发出了重启任务信号,返回值含义:
True:是
False:否
示例
#coding:gbk'''(1)根据get_trade_detail_data函数返回任务的信息,获取任务编号(m_nTaskId),任务状态等等;(2)根据任务编号,用resume_task启动已暂停智能算法任务。''' def init(ContextInfo): ContextInfo.accid = '6000000248' def handlebar(ContextInfo): if ContextInfo.is_last_bar(): # 获取当前客户端所有的任务 objlist = get_trade_detail_data(ContextInfo.accid,'stock','task') for obj in objlist: resume_task(obj.m_nTaskId,ContextInfo.accid,'stock',ContextInfo)get_basket-获取股票篮子
用法: get_basket(basketName)
释义: 获取股票篮子
参数:
- basketName:股票篮子名称
示例:
print( get_basket('basket1') )set_basket-设置股票篮子
用法: set_basket(basketDict)
释义: 设置passorder的股票篮子,仅用于passorder进行篮子交易,设置成功后,用get_basket可以取出后即可进行passorder组合交易下单
参数:
- basketDict:股票篮子 {'name':股票篮子名称,'stocks':[{'stock':股票名称,'weight',权重,'quantity':数量,'optType':交易类型}]} 。
示例:
table=[ {'stock':'600000.SH','weight':0.11,'quantity':100,'optType':23}, {'stock':'600028.SH','weight':0.11,'quantity':200,'optType':24},]basket={'name':'basket1','stocks':table}set_basket(basket)#一键买卖2份(2101代表用篮子里quantity字段)basket1里面的股票组合,即600000.SH买入200股,600028.SH卖出400股passorder(35,2101,ContextInfo.accid,'basket1',5,-1,2,'basketOrder',2,'basketOrder',ContextInfo)交易查询函数
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 | 要查询数据类型 可选:ACCOUNT:账号对象或信用账号对象POSITION:持仓POSITION_STATISTICS:持仓统计ORDER:委托DEAL :成交TASK:任务 | 必填 |
| strategyName | string | 策略 当用passorder下单时指定了strategyName 参数时,当查询成交和委托时传入同样的strageName,则可以只返回包含strategyName的委托子集或成交子集 | strategyName参数只对成交和委托有效,选填 |
返回 list,list 中放的是对应strDatatype的 Python对象,通过 dir(pythonobj) 可返回某个对象的属性列表。
示例:
#coding:gbk account = '800174' # 在策略交易界面运行时,account的值会被赋值为策略配置中的账号,编辑器界面运行时,需要手动赋值;编译器环境里执行的下单函数不会产生实际委托 def init(ContextInfo): pass def handlebar(ContextInfo): if not ContextInfo.is_last_bar(): return orders = get_trade_detail_data(account, 'stock', 'order') print('查询委托结果:') for o in orders: print(f'股票代码: {o.m_strInstrumentID}, 市场类型: {o.m_strExchangeID}, 证券名称: {o.m_strInstrumentName}, 买卖方向: {o.m_nOffsetFlag}', f'委托数量: {o.m_nVolumeTotalOriginal}, 成交均价: {o.m_dTradedPrice}, 成交数量: {o.m_nVolumeTraded}, 成交金额:{o.m_dTradeAmount}') deals = get_trade_detail_data(account, 'stock', 'deal') print('查询成交结果:') for dt in deals: print(f'股票代码: {dt.m_strInstrumentID}, 市场类型: {dt.m_strExchangeID}, 证券名称: {dt.m_strInstrumentName}, 买卖方向: {dt.m_nOffsetFlag}', f'成交价格: {dt.m_dPrice}, 成交数量: {dt.m_nVolume}, 成交金额: {dt.m_dTradeAmount}') positions = get_trade_detail_data(account, 'stock', 'position') print('查询持仓结果:') for dt in positions: print(f'股票代码: {dt.m_strInstrumentID}, 市场类型: {dt.m_strExchangeID}, 证券名称: {dt.m_strInstrumentName}, 持仓量: {dt.m_nVolume}, 可用数量: {dt.m_nCanUseVolume}', f'成本价: {dt.m_dOpenPrice:.2f}, 市值: {dt.m_dInstrumentValue:.2f}, 持仓成本: {dt.m_dPositionCost:.2f}, 盈亏: {dt.m_dPositionProfit:.2f}') accounts = get_trade_detail_data(account, 'stock', 'account') print('查询账号结果:') for dt in accounts: print(f'总资产: {dt.m_dBalance:.2f}, 净资产: {dt.m_dAssureAsset:.2f}, 总市值: {dt.m_dInstrumentValue:.2f}', f'总负债: {dt.m_dTotalDebit:.2f}, 可用金额: {dt.m_dAvailable:.2f}, 盈亏: {dt.m_dPositionProfit:.2f}') position_statistics = get_trade_detail_data(account,"FUTURE",'POSITION_STATISTICS') for obj in position_statistics: if obj.m_nDirection == 49: continue PositionInfo_dict[obj.m_strInstrumentID+"."+obj.m_strExchangeID]={ "持仓":obj.m_nPosition, "成本":obj.m_dPositionCost, "浮动盈亏":obj.m_dFloatProfit, "保证金占用":obj.m_dUsedMargin } print(PositionInfo_dict) 查询历史交易明细 - get_history_trade_detail_data
用法: get_history_trade_detail_data(accountID,strAccountType,strDatatype,strStratDate,strEndDate);
释义: 获取历史成交明细数据,返回结果为一个([timetag,obj...])的元组
参数:
accountID:string,账号; strAccountType:string,账号类型,有"FUTURE","STOCK","CREDIT","HUGANGTONG","SHENGANGTONG","STOCK_OPTION"; strDatatype:string,交易明细数据类型,有:持仓"POSITION"、委托"ORDER"、成交"DEAL"; strStratDate:string,开始时间,如'20240513'; strEndDate:string,结束时间,如'20240514';
**返回:**list,list中放的是PythonObj,通过dir(pythonobj)可返回某个对象的属性列表 示例:
def handlebar(ContextInfo): obj_list = get_history_trade_detail_data('6000000248','stock','position','20240513','20240514') for time,data in obj_list: for obj in data: print(obj.m_strInstrumentID) print(dir(obj))#查看有哪些属性字段get_ipo_data-获取当日新股新债信息
用法: get_ipo_data([,type])
释义: 获取当日新股新债信息,返回结果为一个字典,包括新股申购代码,申购名称,最大申购数量,最小申购数量等数据
参数:
- type:为空时返回新股新债信息,type="STOCK"时只返回新股申购信息,type="BOND"时只返回新债申购信息
示例:
#coding:gbkdef init(ContextInfo): ipoData=get_ipo_data()# 返回新股新债信息 ipoStock=get_ipo_data("STOCK")# 返回新股信息 ipoCB=get_ipo_data("BOND")# 返回新债申购信息get_new_purchase_limit-获取账户新股申购额度
用法: get_new_purchase_limit(accid)
释义: 获取账户新股申购额度,返回结果为一个字典,包括上海主板,深圳市场,上海科创版的申购额度
参数:
- accid:资金账号,必须时股票账号或者信用账号
示例:
def init(ContextInfo): ContextInfo.accid="10000001"# 返回新股新债信息 purchase_limit=get_new_purchase_limit(ContextInfo.accid)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)参数
| 参数名 | 类型 | 含义 | 说明 |
|---|---|---|---|
| accountID | string | 资金账号 | 必填 |
| strAccountType | string | 账号类型 可选: 'FUTURE':期货 'STOCK':股票 'CREDIT':信用 'HUGANGTONG':沪港通 'SHENGANGTONG':深港通 'STOCK_OPTION':期权 | 必填 |
| strDatatype | string | 要查询数据类型 可选: 'ORDER':委托 'DEAL' :成交 | 必填 |
| strategyName | string | 策略 当用passorder下单时指定了strategyName 参数时,当查询成交和委托时传入同样的strageName,则可以只返回包含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)get_assure_contract-获取两融担保标的明细
用法: get_assure_contract(accId)
释义: 获取信用账户担保合约明细
参数:
- accId:信用账户
返回: list,list 中放的是 StkSubjects,通过 dir(pythonobj) 可返回某个对象的属性列表。
示例:
def show_data(data): tdata = {} for ar in dir(data): if ar[:2] != 'm_':continue try: tdata[ar] = data.__getattribute__(ar) except: tdata[ar] = '<CanNotConvert>' return tdata def handlebar(ContextInfo): obj = get_assure_contract('6000000248') for i in obj[:3]: print(show_data(i)) """{'m_dAssureRatio': 0.0, # 担保品折算比例'm_dFinRatio': 0.8, # 融资保证金比例'm_dSloRatio': 1.0, # 融券保证金比例'm_eAssureStatus': 50, # 是否可做担保'm_eCreditFundCtl': 50, # 融资交易控制'm_eCreditStkCtl': 50, # 融券交易控制'm_eFinStatus': 48, # 融资状态'm_eSloStatus': 48, # 融券状态'm_nPlatformID': 10064, # 平台号'm_strAccountID': '95000857', # 资金账号'm_strBrokerID': '003', # 经纪公司编号'm_strBrokerName': '光大证券信用', # 证券公司'm_strExchangeID': 'SH', # 交易所'm_strInstrumentID':'510150' # 证券代码""" get_enable_short_contract-获取可融券明细
提示
注:由于字段m_dSloRatio、m_dSloStatus提供来源和取担保品明细(get_assure_contract)重复,字段在2021年9月移除,后续用担保品明细接口获取,具体见 担保标的对象字段说明
用法: get_enable_short_contract(accId)
释义: 获取信用账户当前可融券的明细
参数:
- accId:信用账户
返回: list,list 中放的是 CreditSloEnableAmount,通过 dir(pythonobj) 可返回某个对象的属性列表。
示例:
#coding:gbkdef init(ContextInfo): pass def handlebar(ContextInfo): if not ContextInfo.is_last_bar(): return obj = get_enable_short_contract('200133') for i in obj[:3]: print('─' * 50) print(f"平台号 : {i.m_nPlatformID}") print(f"经纪公司编号 : {i.m_strBrokerID}") print(f"经纪公司 : {i.m_strBrokerName}") print(f"资金账号 : {i.m_strAccountID}") print(f"交易所 : {i.m_strExchangeID}") print(f"证券代码 : {i.m_strInstrumentID}") print(f"融券可融数量 : {i.m_nEnableAmount}") print(f"查询类型 : {i.m_eQuerySloType}") # 48:普通,49:专项 print('─' * 50)"""Return──────────────────────────────────────────────────平台号 : 11111经纪公司编号 : 经纪公司 : 模拟证券资金账号 : 2000233交易所 : SZ证券代码 : 000001融券可融数量 : 500000查询类型 : 49──────────────────────────────────────────────────"""查询信用账户明细 - query_credit_account
注意
- 本函数一次最多查询200只股票的两融最大下单量,且同时只能有一个查询,如果前面的查询正在进行中,后面的查询将会提前返回。本函数从服务器查询数据,建议平均查询时间间隔180s一次,不可频繁调用。
- 该函数必须配合credit_account_callback回调才能使用,关于此回调的说明请看credit_account_callback
- callback返回的对象是CCreditAccountDetail
调用query_credit_account,该接口的查询结果将会推送给credit_account_callback,所以程序里需要按照函数参数实现函数credit_account_callback,callback返回的对象是CCreditAccountDetail
用法: query_credit_account(accountId,seq,ContextInfo)
释义: 查询信用账户明细。本函数只能有一个查询,如果前面的查询正在进行中,后面的查询将会提前返回。
参数:
accountId:string,查询的两融账号
seq:int,查询序列号,建议输入唯一值以便对应结果回调
示例:
#coding:gbk import time def init(ContextInfo): ContextInfo.accid='200133' def handlebar(ContextInfo): if ContextInfo.is_last_bar(): query_credit_account(ContextInfo.accid,int(time.time()),ContextInfo)# 该函数必须配合credit_account_callback回调才能使用def credit_account_callback(ContextInfo,seq,result): print(seq) print(f":维持担保比例:{result.m_dPerAssurescaleValue:.2f},总负债:{result.m_dTotalDebt:.2f}") 回调示例 见query_credit_account
查询两融最大可下单量 - query_credit_opvolume
注意
- 本函数一次最多查询200只股票的两融最大下单量,且同时只能有一个查询,如果前面的查询正在进行中,后面的查询将会提前返回。本函数从服务器查询数据,建议平均查询时间间隔180s一次,不可频繁调用。
- 该函数必须配合credit_opvolume_callback回调才能使用,关于此回调的说明请看credit_account_callback
调用query_credit_opvolume,该接口的查询结果将会推送给credit_opvolume_callback,所以必须配合credit_opvolume_callback回调才能使用
用法: query_credit_opvolume(accountId,stockCode,opType,prType,price,seq,ContextInfo)
释义: 查询两融最大可下单量。
参数:
accountId:查询的两融账号stockCode:需要查询的股票代码,stockCode为List的类型,可以查询多只股票opType:两融下单类型,同passorder的下单类型prType:报单价格类型,同passorder的报价类型seq:查询序列号,int型,建议输入唯一值以便对应结果回调price:报价(非限价单可以填任意值),如果stockCode为List类型,报价也需要为长度相同的ListContextInfo:ContextInfo类
示例:
#coding:gbk"""QMT内置python - 两融最大可下单量查询完整示例(run_time定时器版) 功能说明: 1. 不依赖handlebar行情驱动,改用run_time定时器驱动 2. 定时器周期设为180秒(3分钟),严格满足查询间隔要求 3. 通过 credit_opvolume_callback 接收查询结果 4. 演示如何根据查询结果执行实际下单(可选) 注意事项: - run_time定时器在回测模式下无效,仅用于实盘 - 定时器没有单独结束方法,策略停止时自动结束 - 本函数一次最多查询200只股票 - 同时只能有一个查询在进行中,前面查询未完成时后续查询会返回-1 - 必须从服务器查询数据,建议平均查询时间间隔180s一次,不可频繁调用 - 该函数必须配合 credit_opvolume_callback 回调才能使用""" import time # ==================== 全局变量 ====================class G: pass g = G() # ============================================================# init - 初始化函数(策略启动时仅执行一次)# ============================================================def init(ContextInfo): """初始化:设置账号、初始化全局变量、注册定时器""" # 设置两融账号(必须先在QMT客户端登录该账号) ContextInfo.accid = '200133' # 记录上次查询时间戳,用于控制查询间隔(>=180秒) g.last_query_time = 0 # 记录上次查询的序列号,用于匹配回调结果 g.last_seq = 0 # 存储查询结果,供后续下单逻辑使用 g.query_result = {} # 设置要监听的账号(如需资金/委托/成交回调则启用) # ContextInfo.set_account(ContextInfo.accid) # ==================== 注册run_time定时器 ==================== # 用法: ContextInfo.run_time(funcName, period, startTime) # funcName: 回调函数名称(字符串) # period: 重复调用间隔,'180nSecond'表示每180秒触发一次 # startTime: 首次触发时间,设置历史时间可尽快启动 # # 注意:定时器在第一次运行前可能会先等待一个period(180秒), # 这正好符合服务器要求的最小查询间隔。 ContextInfo.run_time( "query_credit_timer", # 定时器回调函数名 "180nSecond", # 每180秒(3分钟)触发一次 "1970-01-01 00:00:00" # 设置历史时间,使定时器尽快生效 ) print(f'[{time.strftime("%H:%M:%S")}] 策略初始化完成') print(f'[{time.strftime("%H:%M:%S")}] 已注册run_time定时器:每180秒执行一次 query_credit_timer') print(f'[{time.strftime("%H:%M:%S")}] 监控账号: {ContextInfo.accid}') # ============================================================# handlebar - 行情事件函数(本示例中不执行逻辑,留空即可)# ============================================================def handlebar(ContextInfo): """ 行情事件函数。 本策略完全由run_time定时器驱动,handlebar中不做任何操作。 如需在K线变化时执行其他逻辑,可在此添加。 """ pass # ============================================================# query_credit_timer - run_time定时器回调函数# ============================================================def query_credit_timer(ContextInfo): """ run_time定时器回调函数,每180秒触发一次 功能: 1. 检查查询间隔是否满足>=180秒(双重保险) 2. 调用 query_credit_opvolume 发起查询 3. 结果通过 credit_opvolume_callback 异步返回 """ current_time = time.time() # ==================== 双重保险:检查查询间隔 ==================== # run_time本身已设置为180秒周期,此处再加一层防护, # 防止因QMT异常重调导致查询过于频繁 time_since_last = current_time - g.last_query_time if time_since_last < 180: print(f'[{time.strftime("%H:%M:%S")}] [定时器] 距离上次查询仅 {int(time_since_last)} 秒,跳过本次调用') return # 更新上次查询时间 g.last_query_time = current_time # 生成唯一查询序列号(用时间戳即可) seq = int(current_time) g.last_seq = seq # ==================== 示例1:单股票查询 ==================== print(f'\n[{time.strftime("%H:%M:%S")}] [定时器] === 发起单股票查询,seq={seq} ===') query_credit_opvolume( ContextInfo.accid, # 两融账号 '600000.SH', # 股票代码(单只) 33, # opType: 33=担保品买入 11, # prType: 11=指定价 10.0, # price: 限价10元 seq, # seq: 查询序列号 ContextInfo # ContextInfo对象 ) # ==================== 示例2:多股票查询(可选,取消注释使用) ==================== # seq2 = int(current_time) + 1 # print(f'[{time.strftime("%H:%M:%S")}] [定时器] === 发起多股票查询,seq={seq2} ===') # query_credit_opvolume( # ContextInfo.accid, # ['600000.SH', '000001.SZ'], # 股票列表(最多200只) # 33, # 担保品买入 # 11, # 指定价 # [10.0, 20.0], # 对应价格列表 # seq2, # ContextInfo # ) # ============================================================# credit_opvolume_callback - 两融可下单量查询结果回调# ============================================================def credit_opvolume_callback(ContextInfo, accid, seq, ret, result): """ 两融最大可下单量查询结果回调(必须定义此函数才能接收结果) 参数: ContextInfo: 策略上下文对象 accid: 资金账号 seq: 查询时传入的序列号,可用于匹配是哪次查询的结果 ret: 查询结果状态码(1成功,-1查询中,-2账号非法,-3参数非法,-4超时/报错) result: 查询结果数据(ret=1时有效,具体格式取决于券商返回) """ print(f'\n[{time.strftime("%H:%M:%S")}] === credit_opvolume_callback 触发 ===') print(f'账号: {accid}') print(f'序列号: {seq} (上次发送seq={g.last_seq})') print(f'返回码 ret: {ret}') # -------------------- 状态码处理 -------------------- if ret == 1: # 查询成功 print(f'查询成功!结果: {result}') # 保存结果到全局变量,供后续策略逻辑使用 g.query_result[seq] = { 'accid': accid, 'result': result, 'time': time.time() } # ==================== 示例:根据查询结果下单 ==================== # 假设 result 中包含可下单量信息(具体字段名需根据实际返回格式调整) # 以下为演示逻辑,实际使用时请根据result的实际结构解析 # max_volume = parse_max_volume(result) # 需根据实际返回格式解析 # if max_volume and max_volume > 0: # print(f'最大可下单量: {max_volume},准备下单...') # passorder( # 33, 1101, accid, '600000.SH', # 11, 10.0, max_volume, # '两融策略', 2, '', ContextInfo # ) # else: # print('可下单量为0或无法解析,取消下单') elif ret == -1: print('查询失败:前序查询正在进行中,请等待完成后重试') elif ret == -2: print('查询失败:输入账号非法,请检查账号是否为有效两融账号') elif ret == -3: print('查询失败:输入查询参数非法,请检查股票代码/价格/操作类型等参数') elif ret == -4: print('查询失败:超时或服务器返回报错,建议稍后重试') else: print(f'查询失败:未知状态码 {ret}') print('=' * 50) get_option_subject_position-取期权标的持仓
用法: get_option_subject_position(accountID)
释义: 取期权标的持仓
参数:
- accountID:string,账号
返回: list,list中放的是CLockPosition,通过dir(pythonobj)可返回某个对象的属性列表
示例:
data=get_option_subject_position('880399990383')print(len(data));forobjindata: print(obj.m_strInstrumentName,obj.m_lockVol,obj.m_coveredVol);get_comb_option-取期权组合持仓
用法: get_comb_option(accountID)
释义: 取期权组合持仓
参数:
- accountID:string,账号
返回: list,list中放的是CStkOptCombPositionDetail ,通过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)get_unclosed_compacts-获取未了结负债合约明细
用法: get_unclosed_compacts(accountID,accountType)
释义: 获取未了结负债合约明细
参数:
- accountID:str,资金账号
- accountType:str,账号类型,这里应该填'CREDIT'
返回:
list([ CStkUnclosedCompacts, ... ]) 负债列表,CStkUnclosedCompacts属性如下:
| 字段名称 | 类型 | 说明 |
|---|---|---|
m_strAccountID | string | 账号ID |
m_nBrokerType | int | 账号类型 1-期货账号 2-股票账号 3-信用账号 5-期货期权账号 6-股票期权账号 7-沪港通账号 11-深港通账号 |
m_strExchangeID | string | 市场 |
m_strInstrumentID | string | 证券代码 |
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 | string | 合约编号 |
m_strEntrustNo | string | 委托编号 |
m_nRepayPriority | int | 偿还优先级 |
m_strPositionStr | string | 定位串 |
m_eCompactRenewalStatus | int | 合约展期状态 48-可申请 49-已申请 50-审批通过 51-审批不通过 52-不可申请 53-已执行 54-已取消 |
m_nDeferTimes | int | 展期次数 |
示例:
get_unclosed_compacts('6000000248', 'CREDIT')get_closed_compacts-获取已了结负债合约明细
用法: get_closed_compacts(accountID,accountType)
释义: 获取已了结负债合约明细
参数:
- accountID:str,资金账号
- accountType:str,账号类型,这里应该填'CREDIT'
返回:
list([ CStkUnclosedCompacts, ... ]) 负债列表,CStkUnclosedCompacts属性如下:
| 字段名 | 类型 | 描述 |
|---|---|---|
m_strAccountID | string | 账号ID |
m_nBrokerType | int | 账号类型 1-期货账号 2-股票账号 3-信用账号 5-期货期权账号 6-股票期权账号 7-沪港通账号 11-深港通账号 |
m_strExchangeID | string | 市场 |
m_strInstrumentID | string | 证券代码 |
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 | string | 合约编号 |
m_strEntrustNo | string | 委托编号 |
m_strPositionStr | string | 定位串 |
示例:
get_closed_compacts('6000000248', 'CREDIT')其他交易函数(仅回测可用)
风险
以下函数仅回测生效,实盘和模拟盘交易均不可用
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')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')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')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')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')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')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')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')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')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')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')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')[已弃用] 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)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)