- def get_Future_holdings(accid,symbol = None):
- '''
- 针对期货返回持仓的结构做处理
- Arg:
- accondid:账户id
- symbol: 品种,不填默认返会全部持仓
-
- return:
- {股票名:{'手数':int,"持仓成本":float,'浮动盈亏':float,"可用余额":int}}
- '''
- datatype = "FUTURE"
-
- PositionInfo_dict = {}
-
- Long_dict={}
-
- Short_dict={}
-
- resultlist = get_trade_detail_data(accid,datatype,'POSITION')
-
- for obj in resultlist:
- #防除零
- if obj.m_nVolume == 0:
- continue
- if obj.m_nDirection == 48:
- if not Long_dict.get(obj.m_strInstrumentID+"."+obj.m_strExchangeID):
- Long_dict[obj.m_strInstrumentID+"."+obj.m_strExchangeID] = {
- "多头数量":obj.m_nVolume,
- "多头成本":obj.m_dOpenPrice,
-
- "浮动盈亏":obj.m_dFloatProfit,
- "保证金占用":obj.m_dMargin
- }
- else:
-
- Long_dict[obj.m_strInstrumentID+"."+obj.m_strExchangeID]["多头数量"] += obj.m_nVolume
- # 算浮动盈亏
- Long_dict[obj.m_strInstrumentID+"."+obj.m_strExchangeID]["浮动盈亏"] += obj.m_dFloatProfit
- # 算保证金占用
- Long_dict[obj.m_strInstrumentID+"."+obj.m_strExchangeID]["保证金占用"] += obj.m_dMargin
- # 算多头成本
- Long_dict[obj.m_strInstrumentID+"."+obj.m_strExchangeID]["多头成本"] = (
- Long_dict[obj.m_strInstrumentID+"."+obj.m_strExchangeID]["多头成本"] * \
- (Long_dict[obj.m_strInstrumentID+"."+obj.m_strExchangeID]["多头数量"] - obj.m_nVolume) + \
- (obj.m_dOpenPrice * obj.m_nVolume)
- )/Long_dict[obj.m_strInstrumentID+"."+obj.m_strExchangeID]["多头数量"]
-
- elif obj.m_nDirection == 49:
- if not Short_dict.get(obj.m_strInstrumentID+"."+obj.m_strExchangeID):
- Short_dict[obj.m_strInstrumentID+"."+obj.m_strExchangeID] = {
- "空头数量":obj.m_nVolume ,
- "空头成本":obj.m_dOpenPrice ,
- "浮动盈亏":obj.m_dFloatProfit,
- "保证金占用":obj.m_dMargin
- }
- else:
- Short_dict[obj.m_strInstrumentID+"."+obj.m_strExchangeID]["空头数量"] += obj.m_nVolume
- # 算浮动盈亏
- Short_dict[obj.m_strInstrumentID+"."+obj.m_strExchangeID]["浮动盈亏"] += obj.m_dFloatProfit
- # 算保证金占用
- Short_dict[obj.m_strInstrumentID+"."+obj.m_strExchangeID]["保证金占用"] += obj.m_dMargin
- # 计算空头成本
- Short_dict[obj.m_strInstrumentID+"."+obj.m_strExchangeID]["空头成本"] = (
- Short_dict[obj.m_strInstrumentID+"."+obj.m_strExchangeID]["空头成本"] * \
- (Short_dict[obj.m_strInstrumentID+"."+obj.m_strExchangeID]["空头数量"] - obj.m_nVolume) + \
- (obj.m_dOpenPrice * obj.m_nVolume)
- )/Short_dict[obj.m_strInstrumentID+"."+obj.m_strExchangeID]["空头数量"]
-
-
- for _symbol in set(list(Long_dict.keys()) + list(Short_dict.keys())):
-
- PositionInfo_dict[_symbol] = {
- "多头数量":Long_dict[_symbol]["多头数量"] if Long_dict.get(_symbol) else 0 ,
-
- "空头数量":Short_dict[_symbol]["空头数量"] if Short_dict.get(_symbol) else 0 ,
-
- "多头成本":Long_dict[_symbol]["多头成本"] if Long_dict.get(_symbol) else None ,
-
- "空头成本":Short_dict[_symbol]["空头成本"] if Short_dict.get(_symbol) else None,
-
- "净持仓" : Long_dict.get(_symbol,{}).get("多头数量",0) - Short_dict.get(_symbol,{}).get("空头数量",0),
-
- "浮动盈亏": Long_dict.get(_symbol,{}).get("浮动盈亏",0) + Short_dict.get(_symbol,{}).get("浮动盈亏",0),
-
- "保证金占用": Long_dict.get(_symbol,{}).get("保证金占用",0) + Short_dict.get(_symbol,{}).get("保证金占用",0)
- }
-
- if symbol:
- return PositionInfo_dict[symbol]
- else :
- return PositionInfo_dict
复制代码 |