private void OnRspQryPosition(object sender, RspEventArgs e) { switch (sender.ToString()) { case "ProgramTradeApi.XTradeSpi": if (e.ErrorID == 0) { var pos = PositionDetail.CreateDetail((e as TypedRspEventArgs <CLRDFITCPositionInfoRtnField, CLRDFITCErrorRtnField>).Data); if (pos.InstrumentID != "") { Positions.AddOrUpdate(pos.InstrumentID + pos.Direction, pos, (k, v) => v); /*if (e.IsLast) * { * Thread.Sleep(500); * eventPositionChanged?.Invoke(this, null); * }*/ eventPositionChanged?.Invoke(pos, null); } } else { var err = (e as TypedRspEventArgs <CLRDFITCPositionInfoRtnField, CLRDFITCErrorRtnField>).Error; } break; } }
private void OnOrderDeal(object sender, RspEventArgs e) { switch (sender.ToString()) { case "ProgramTradeApi.XTradeSpi": PositionDetail odr = PositionDetail.CreateDetail((e as TypedRspEventArgs <CLRDFITCMatchRtnField, object>).Data); try { Positions.AddOrUpdate(odr.InstrumentID + odr.Direction, odr, (k, v) => { return(v += odr); }); eventPositionChanged?.Invoke(this, null); } catch (Exception) { //deal exception } break; } }