Esempio n. 1
0
        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;
            }
        }
Esempio n. 2
0
        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;
            }
        }
Esempio n. 3
0
        /*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
            }
        }
Esempio n. 4
0
 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 });
         }
     }
 }
Esempio n. 5
0
 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;
     }
 }
Esempio n. 6
0
 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;
     }
 }
Esempio n. 7
0
 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;
     }
 }
Esempio n. 8
0
        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;
            }
        }
Esempio n. 9
0
 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;
     }
 }