/// <summary> /// Listener: Price history request is completed /// </summary> /// <param name="request"></param> /// <param name="response"></param> public void onRequestCompleted(IPriceHistoryCommunicatorRequest request, IPriceHistoryCommunicatorResponse response) { // try to find the collection (must be created at the moment when the request is sent) PeriodCollection coll = null; mHistories.TryGetValue(request, out coll); if (coll != null) { // create a reader for the price history data O2GMarketDataSnapshotResponseReader reader = mPriceHistoryCommunicator.createResponseReader(response); // and read all bars for (int i = 0; i < reader.Count; i++) { coll.Add(reader.getDate(i), reader.getBidOpen(i), reader.getBidHigh(i), reader.getBidLow(i), reader.getBidClose(i), reader.getAskOpen(i), reader.getAskHigh(i), reader.getAskLow(i), reader.getAskClose(i), reader.getVolume(i)); } // 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 (for alive collections) coll.Finish(reader.getLastBarTime(), reader.getLastBarVolume()); } // now we can remove collection from our cache and send it to the application mHistories.Remove(request); if (coll != null && OnCollectionLoaded != null) { OnCollectionLoaded(coll); } }
/// <summary> /// Requests the historical data /// </summary> /// <param name="instrument">The instrument</param> /// <param name="timeframe">The timeframe</param> /// <param name="from">Date/time to get the data from</param> /// <param name="to">Date/time to get the data to</param> public void RequestHistory(string instrument, O2GTimeframe timeframe, DateTime from, DateTime to) { IPriceHistoryCommunicatorRequest request = mPriceHistoryCommunicator.createRequest(instrument, timeframe, from, to, -1); // We don't need a pre-created collection for pure historical data, but just lets create it // to handle the response in the same way. PeriodCollection collection = new PeriodCollection(instrument, timeframe.ID, false, this); mHistories[request] = collection; mPriceHistoryCommunicator.sendRequest(request); // ... to response handling see onRequestCompleted in Price Communicator Event handler section }
/// <summary> /// Gets the historical data up to now and subscribe it for price updates /// </summary> /// <param name="instrument">The instrument</param> /// <param name="timeframe">The timeframe</param> /// <param name="from">The date/time to get the data from</param> public void RequestAndSubscribeHistory(string instrument, O2GTimeframe timeframe, DateTime from) { IPriceHistoryCommunicatorRequest request = mPriceHistoryCommunicator.createRequest(instrument, timeframe, from, Candleworks.PriceHistoryMgr.Constants.ZERODATE, -1); // here we create a collection right now in order to let it subscribe for all ticks (offer changes) // which may occur while the request is being executed, so no data is lost because of gap while the server // is already collected all data, but the client isn't started to update collection yet. PeriodCollection collection = new PeriodCollection(instrument, timeframe.ID, true, this); mHistories[request] = collection; mPriceHistoryCommunicator.sendRequest(request); // ... to response handling see onRequestCompleted in Price Communicator Event handler section }