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 OnFrontConnected(object sender, RspEventArgs e) { switch (sender.ToString()) { case "ProgramTradeApi.XTradeSpi": if (e.ErrorID == 0) { IsTradeConnected = true; } else { IsTradeConnected = false; } eventFrontConnected?.Invoke(sender, e); break; case "ProgramTradeApi.XMduserSpi": if (e.ErrorID == 0) { IsMarketConnected = true; } else { IsMarketConnected = false; } eventFrontConnected?.Invoke(sender, e); break; } }
/*private void UserLoginHandler(object sender,RspUserLoginEventArgs e) { if (sender is QMarketSpi && 0 == e.RspInfo.ErrorID) { UserID = e.RspUserLoin.UserID; BrokerID = e.RspUserLoin.BrokerID; IsLogin = true; } } private void UserLogoutHandler(object sender, RspUserLogoutEventArgs e) { if (sender is QMarketSpi && 0 == e.RspInfo.ErrorID) { IsLogin = false; } }*/ private void FrontDisconnecedHandler(object sender,RspEventArgs e) { if(sender is QMarketSpi) { IsConnected = false; if ((int)CLRQDP_FTFAIL_REASON.NORMAL_DISCONN == (int)e.ErrorID) #if DEBUG Debug.WriteLine("Disconnect Front Server Normally.\r\nCurrent ThreadID:{0},Thread Called By TradeApi->DisconnectFront", Thread.CurrentThread.ManagedThreadId); #endif } }
private void FrontConnectedHandler(object sender,RspEventArgs e) { if (sender is QMarketSpi/* && 0 == e.Error*/) { IsConnected = true; if (IsLogin) { UserLogin(new CLRCQdpFtdcReqUserLoginField { BrokerID = this.BrokerID, UserID = this.UserID, Password = this.UserPwd }); } } }
private void OnMarketDataReturn(object sender, RspEventArgs e) { switch (sender.ToString()) { case "ProgramTradeApi.XMduserSpi": MarketDetail market = MarketDetail.CreateMarketDetail((e as TypedRspEventArgs <CLRDFITCDepthMarketDataField, object>).Data); Markets.AddOrUpdate(market.InstrumentID, market, (k, v) => { market.InstrumentName = v.InstrumentName; return(market); }); //eventMarketChanged?.Invoke(this, null); break; } }
private void OnOrderReturn(object sender, RspEventArgs e) { switch (sender.ToString()) { case "ProgramTradeApi.XTradeSpi": var odr = OrderDetail.CreateDetail((e as TypedRspEventArgs <CLRDFITCOrderRtnField, object>).Data); Orders.AddOrUpdate(odr.OrderSysID, odr, (k, v) => odr); eventOrderChanged?.Invoke(this, null); 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; } }
private void OnUserLogin(object sender, RspEventArgs e) { switch (sender.ToString()) { case "ProgramTradeApi.XTradeSpi": if (e.ErrorID == 0) { IsTradeLogined = true; ITradeApi.RequestUserPosition(); ITradeApi.RequestQueryOrders(); } else { IsTradeLogined = false; } eventUserLogined?.Invoke(sender, e); break; case "ProgramTradeApi.XMduserSpi": if (e.ErrorID == 0) { IsMarketLogined = true; //HashSet<string> instruments = new HashSet<string>() { "a1607", "a1609", "a1611" }; HashSet <string> instruments = new HashSet <string>() { "*" }; IMarketApi.SubMarketData(instruments); } else { IsMarketLogined = false; } eventUserLogined?.Invoke(sender, e); break; } }
private void OnRspQryOrder(object sender, RspEventArgs e) { switch (sender.ToString()) { case "ProgramTradeApi.XTradeSpi": if (e.ErrorID == 0) { var odr = OrderDetail.CreateDetail((e as TypedRspEventArgs <CLRDFITCOrderCommRtnField, CLRDFITCErrorRtnField>).Data); if (odr.OrderSysID > 0) { Orders.AddOrUpdate(odr.OrderSysID, odr, (k, v) => v); if (e.IsLast) { eventOrderChanged?.Invoke(this, null); } } } else { var err = (e as TypedRspEventArgs <CLRDFITCOrderCommRtnField, CLRDFITCErrorRtnField>).Error; } break; } }