获取本策略的当日所有合约的买卖开平成交明细数据及成交均价与持仓量
#不用调用OnTradeDeal事件,本代码直接放入OnBar事件或者OnQuote事件中即可
def GetBuySellOffsetTradedDataDetails() :
    '''
    功能:获取本策略的当日所有合约的买卖开平成交明细数据
    输出:
    买开/买平/卖开/卖平/交易过的合约码 list数据类型
    例程: BK_ls, BP_ls, SK_ls, SP_ls, contract_ls = GetBuySellOffsetTradedDataDetails()
    '''
    BK_ls, BP_ls, SK_ls, SP_ls, contract_ls = [], [], [], [], [] # 买开/买平/卖开/卖平/交易过的合约码
if g.ordersUID_ls : # 下单时写UID到本列表中备用
    for uid in g.ordersUID_ls :
        option = PBObj()
        option.orderuid = uid
        td = g.myacc.GetTradeDetails(option) # 获取当日指定uid的成交数据
        contract_ls.append(td.contract)      # 写成交合约码到列表
        if td :
            if td.bstype.BuySellFlag == '0' :    # 买
                if td.bstype.OffsetFlag == '0' : # 买开BK
                    BK_ls.append([td.contract, td.price, td.volume])
                if td.bstype.OffsetFlag == '1' or td.bstype.OffsetFlag == '2' : # 买平BP
                    BP_ls.append([td.contract, td.price, td.volume])
            if td.bstype.BuySellFlag == '1' :    # 卖
                if td.bstype.OffsetFlag == '0' : # 卖开SK
                    SK_ls.append([td.contract, td.price, td.volume])
                if td.bstype.OffsetFlag == '1' or td.bstype.OffsetFlag == '2' : # 卖平SP
                    SP_ls.append([td.contract, td.price, td.volume])
return BK_ls, BP_ls, SK_ls, SP_ls, set(contract_ls)def GetContractMul(symbol):
    """
    功能:获取合约的合约乘数
    参数:symbol 合约代码
    返回值:当前合约的合约乘数
    GetContractMul('rb1905')是获取rb1905的合约乘数
    """
    info= GetContractInfo(symbol)
    return info['合约乘数']
def GetTodayTradedSymbolAvgpriceVolume(symbol, flag='SK'):
    '''
    功能:获取指定合约当天成交均价与持仓量
    参数:
    symbol 合约码       str
    flag   买卖开平方向 str
    输出:均价, 持仓量
    avgprice, vol_sum (如果查询不到,输出值为 -1, 0 )
    例如:hold_avgprice, hold_vol_sum = GetTodayTradedSymbolAvgpriceVolume('rb1905.SHFE', flag='SK')
    '''
    avgprice, vol_sum = -1, 0 # 均价,持仓量
    BK_ls, BP_ls, SK_ls, SP_ls, contract_ls = GetBuySellOffsetTradedDataDetails()
if symbol in contract_ls :
    if flag == 'SK' and SK_ls : 
        cost_price = 0 # 开仓成本
        vol_sum = 0    # 开仓数量累计
        avgprice = 0   # 成交均价=开仓成本/开仓数量累计
        for i in range(len(SK_ls)) :
            if symbol == SK_ls[i][0] :
                cost_price = SK_ls[i][1] * SK_ls[i][2] # 开仓成本
                vol_sum += SK_ls[i][2]                                           # 开仓数量累计
                avgprice = cost_price / vol_sum                                  # 成交均价=开仓成本/开仓数量累计
    return avgprice, vol_sum
    if flag == 'BP' and BP_ls : 
        cost_price = 0 # 开仓成本
        vol_sum = 0    # 开仓数量累计
        avgprice = 0   # 成交均价=开仓成本/开仓数量累计
        for i in range(len(BP_ls)) :
            if symbol == BP_ls[i][0] :
                cost_price = BP_ls[i][1] * BP_ls[i][2] # 开仓成本
                vol_sum += BP_ls[i][2]                                          # 开仓数量累计
                avgprice = cost_price / vol_sum                                 # 成交均价=开仓成本/开仓数量累计
    return avgprice, vol_sum
    if flag == 'BK' and BK_ls : 
        cost_price = 0 # 开仓成本
        vol_sum = 0    # 开仓数量累计
        avgprice = 0   # 成交均价=开仓成本/开仓数量累计
        for i in range(len(BK_ls)) :
            if symbol == BK_ls[i][0] :
                cost_price = BK_ls[i][1] * BK_ls[i][2] # 开仓成本
                vol_sum += BK_ls[i][2]                                          # 开仓数量累计
                avgprice = cost_price / vol_sum                                 # 成交均价=开仓成本/开仓数量累计
    return avgprice, vol_sum
    if flag == 'SP' and SP_ls : 
        cost_price = 0 # 开仓成本
        vol_sum = 0    # 开仓数量累计
        avgprice = 0   # 成交均价=开仓成本/开仓数量累计
        for i in range(len(SP_ls)) :
            if symbol == SP_ls[i][0] :
                cost_price = SP_ls[i][1] * SP_ls[i][2] # 开仓成本
                vol_sum += SP_ls[i][2]                                          # 开仓数量累计
                avgprice = cost_price / vol_sum                                 # 成交均价=开仓成本/开仓数量累计
    return avgprice, vol_sum
else :
    return avgprice, vol_sum # 输出值为 -1, 0