#不用调用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