예제 #1
0
        /// <summary>
        /// 构造方法。
        /// </summary>
        /// <param name="instrument">合约。</param>
        /// <param name="publisher">发布者。</param>
        /// <param name="tradeRange">交易时段。</param>
        /// <param name="publishInterval">发布间隔(单位:秒)。</param>
        public DayKLineFactory(USeInstrument instrument, USeKLine initKLine, IKLinePublisher publisher, DayTradeRange tradeRange, IAppLogger eventLogger, TimeSpan publishInterval, bool isMainContract, USeTradingInstrumentManager instrumentManager)
            : base(instrument, publisher, tradeRange, eventLogger)
        {
            m_publishInterval = publishInterval;
            m_nextPublishTime = DateTime.Now.AddTicks(publishInterval.Ticks);

            m_isMainContract = isMainContract;

            if (initKLine != null)
            {
                Debug.Assert(initKLine.InstrumentCode == instrument.InstrumentCode);
                m_kLine = initKLine;
            }

            if (isMainContract)
            {
                string varieties = USeTraderProtocol.GetVarieties(instrument.InstrumentCode);
                m_mainContractCode = USeTraderProtocol.GetMainContractCode(varieties, instrument.Market);
            }

            //获取该数据库下的合约详细信息
            try
            {
                Debug.Assert(instrumentManager != null);
                m_insDetailList = instrumentManager.GetAllInstrumentDetails();
            }
            catch (Exception ex)
            {
                throw new Exception("IndexDayKLineFactory 获取全部合约详细信息异常:" + ex.Message);
            }
        }
예제 #2
0
 /// <summary>
 /// 构造方法。
 /// </summary>
 /// <param name="instrument">处理合约。</param>
 /// <param name="publisher">发布者。</param>
 /// <param name="tradeRange">交易时段。</param>
 public KLineFactory(USeInstrument instrument, IKLinePublisher publisher, DayTradeRange tradeRange, IAppLogger eventLogger)
 {
     m_instrument  = instrument;
     m_publisher   = publisher;
     m_tradeRange  = tradeRange;
     m_eventLogger = eventLogger;
 }
예제 #3
0
        /// <summary>
        /// 启动。
        /// </summary>
        /// <param name="marketDataProvider"></param>
        /// <param name="dbStore"></param>
        public void Start(List <IKLineDataListener> storers, ITradeRangeManager tradeRangeManager,
                          MainContractManager mainContractManager, USeProductManager productManager, AlphaDBVistor alphaDBVistor,
                          USeTradingInstrumentManager instrumentManager,
                          IAppLogger eventLogger)
        {
            m_runFlag = true;

            if (storers == null)
            {
                throw new ArgumentNullException("storers");
            }
            if (tradeRangeManager == null)
            {
                throw new ArgumentNullException("tradeRangeManager");
            }
            if (mainContractManager == null)
            {
                throw new ArgumentNullException("mainContractManager");
            }
            if (productManager == null)
            {
                throw new ArgumentNullException("productManager");
            }
            if (alphaDBVistor == null)
            {
                throw new ArgumentNullException("kLineVistor");
            }
            if (instrumentManager == null)
            {
                throw new ArgumentNullException("instrumentManager");
            }
            if (eventLogger == null)
            {
                throw new ArgumentNullException("eventLogger");
            }

            m_storers             = storers;
            m_tradeRangeManager   = tradeRangeManager;
            m_productManager      = productManager;
            m_mainContractManager = mainContractManager;
            m_alphaDBVistor       = alphaDBVistor;
            m_instrumentManager   = instrumentManager;
            m_eventLogger         = eventLogger;

            KLinePublisher kLinePublisher = new KLinePublisher();

            kLinePublisher.SetMarketDataStore(storers);
            m_kLinePublisher = kLinePublisher;

            this.m_workThread = new Thread(new ThreadStart(DoWork));
            this.m_workThread.Start();
        }
예제 #4
0
        /// <summary>
        /// 构造方法。
        /// </summary>
        /// <param name="instrument">合约。</param>
        /// <param name="klinePublisher">发布者。</param>
        /// <param name="cycle">周期。</param>
        /// <param name="eventLogger">日志。</param>
        public MinKLineFactory(USeInstrument instrument, IKLinePublisher klinePublisher, DayTradeRange tradeRange, IAppLogger eventLogger, USeCycleType cycle, bool isMainContract)
            : base(instrument, klinePublisher, tradeRange, eventLogger)
        {
            if (cycle != USeCycleType.Min1)
            {
                throw new NotSupportedException(string.Format("Not support {0} ", cycle));
            }

            m_cycle          = cycle;
            m_isMainContract = isMainContract;

            if (isMainContract)
            {
                string varieties = USeTraderProtocol.GetVarieties(instrument.InstrumentCode);
                m_mainContract = USeTraderProtocol.GetMainContractCode(varieties, instrument.Market);
            }
        }
예제 #5
0
        private List <USeInstrumentDetail> m_insDetailList = null;        //合约的信息列表

        #endregion

        #region construction
        /// <summary>
        /// 构造方法。
        /// </summary>
        /// <param name="product">品种。</param>
        /// <param name="publisher">发布者。</param>
        /// <param name="tradeRange">交易时段。</param>
        /// <param name="publishInterval">发布间隔。</param>
        public IndexDayKLineFactory(USeProduct product, List <USeInstrument> instrumentList, USeKLine initKLine, TimeSpan publishInterval,
                                    IKLinePublisher publisher, DayTradeRange tradeRange, IAppLogger eventLogger, USeTradingInstrumentManager instrumentManager)
            : base(USeTraderProtocol.GetVarietiesIndexCode(product),
                   publisher, tradeRange, eventLogger)
        {
            Debug.Assert(product.PriceTick > 0);
            Debug.Assert(instrumentList != null && instrumentList.Count > 0);

            m_publishInterval = publishInterval;
            m_nextPublishTime = DateTime.Now.AddTicks(publishInterval.Ticks);
            m_product         = product;
            m_componentDic    = new Dictionary <string, USeMarketData>();
            foreach (USeInstrument instrument in instrumentList)
            {
                m_componentDic.Add(instrument.InstrumentCode, null);
            }

            if (initKLine != null)
            {
                Debug.Assert(initKLine.InstrumentCode == USeTraderProtocol.GetVarietiesIndexCode(product).InstrumentCode);
                m_kLine = initKLine;
            }
            else
            {
                m_kLine = CreateDefaultKLine();
            }

            //获取该数据库下的合约详细信息
            try
            {
                Debug.Assert(instrumentManager != null);
                m_insDetailList = instrumentManager.GetAllInstrumentDetails();
            }
            catch (Exception ex)
            {
                throw new Exception("IndexDayKLineFactory 获取全部合约详细信息异常:" + ex.Message);
            }
        }
예제 #6
0
        /// <summary>
        /// 构造方法。
        /// </summary>
        /// <param name="indexInstrument">指数合约。</param>
        /// <param name="klinePublisher">发布者。</param>
        /// <param name="cycle">周期。</param>
        /// <param name="eventLogger">日志。</param>
        public IndexMinKLineFactory(USeProduct product, List <USeInstrument> instrumentList, USeCycleType cycle, IKLinePublisher klinePublisher, DayTradeRange tradeRange, IAppLogger eventLogger, USeTradingInstrumentManager instrumentManager)
            : base(USeTraderProtocol.GetVarietiesIndexCode(product),
                   klinePublisher, tradeRange, eventLogger)
        {
            if (cycle != USeCycleType.Min1)
            {
                throw new NotSupportedException(string.Format("Not support {0} ", cycle));
            }
            Debug.Assert(product.PriceTick > 0);
            Debug.Assert(instrumentList != null && instrumentList.Count > 0);

            m_cycle        = cycle;
            m_product      = product;
            m_componentDic = new Dictionary <string, USeMarketData>();
            foreach (USeInstrument instrument in instrumentList)
            {
                m_componentDic.Add(instrument.InstrumentCode, null);
            }

            //if (initKLine != null)
            //{
            //    Debug.Assert(initKLine.InstrumentCode == USeTraderProtocol.GetVarietiesIndexCode(product).InstrumentCode);
            //    m_kLine = initKLine;
            //}

            //获取该数据库下的合约详细信息
            try
            {
                Debug.Assert(instrumentManager != null);
                m_insDetailList = instrumentManager.GetAllInstrumentDetails();
            }
            catch (Exception ex)
            {
                throw new Exception("IndexDayKLineFactory 获取全部合约详细信息异常:" + ex.Message);
            }
        }