/// <summary>
 /// 查询产品行情
 /// </summary>
 /// <param name="product">被查询产品</param>
 /// <returns>被查询产品行情信息</returns>
 public override USeMarketData QuickQuery(USeInstrument product)
 {
     try
     {
         USeMarketData marketData = null;
         lock (m_object)
         {
             m_marketDataDic.TryGetValue(product.InstrumentCode, out marketData);
         }
         if (marketData != null)
         {
             return(marketData.Clone());
         }
         else
         {
             USeMarketData nullMarketData = new USeMarketData();
             nullMarketData.Instrument = product.Clone();
             return(nullMarketData);
         }
     }
     catch (Exception ex)
     {
         m_logger.WriteError(string.Format("{0} QuickQuery failed,Error: {1}.", ToString(), ex.Message));
         USeMarketData nullMarketData = new USeMarketData();
         nullMarketData.Instrument = product.Clone();
         return(nullMarketData);
     }
 }
Example #2
0
 /// <summary>
 /// 订阅行情
 /// </summary>
 /// <param name="products">订阅产品</param>
 public override void Subscribe(USeInstrument instrument)
 {
     lock (m_object)
     {
         m_instrumentDic[instrument.InstrumentCode] = instrument.Clone();
     }
 }
Example #3
0
        /// <summary>
        /// 查询合约保证金。
        /// </summary>
        /// <param name="instrument"></param>
        /// <returns></returns>
        public override USeMargin QueryInstrumentMargin(USeInstrument instrument)
        {
            USeMargin margin = new USeMargin()
            {
                Instrument = instrument.Clone(),
                ExchangeLongMarginRatio        = 0.09m,
                ExchangeShortMarginRatio       = 0.09m,
                BrokerLongMarginRatioByMoney   = 0.09m,
                BrokerLongMarginRatioByVolume  = 0,
                BrokerShortMarginRatioByMoney  = 0.09m,
                BrokerShortMarginRatioByVolume = 0
            };

            return(margin);
        }
Example #4
0
        /// <summary>
        /// 查询合约手续费。
        /// </summary>
        /// <param name="instrument">合约。</param>
        /// <returns></returns>
        public override USeFee QueryInstrumentFee(USeInstrument instrument)
        {
            USeFee fee = new USeFee()
            {
                Instrument              = instrument.Clone(),
                OpenRatioByMoney        = 0.00005m,
                OpenRatioByVolume       = 0m,
                CloseRatioByMoney       = 0.00005m,
                CloseRatioByVolume      = 0m,
                CloseTodayRatioByMoney  = 0.00005m,
                CloseTodayRatioByVolume = 0m,
                StrikeRatioByMoney      = 0.00005m,
                StrikeRatioByVolume     = 0m
            };

            return(fee);
        }
        /// <summary>
        /// 订阅行情
        /// </summary>
        /// <param name="products">订阅产品</param>
        public override void Subscribe(USeInstrument instrument)
        {
            try
            {
                lock (m_object)
                {
                    m_instrumentDic[instrument.InstrumentCode] = instrument.Clone();
                }

                string[] instruments = new string[] { instrument.InstrumentCode };
                Debug.WriteLine(string.Format("Subscribe [{0}].", instrument.InstrumentCode));
                m_ctpFeed.SubscribeMarketData(instruments);
            }
            catch (Exception ex)
            {
                m_logger.WriteError(string.Format("{0} subscribeMarketData failed,Error: {1}.", ToString(), ex.Message));
                throw ex;
            }
        }
        /// <summary>
        /// 查询产品行情
        /// </summary>
        /// <param name="product">被查询产品</param>
        /// <returns>被查询产品行情信息</returns>
        public override USeMarketData Query(USeInstrument product)
        {
            try
            {
                if (m_marketDataDic.ContainsKey(product.InstrumentCode))
                {
                    return(m_marketDataDic[product.InstrumentCode]);
                }
                else
                {
                    USeResetEvent queryEvent = new USeResetEvent();
                    lock (m_object)
                    {
                        if (!m_eventDic.ContainsKey(product.InstrumentCode))
                        {
                            m_eventDic.Add(product.InstrumentCode, queryEvent);
                        }
                    }

                    m_ctpFeed.SubscribeMarketData(new string[] { product.InstrumentCode });

                    while (true)
                    {
                        if (queryEvent.WaitOne(m_queryTimeOut) == false)
                        {
                            USeMarketData nullMarketData = new USeMarketData();
                            nullMarketData.Instrument = product.Clone();
                            return(nullMarketData);
                        }
                        else
                        {
                            break;
                        }
                    }

                    if (m_marketDataDic.ContainsKey(product.InstrumentCode))
                    {
                        return(m_marketDataDic[product.InstrumentCode]);
                    }
                    else
                    {
                        USeMarketData nullMarketData = new USeMarketData();
                        nullMarketData.Instrument = product.Clone();
                        return(nullMarketData);
                    }
                }
            }
            catch (Exception ex)
            {
                m_logger.WriteError(string.Format("{0} Query failed,Error: {1}.", ToString(), ex.Message));

                USeMarketData nullMarketData = new USeMarketData();
                nullMarketData.Instrument = product.Clone();
                return(nullMarketData);
            }
            finally
            {
                lock (m_object)
                {
                    m_eventDic.Remove(product.InstrumentCode);
                }
            }
        }