private void btnGetHistoricPrices_Click(object sender, EventArgs e) { try { m_datetimestart = monthCalendarStart.SelectionRange.Start.Date; m_datetimeend = monthCalendarEnd.SelectionRange.Start.Date; m_instrument = cbInstrument.SelectedItem.ToString(); m_interval = cbInterval.SelectedItem.ToString(); ResponseListener responseListener = new ResponseListener(m_session); m_session.subscribeResponse(responseListener); O2GRequestFactory factory = m_session.getRequestFactory(); O2GTimeframeCollection timeframecollection = factory.Timeframes; O2GTimeframe stimeframe = timeframecollection[m_interval]; GetHistoryPrices(m_session, m_instrument, m_interval, m_datetimestart, m_datetimeend, responseListener); MessageBox.Show("Historic Data Received", "", MessageBoxButtons.OK, MessageBoxIcon.Information); } catch (Exception ex) { LogDirector.DoAction(2, ex); MessageBox.Show("Unable to connect to server", "", MessageBoxButtons.OK, MessageBoxIcon.Error); } }
/// <summary> /// Sends a request for the history /// </summary> public string RequestHistory(TransportHistoryRequest request) { O2GRequestFactory factory = mSession.getRequestFactory(); O2GTimeframeCollection timeframes = factory.Timeframes; O2GTimeframe timeframe = timeframes[request.Timeframe]; int count = request.Count > 300 ? 300 : request.Count; O2GRequest rq = factory.createMarketDataSnapshotRequestInstrument(request.Instrument, timeframe, count); if (request.From != factory.ZERODATE || request.To != factory.ZERODATE) { DateTime from, to; from = request.From; to = request.To; /* * if (request.From != factory.ZERODATE) * from = mTimeConverter.convert(request.From, O2GTimeConverterTimeZone.EST, O2GTimeConverterTimeZone.UTC); * else * from = factory.ZERODATE; * * if (request.To != factory.ZERODATE) * to = mTimeConverter.convert(request.To, O2GTimeConverterTimeZone.EST, O2GTimeConverterTimeZone.UTC); * else * to = factory.ZERODATE; */ factory.fillMarketDataSnapshotRequestTime(rq, from, to, false); } mHistoryRequests[rq.RequestID] = request; mSession.sendRequest(rq); return(rq.RequestID); }
// Request public void GetHistoryPrices(DateTime timeFrom, DateTime timeTo) { O2GRequestFactory factory = mSession.getRequestFactory(); O2GTimeframeCollection timeframes = factory.Timeframes; O2GTimeframe tfo = timeframes["D1"]; O2GRequest request = factory.createMarketDataSnapshotRequestInstrument("GBP/NZD", tfo, 7); timeFrom = today; timeTo = DateTime.Today; factory.fillMarketDataSnapshotRequestTime(request, timeFrom, timeTo, false); mSession.sendRequest(request); Thread.Sleep(5000); }
/// <summary> /// Get list of the supported time frames /// </summary> public IEnumerable <string> GetTimeframes() { if (!mReady) { return(null); } O2GRequestFactory factory = mSession.getRequestFactory(); O2GTimeframeCollection timeframes = factory.Timeframes; List <string> list = new List <string>(); for (int i = 0; i < timeframes.Count; i++) { list.Add(timeframes[i].ID); } return(list); }
public void GetLongHistoricPrices(string symbol, string timeframe, int ticks) { _mktData = new Quantum(); Symbol = new Symbol(symbol); session.AttachHandler(mHandler); DateTime dateNow = DateTime.Now; TimeSpan time = Timeframe.StringToTimeSpan(timeframe); DateTime startDate = dateNow.AddMinutes(-ticks * Timeframe.TimeframeToMinutes(timeframe)); O2GRequestFactory factory = session.Session.getRequestFactory(); O2GTimeframeCollection timeframes = factory.Timeframes; O2GTimeframe tfo = timeframes[timeframe]; int counter = ticks; lock (locker) { while (counter > 0) { _completeCounter++; int subticks = (counter >= QSConstants.MAX_FXCM_API_TICKS) ? QSConstants.MAX_FXCM_API_TICKS : counter; O2GRequest request = factory.createMarketDataSnapshotRequestInstrument(symbol, tfo, subticks); factory.fillMarketDataSnapshotRequestTime(request, startDate, startDate.AddMinutes(2 * subticks * Timeframe.TimeframeToMinutes(timeframe))); session.Session.sendRequest(request); startDate = startDate.AddMinutes(subticks * Timeframe.TimeframeToMinutes(timeframe)); counter -= (counter >= QSConstants.MAX_FXCM_API_TICKS) ? QSConstants.MAX_FXCM_API_TICKS : counter; } } int timeCounter = 0; while (!Complete || timeCounter++ < 3000) //max timeout 30 seconds { Thread.Sleep(100); } }
/// <summary> /// Send request to API for data /// </summary> /// <param name="adjustedStartDate"></param> /// <param name="endDate"></param> /// <param name="dataSetup"></param> public void sendRequest(DateTime adjustedStartDate, DateTime endDate, DataSetup dataSetup) { try { O2GRequestFactory factory = tss.Session.getRequestFactory(); O2GTimeframeCollection timeframes = factory.Timeframes; O2GTimeframe tfo = timeframes[timeInterval]; O2GRequest request = factory.createMarketDataSnapshotRequestInstrument(currency, tfo, 300); factory.fillMarketDataSnapshotRequestTime(request, adjustedStartDate, endDate, true); Console.WriteLine("Requesting from " + adjustedStartDate.ToString("MM/dd/yyyy HH:mm:ss") + " to " + endDate.ToString("MM/dd/yyyy HH:mm:ss")); logger.Debug("Requesting from " + adjustedStartDate.ToString("MM/dd/yyyy HH:mm:ss") + " to " + endDate.ToString("MM/dd/yyyy HH:mm:ss")); tss.Session.sendRequest(request); threadDictionary.Add(request.RequestID, dataSetup); } catch (Exception e) { MessageBox.Show("Error: " + e.Message); } }
/// <summary> /// Constructor /// </summary> /// <param name="controller">PriceHistory API controller</param> internal RequestHistoryForm(PriceAPIController controller) { InitializeComponent(); // Fills the list of the offers available for (int i = 0; i < controller.Offers.Count; i++) { comboBoxInstrument.Items.Add(controller.Offers[i].Instrument); } if (comboBoxInstrument.Items.Count > 0) { comboBoxInstrument.SelectedIndex = 0; } // Fills the list of the timeframes available except tick timeframes (as // ticks are not supported by PriceHistory API) O2GTimeframeCollection timeframes = controller.Timeframes; for (int i = 0; i < timeframes.Count; i++) { O2GTimeframe tf = timeframes[i]; if (tf.Unit == O2GTimeframeUnit.Tick) { continue; } TimeframeItem item = new TimeframeItem(tf); comboBoxTimeframe.Items.Add(item); } if (comboBoxTimeframe.Items.Count > 0) { comboBoxTimeframe.SelectedIndex = 0; } // Initialize the range for date/time controls dateTimePickerFrom.MinDate = new DateTime(1980, 1, 1); dateTimePickerFrom.MaxDate = DateTime.Now; dateTimePickerTo.MinDate = new DateTime(1980, 1, 1); }
private void GetHistoryPrices(O2GSession O2GSession, string Instrument, string Interval, DateTime DtFrom, DateTime DtTo) { m_responseListener = new ResponseListener(O2GSession); O2GSession.subscribeResponse(m_responseListener); O2GRequestFactory factory = O2GSession.getRequestFactory(); O2GTimeframeCollection timeframecollection = factory.Timeframes; O2GTimeframe Timeframe = timeframecollection[Interval]; if (Timeframe == null) { throw new Exception(string.Format("Timeframe '{0}' is incorrect!", Timeframe)); } O2GRequest request = factory.createMarketDataSnapshotRequestInstrument(Instrument, Timeframe, 300); DateTime DtFirst = DtTo; DateTime DatePrec = System.DateTime.MinValue; //TimeSpan PricesTimeSpan = System.TimeSpan.MinValue; //if (Interval == "m5") //{ // PricesTimeSpan = new TimeSpan(0, 0, 5, 0, 0); //} do // cause there is limit for returned candles amount { factory.fillMarketDataSnapshotRequestTime(request, DtFrom, DtFirst, false); m_responseListener.SetRequestID(request.RequestID); O2GSession.sendRequest(request); if (!m_responseListener.WaitEvents()) { throw new Exception("Response waiting timeout expired"); } // shift "to" bound to oldest datetime of returned data O2GResponse response = m_responseListener.GetResponse(); if (response != null && response.Type == O2GResponseType.MarketDataSnapshot) { O2GResponseReaderFactory readerFactory = O2GSession.getResponseReaderFactory(); if (readerFactory != null) { O2GMarketDataSnapshotResponseReader reader = readerFactory.createMarketDataSnapshotReader(response); if (reader.Count > 0) { if (DateTime.Compare(DtFirst, reader.getDate(0)) != 0) { DtFirst = reader.getDate(0); // earliest datetime of returned data for (int nData = reader.Count - 1; nData > -1; nData--) { if (reader.getDate(nData) != DatePrec) { m_datetime.Add(reader.getDate(nData)); m_ask.Add(reader.getAsk(nData)); m_askopen.Add(reader.getAskOpen(nData)); m_askclose.Add(reader.getAskClose(nData)); m_askhigh.Add(reader.getAskHigh(nData)); m_asklow.Add(reader.getAskLow(nData)); m_bid.Add(reader.getBid(nData)); m_bidopen.Add(reader.getBidOpen(nData)); m_bidclose.Add(reader.getBidClose(nData)); m_bidhigh.Add(reader.getBidHigh(nData)); m_bidlow.Add(reader.getBidLow(nData)); } //else //{ // break; //} DatePrec = reader.getDate(nData); } } else { break; } } else { Console.WriteLine("0 rows received"); break; } } // PrintPrices(session, response); } else { break; } } while (DtFirst > DtFrom); m_datetime.Reverse(); m_ask.Reverse(); m_askopen.Reverse(); m_askclose.Reverse(); m_askhigh.Reverse(); m_asklow.Reverse(); m_bid.Reverse(); m_bidopen.Reverse(); m_bidclose.Reverse(); m_bidhigh.Reverse(); m_bidlow.Reverse(); }