2026.01.04 周日 新年开新帖
二五无收亏甚麻
麒麟艾玛废年华
他人爆赚平常事
我自无言食破瓜
一路埋头研策略
多开反馈线坑洼
如今不敢谈规划
冷饭清汤隔夜茶
二五无收亏甚麻
麒麟艾玛废年华
他人爆赚平常事
我自无言食破瓜
一路埋头研策略
多开反馈线坑洼
如今不敢谈规划
冷饭清汤隔夜茶
0
xcdk2018 - 小韭菜
期货持仓统计查询接口 xt_trader.query_position_statistics(account)
总结一下国金期货QMT持仓、平仓遇到的坑,首先这个问题可能不是国金独有的,而是miniqmt都有,原因在于持仓界面一个字段是【今仓】,这导致:今 or 昨,多 or 空,的组合下出现了4组。也就是持仓的同一个代码,对应4条记录。
实测的结果是:
1、对于今日开仓来说,today_position 这个字段是没用的,因为你即便今天开仓,它依然为0。
2、can_close_vol 这个字段是实时的,如果把昨仓委托了,那么对应的这个字段就会减少。
3、对于昨仓来说,如果平仓成功,其yesterday_position 会被扣减。
在期货6件风格的限制下,一条平仓指令极有可能生成两条下单委托,平今、平昨,因此,在获取持仓的时候,区分今仓可用数,昨仓可用是非常重要的。
如果不区分,则需要分别对平今、平昨,每次平1手,各下 can_close_vol 次,以保证指令正常。
昨仓可用 = 当 can_close_vol >0 时,min(can_close_vol,yesterday_position),否则为0
然后 按照 direction和 instrument_id分组 ,并对指定列的数值列进行累加聚合
把对齐的颗粒度依照方向加合约生成两条,
今仓可用 = 聚合后的can_close_vol - 聚合后的昨仓可用
最后平仓的时候,按照 昨仓可用 、 今仓可用 进行平昨,平今
另一个则是命名上的小坑
平 + 多 = 平空
平 + 空 = 平多
买 + 多 = 开多
买 + 空 = 开空
总结一下国金期货QMT持仓、平仓遇到的坑,首先这个问题可能不是国金独有的,而是miniqmt都有,原因在于持仓界面一个字段是【今仓】,这导致:今 or 昨,多 or 空,的组合下出现了4组。也就是持仓的同一个代码,对应4条记录。
实测的结果是:
1、对于今日开仓来说,today_position 这个字段是没用的,因为你即便今天开仓,它依然为0。
2、can_close_vol 这个字段是实时的,如果把昨仓委托了,那么对应的这个字段就会减少。
3、对于昨仓来说,如果平仓成功,其yesterday_position 会被扣减。
在期货6件风格的限制下,一条平仓指令极有可能生成两条下单委托,平今、平昨,因此,在获取持仓的时候,区分今仓可用数,昨仓可用是非常重要的。
如果不区分,则需要分别对平今、平昨,每次平1手,各下 can_close_vol 次,以保证指令正常。
昨仓可用 = 当 can_close_vol >0 时,min(can_close_vol,yesterday_position),否则为0
然后 按照 direction和 instrument_id分组 ,并对指定列的数值列进行累加聚合
把对齐的颗粒度依照方向加合约生成两条,
今仓可用 = 聚合后的can_close_vol - 聚合后的昨仓可用
最后平仓的时候,按照 昨仓可用 、 今仓可用 进行平昨,平今
另一个则是命名上的小坑
平 + 多 = 平空
平 + 空 = 平多
买 + 多 = 开多
买 + 空 = 开空
0
xcdk2018 - 小韭菜
今年目前亏了8天
说一下国金QMt期货模拟盘所遇到的坑。
1、它只支持期货6键风格,也就是平仓的时候,今仓,昨仓,这个得分开,而且不支持委托数大于可用数时部分成交,大于时会直接报错。
2、这个坑呢有两个地方,第一小一点,当用期货持仓的专用函数去查询的时候,多空两个方向的期货,能给你返回4条信息,首次出现的代码加上方向组合是有效的,所以这个算小坑,毕竟好解决,过滤一下就好。而大坑则在于。yesterday_position + today_position < position,因为前两者都是0。这直接导致了,根本不知道今仓,昨仓有多少,can_close_vol虽然是正确的,但真就没用啊,单纯依靠这个的前提是能使用4键 or 2键风格进行平仓。
那最终怎么解决平呢?上王炸,用拆单+试错。
can_close_vol 为依据进行拆单,有多少手就拆成多少笔委托,分别去匹配,平今、 平昨。
也就是实际委托的数量是一,而实际委托的次数是。can_close_vol *2。
那么代价是什么呢?那就是报错至少有一半+无效信息爆炸,明明可以一单的事情,偏偏要用n单解决。
说一下国金QMt期货模拟盘所遇到的坑。
1、它只支持期货6键风格,也就是平仓的时候,今仓,昨仓,这个得分开,而且不支持委托数大于可用数时部分成交,大于时会直接报错。
2、这个坑呢有两个地方,第一小一点,当用期货持仓的专用函数去查询的时候,多空两个方向的期货,能给你返回4条信息,首次出现的代码加上方向组合是有效的,所以这个算小坑,毕竟好解决,过滤一下就好。而大坑则在于。yesterday_position + today_position < position,因为前两者都是0。这直接导致了,根本不知道今仓,昨仓有多少,can_close_vol虽然是正确的,但真就没用啊,单纯依靠这个的前提是能使用4键 or 2键风格进行平仓。
那最终怎么解决平呢?上王炸,用拆单+试错。
can_close_vol 为依据进行拆单,有多少手就拆成多少笔委托,分别去匹配,平今、 平昨。
也就是实际委托的数量是一,而实际委托的次数是。can_close_vol *2。
那么代价是什么呢?那就是报错至少有一半+无效信息爆炸,明明可以一单的事情,偏偏要用n单解决。
0
xcdk2018 - 小韭菜
cancel_async_seq = xt_trader.cancel_order_stock_async(account, order_id) # 期货恒负一用不了。
cancel_result = xt_trader.cancel_order_stock_sysid_async(account, market, order_sysid)
后者得建个字典维护。才有高兼容性。
FUTURE_MARKET_MAP = {
"IF": xtconstant.MARKET_INDEX_FUTURE, # 中金所 CFFEX
"SF": xtconstant.MARKET_SHANGHAI_FUTURE, # 上期所 SHFE
"DF": xtconstant.MARKET_DALIANG_FUTURE, # 大商所 DCE
"ZF": xtconstant.MARKET_ZHENGZHOU_FUTURE, # 郑商所 CZCE
"INE": xtconstant.MARKET_INTL_ENERGY_FUTURE, # 能源中心
"GF": xtconstant.MARKET_GUANGZHOU_FUTURE, # 广期所 GFEX
# 补充:部分系统或数据源可能直接使用交易所标准缩写作为后缀
"CFFEX": xtconstant.MARKET_INDEX_FUTURE,
"SHFE": xtconstant.MARKET_SHANGHAI_FUTURE,
"DCE": xtconstant.MARKET_DALIANG_FUTURE,
"CZCE": xtconstant.MARKET_ZHENGZHOU_FUTURE,
"GFEX": xtconstant.MARKET_GUANGZHOU_FUTURE
}
虽然并没有什么卵用,因为实测最新版本就是简单的后缀。
cancel_result = xt_trader.cancel_order_stock_sysid_async(account, market, order_sysid)
后者得建个字典维护。才有高兼容性。
FUTURE_MARKET_MAP = {
"IF": xtconstant.MARKET_INDEX_FUTURE, # 中金所 CFFEX
"SF": xtconstant.MARKET_SHANGHAI_FUTURE, # 上期所 SHFE
"DF": xtconstant.MARKET_DALIANG_FUTURE, # 大商所 DCE
"ZF": xtconstant.MARKET_ZHENGZHOU_FUTURE, # 郑商所 CZCE
"INE": xtconstant.MARKET_INTL_ENERGY_FUTURE, # 能源中心
"GF": xtconstant.MARKET_GUANGZHOU_FUTURE, # 广期所 GFEX
# 补充:部分系统或数据源可能直接使用交易所标准缩写作为后缀
"CFFEX": xtconstant.MARKET_INDEX_FUTURE,
"SHFE": xtconstant.MARKET_SHANGHAI_FUTURE,
"DCE": xtconstant.MARKET_DALIANG_FUTURE,
"CZCE": xtconstant.MARKET_ZHENGZHOU_FUTURE,
"GFEX": xtconstant.MARKET_GUANGZHOU_FUTURE
}
虽然并没有什么卵用,因为实测最新版本就是简单的后缀。
0
xcdk2018 - 小韭菜
@xcdk2018
交易操作(offset_flag)
枚举变量名 值 含义
xtconstant.OFFSET_FLAG_OPEN 48 买入,开仓
最近在写QMt期货的程序,怎么感觉到处都是坑?b 修正一下 offset_flag 这个字段 ,锁定 xtconstant.OFFSET_FLAG_OPEN 配合 order_status, 就能锁定开多【空】这种潜在会影响 货值 、保证金 的操作【非废单、非已成、非已撤】。不需要其他地方记录,不过虽然避免了3表合并,但 委托表+明细表合并是没法避免的,因为乘数在上面,至于 多空保证金,其实是预估的时候用,真挂了单,会冻结真实所需部分
1、asset = xt_trader.query_stock_asset(account)
这个在股票中还算能用的资金查询,在期货中,只有两个字段能用 total_asset 可以视为总资产或当前权益,market_value 当前已经持仓的货值,即风险敞口。
2、想要可用资金? xt_trader.query_position_statistic...
交易操作(offset_flag)
枚举变量名 值 含义
xtconstant.OFFSET_FLAG_OPEN 48 买入,开仓
0
xcdk2018 - 小韭菜
最近在写QMt期货的程序,怎么感觉到处都是坑?
1、asset = xt_trader.query_stock_asset(account)
这个在股票中还算能用的资金查询,在期货中,只有两个字段能用 total_asset 可以视为总资产或当前权益,market_value 当前已经持仓的货值,即风险敞口。
2、想要可用资金? xt_trader.query_position_statistics(account)得用期货专用的查询端口去把已经占用的保证金和挂单所造成的冻结保证金的总数算出来,total_asset 与这两货的差值才是当前可用的。
3、想做风控,那肯定离不开已经挂单委托,但还没有成交的部分,即在薛定谔的 货值 与 保证金,所以得查委托。然后连环大坑来了:
a、期货的部分 on order callback:order_id -1 <class 'int'> 回调号是负1,也就是说下单后具体是哪单,必须依靠 order_remark 或 strategy_name 这种最长23字符的来记录。
b、想知道这单具体是开空【多】还是平空【多】?不好意思order_type 下单与委托订单回调里面的并不一样,换言之,一开始就得在其他地方记录下来。
c、想知道具体的乘数?得xtdata.get_instrument_detail(code)去明细表里查。
d、想知道保证金率?不好意思,明细表里只有交易所的最低下限,期货公司肯定要往上加的,具体是多少,鬼知道。【对于已持仓的,倒是可以反推,但新开仓的则是空白】
1、asset = xt_trader.query_stock_asset(account)
这个在股票中还算能用的资金查询,在期货中,只有两个字段能用 total_asset 可以视为总资产或当前权益,market_value 当前已经持仓的货值,即风险敞口。
2、想要可用资金? xt_trader.query_position_statistics(account)得用期货专用的查询端口去把已经占用的保证金和挂单所造成的冻结保证金的总数算出来,total_asset 与这两货的差值才是当前可用的。
3、想做风控,那肯定离不开已经挂单委托,但还没有成交的部分,即在薛定谔的 货值 与 保证金,所以得查委托。然后连环大坑来了:
a、期货的部分 on order callback:order_id -1 <class 'int'> 回调号是负1,也就是说下单后具体是哪单,必须依靠 order_remark 或 strategy_name 这种最长23字符的来记录。
b、想知道这单具体是开空【多】还是平空【多】?不好意思order_type 下单与委托订单回调里面的并不一样,换言之,一开始就得在其他地方记录下来。
c、想知道具体的乘数?得xtdata.get_instrument_detail(code)去明细表里查。
d、想知道保证金率?不好意思,明细表里只有交易所的最低下限,期货公司肯定要往上加的,具体是多少,鬼知道。【对于已持仓的,倒是可以反推,但新开仓的则是空白】
Edge
Chrome
Firefox



























京公网安备 11010802031449号