/// <summary> /// Request historical prices for the specified timeframe of the specified period. /// </summary> /// <param name="communicator">The price history communicator.</param> /// <param name="instrument">The instrument.</param> /// <param name="timeframe">The timeframe.</param> /// <param name="from">From-date.</param> /// <param name="to">To-date</param> /// <param name="quotesCount">The quotes count.</param> /// <param name="responseListener">The response listener.</param> public static void GetHistoryPrices(IPriceHistoryCommunicator communicator, string instrument, string timeframe, DateTime from, DateTime to, int quotesCount, ResponseListener responseListener) { if (!communicator.isReady()) { Console.WriteLine("History communicator is not ready."); return; } // create timeframe entity ITimeframeFactory timeframeFactory = communicator.TimeframeFactory; O2GTimeframe timeframeObj = timeframeFactory.create(timeframe); // create and send a history request IPriceHistoryCommunicatorRequest request = communicator.createRequest(instrument, timeframeObj, from, to, quotesCount); responseListener.SetRequest(request); communicator.sendRequest(request); // wait results responseListener.Wait(); // print results if any IPriceHistoryCommunicatorResponse response = responseListener.GetResponse(); if (response != null) { PrintPrices(communicator, response); } }
/// <summary> /// Request historical prices for the specified timeframe of the specified period /// and then show live prices. /// </summary> /// <param name="communicator">The price history communicator.</param> /// <param name="instrument">The instrument.</param> /// <param name="timeframe">The timeframe.</param> /// <param name="from">From-date.</param> /// <param name="to">To-date</param> /// <param name="quotesCount">The quotes count.</param> /// <param name="responseListener">The response listener.</param> /// <param name="session">The trading session.</param> /// <param name="sessionListener">The trading session listener.</param> public static void GetLivePrices(IPriceHistoryCommunicator communicator, string instrument, string timeframe, DateTime from, DateTime to, int quotesCount, ResponseListener responseListener, O2GSession session, SessionStatusListener sessionListener) { if (!communicator.isReady()) { Console.WriteLine("History communicator is not ready."); return; } // create timeframe entity ITimeframeFactory timeframeFactory = communicator.TimeframeFactory; O2GTimeframe timeframeObj = timeframeFactory.create(timeframe); // check timeframe for ticks if (O2GTimeframeUnit.Tick == timeframeObj.Unit) { throw new Exception("Application works only for bars. Don't use tick as timeframe."); } // load Offers table and start ticks listening PriceUpdateController priceUpdateController = new PriceUpdateController(session, instrument); if (!priceUpdateController.Wait()) { return; } // create period collection bool alive = true; PeriodCollection periods = new PeriodCollection(instrument, timeframe, alive, priceUpdateController); PeriodCollectionUpdateObserver livePriceViewer = new PeriodCollectionUpdateObserver(periods); // create and send a history request IPriceHistoryCommunicatorRequest request = communicator.createRequest(instrument, timeframeObj, from, to, quotesCount); responseListener.SetRequest(request); communicator.sendRequest(request); // wait results responseListener.Wait(); IPriceHistoryCommunicatorResponse response = responseListener.GetResponse(); O2GMarketDataSnapshotResponseReader reader = communicator.createResponseReader(response); if (response != null) { ProcessHistoricalPrices(communicator, response, ref periods); } // finally notify the collection that all bars are added, so it can // add all ticks collected while the request was being executed // and start update the data by forthcoming ticks periods.Finish(reader.getLastBarTime(), reader.getLastBarVolume()); // continue update the data until cancelled by a user Console.WriteLine("\nPress ENTER to cancel.\n\n"); Console.ReadKey(); livePriceViewer.Unsubscribe(); priceUpdateController.Unsubscribe(); }