返回列表 发布新帖

qmt中如何获取qmt期货账号的持仓

4411 7
发表于 2023-12-15 10:08:07 | 显示全部楼层 阅读模式
  1. #coding:gbk



  2. def init(ContextInfo):
  3.     print(get_future_positions(ContextInfo, '079383'))


  4. def get_future_positions(ContextInfo,accountid):
  5.     positions = get_trade_detail_data(accountid, 'FUTURE', 'POSITION')
  6.     hold_dict = {}
  7.     for p in positions:
  8.         code = p.m_strInstrumentID +'.'+p.m_strExchangeID
  9.         direction = p.m_nDirection
  10.         volume = p.m_nVolume
  11.         key = (code, direction)
  12.         hold_dict[key] = hold_dict.get(key, 0)+volume
  13.     return hold_dict
复制代码

评论7

Willows
发表于 2023-12-15 10:09:22 | 显示全部楼层
你这个不对,多空的直接互相覆盖了
任志鹏楼主
发表于 2023-12-15 10:10:53 | 显示全部楼层
  1. #coding:gbk



  2. def init(ContextInfo):
  3.         print(get_future_positions(ContextInfo, '079383'))


  4. def get_future_positions(ContextInfo,accountid):
  5.         positions = get_trade_detail_data(accountid, 'FUTURE', 'POSITION')
  6.         hold_dict = {}
  7.         for p in positions:
  8.                 code = p.m_strInstrumentID +'.'+p.m_strExchangeID
  9.                 direction = p.m_nDirection
  10.                 volume = p.m_nVolume
  11.                 key = (code, direction)
  12.                 hold_dict[key] = hold_dict.get(key, 0)+volume
  13.         return hold_dict
复制代码
Willows
发表于 2023-12-15 10:11:20 | 显示全部楼层
  1. def get_Future_holdings(accid,symbol = None):
  2.     '''
  3.     针对期货返回持仓的结构做处理
  4.     Arg:
  5.         accondid:账户id
  6.         symbol: 品种,不填默认返会全部持仓
  7.             
  8.     return:
  9.         {股票名:{'手数':int,"持仓成本":float,'浮动盈亏':float,"可用余额":int}}
  10.     '''
  11.     datatype = "FUTURE"
  12.    
  13.     PositionInfo_dict = {}
  14.    
  15.     Long_dict={}
  16.    
  17.     Short_dict={}
  18.    
  19.     resultlist = get_trade_detail_data(accid,datatype,'POSITION')
  20.    
  21.     for obj in resultlist:
  22.         #防除零
  23.         if obj.m_nVolume == 0:
  24.             continue
  25.         if obj.m_nDirection == 48:
  26.             if not Long_dict.get(obj.m_strInstrumentID+"."+obj.m_strExchangeID):
  27.                 Long_dict[obj.m_strInstrumentID+"."+obj.m_strExchangeID] = {
  28.                 "多头数量":obj.m_nVolume,
  29.                 "多头成本":obj.m_dOpenPrice,
  30.                
  31.                 "浮动盈亏":obj.m_dFloatProfit,
  32.                 "保证金占用":obj.m_dMargin
  33.                 }
  34.             else:
  35.                     
  36.                     Long_dict[obj.m_strInstrumentID+"."+obj.m_strExchangeID]["多头数量"] += obj.m_nVolume
  37.                     # 算浮动盈亏
  38.                     Long_dict[obj.m_strInstrumentID+"."+obj.m_strExchangeID]["浮动盈亏"] += obj.m_dFloatProfit
  39.                     # 算保证金占用
  40.                     Long_dict[obj.m_strInstrumentID+"."+obj.m_strExchangeID]["保证金占用"] += obj.m_dMargin
  41.                     # 算多头成本
  42.                     Long_dict[obj.m_strInstrumentID+"."+obj.m_strExchangeID]["多头成本"] = (
  43.                         Long_dict[obj.m_strInstrumentID+"."+obj.m_strExchangeID]["多头成本"] * \
  44.                         (Long_dict[obj.m_strInstrumentID+"."+obj.m_strExchangeID]["多头数量"] - obj.m_nVolume) + \
  45.                         (obj.m_dOpenPrice * obj.m_nVolume)
  46.                     )/Long_dict[obj.m_strInstrumentID+"."+obj.m_strExchangeID]["多头数量"]
  47.                     
  48.         elif obj.m_nDirection == 49:
  49.             if not Short_dict.get(obj.m_strInstrumentID+"."+obj.m_strExchangeID):
  50.                 Short_dict[obj.m_strInstrumentID+"."+obj.m_strExchangeID] = {
  51.                 "空头数量":obj.m_nVolume  ,
  52.                 "空头成本":obj.m_dOpenPrice ,
  53.                 "浮动盈亏":obj.m_dFloatProfit,
  54.                 "保证金占用":obj.m_dMargin
  55.                 }
  56.             else:
  57.                 Short_dict[obj.m_strInstrumentID+"."+obj.m_strExchangeID]["空头数量"] += obj.m_nVolume
  58.                 # 算浮动盈亏
  59.                 Short_dict[obj.m_strInstrumentID+"."+obj.m_strExchangeID]["浮动盈亏"] += obj.m_dFloatProfit
  60.                 # 算保证金占用
  61.                 Short_dict[obj.m_strInstrumentID+"."+obj.m_strExchangeID]["保证金占用"] += obj.m_dMargin
  62.                 # 计算空头成本
  63.                 Short_dict[obj.m_strInstrumentID+"."+obj.m_strExchangeID]["空头成本"] = (
  64.                     Short_dict[obj.m_strInstrumentID+"."+obj.m_strExchangeID]["空头成本"] * \
  65.                     (Short_dict[obj.m_strInstrumentID+"."+obj.m_strExchangeID]["空头数量"] - obj.m_nVolume) + \
  66.                     (obj.m_dOpenPrice * obj.m_nVolume)
  67.                 )/Short_dict[obj.m_strInstrumentID+"."+obj.m_strExchangeID]["空头数量"]
  68.         
  69.    
  70.     for _symbol in set(list(Long_dict.keys()) + list(Short_dict.keys())):
  71.         
  72.         PositionInfo_dict[_symbol] = {
  73.         "多头数量":Long_dict[_symbol]["多头数量"] if Long_dict.get(_symbol) else 0 ,
  74.         
  75.         "空头数量":Short_dict[_symbol]["空头数量"] if Short_dict.get(_symbol) else 0 ,
  76.         
  77.         "多头成本":Long_dict[_symbol]["多头成本"] if Long_dict.get(_symbol) else None ,
  78.         
  79.         "空头成本":Short_dict[_symbol]["空头成本"] if Short_dict.get(_symbol) else None,
  80.         
  81.         "净持仓" : Long_dict.get(_symbol,{}).get("多头数量",0) -  Short_dict.get(_symbol,{}).get("空头数量",0),
  82.         
  83.         "浮动盈亏": Long_dict.get(_symbol,{}).get("浮动盈亏",0) +  Short_dict.get(_symbol,{}).get("浮动盈亏",0),
  84.         
  85.         "保证金占用": Long_dict.get(_symbol,{}).get("保证金占用",0) +  Short_dict.get(_symbol,{}).get("保证金占用",0)
  86.         }
  87.         
  88.     if symbol:
  89.         return PositionInfo_dict[symbol]
  90.     else :
  91.         return PositionInfo_dict
复制代码
Willows
发表于 2023-12-15 10:11:42 | 显示全部楼层
看我这个
任志鹏楼主
发表于 2023-12-15 10:22:35 | 显示全部楼层
Willows 发表于 2023-12-15 10:09
你这个不对,多空的直接互相覆盖了

没有,多空是key :lol
张卫
发表于 2024-10-14 20:25:15 | 显示全部楼层
不明白,转接CTP接口有这么难吗?既然要支持期货,最基本的功能应该有吧,总不能这点简单的事情也让客户处理吧。明明CTP有现成的接口可以转一下,为什么不转下接口提供给客户使用
张卫
发表于 2024-10-14 20:26:15 | 显示全部楼层
这是逼着客户自己用Python自己写CTP代码吗?

回复

您需要登录后才可以回帖 登录 | 立即注册

客服专线

400-080-8112

用思考的速度交易,用真诚的态度合作,我们是认真的!
  • 关注公众号
  • 添加微信客服
Copyright © 2001-2025 迅投QMT社区 版权所有 All Rights Reserved. 京ICP备2025122616号-3
关灯 快速发帖
扫一扫添加微信客服
QQ客服返回顶部
快速回复 返回顶部 返回列表