static void Main(string[] args) { O2GSession session = null; try { LoginParams loginParams = new LoginParams(ConfigurationManager.AppSettings); SampleParams sampleParams = new SampleParams(ConfigurationManager.AppSettings); PrintSampleParams("GetHistPrices", loginParams, sampleParams); session = O2GTransport.createSession(); statusListener = new SessionStatusListener(session, loginParams.SessionID, loginParams.Pin); session.subscribeSessionStatus(statusListener); statusListener.Reset(); session.login(loginParams.Login, loginParams.Password, loginParams.URL, loginParams.Connection); if (statusListener.WaitEvents() && statusListener.Connected) { responseListener = new ResponseListener(session); session.subscribeResponse(responseListener); GetHistoryPrices(session, sampleParams.Instrument, sampleParams.Timeframe, sampleParams.DateFrom, sampleParams.DateTo, responseListener); Console.WriteLine("Done!"); statusListener.Reset(); session.logout(); statusListener.WaitEvents(); session.unsubscribeResponse(responseListener); } session.unsubscribeSessionStatus(statusListener); } catch (Exception e) { Console.WriteLine("Exception: {0}", e.ToString()); } finally { if (session != null) { if (statusListener.Connected) { if (responseListener != null) { session.unsubscribeResponse(responseListener); } statusListener.Reset(); session.logout(); statusListener.WaitEvents(); } session.unsubscribeSessionStatus(statusListener); session.Dispose(); } } }
/// <summary> /// Request historical prices for the specified timeframe of the specified period /// </summary> /// <param name="session"></param> /// <param name="sInstrument"></param> /// <param name="sTimeframe"></param> /// <param name="dtFrom"></param> /// <param name="dtTo"></param> /// <param name="responseListener"></param> public static void GetHistoryPrices(O2GSession session, string sInstrument, string sTimeframe, DateTime dtFrom, DateTime dtTo, ResponseListener responseListener) { O2GRequestFactory factory = session.getRequestFactory(); O2GTimeframe timeframe = factory.Timeframes[sTimeframe]; if (timeframe == null) { throw new Exception(string.Format("Timeframe '{0}' is incorrect!", sTimeframe)); } O2GRequest request = factory.createMarketDataSnapshotRequestInstrument(sInstrument, timeframe, 300); DateTime dtFirst = dtTo; do // cause there is limit for returned candles amount { factory.fillMarketDataSnapshotRequestTime(request, dtFrom, dtFirst, false); responseListener.SetRequestID(request.RequestID); session.sendRequest(request); if (!responseListener.WaitEvents()) { throw new Exception("Response waiting timeout expired"); } // shift "to" bound to oldest datetime of returned data O2GResponse response = responseListener.GetResponse(); if (response != null && response.Type == O2GResponseType.MarketDataSnapshot) { O2GResponseReaderFactory readerFactory = session.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 } else { break; } } else { Console.WriteLine("0 rows received"); break; } } PrintPrices(session, response); } else { break; } } while (dtFirst > dtFrom); }
static void Main(string[] args) { O2GSession session = null; SessionStatusListener statusListener = null; ResponseListener responseListener = null; try { Console.WriteLine("GetHistPrices sample\n"); ArgumentParser argParser = new ArgumentParser(args, "GetHistPrices"); argParser.AddArguments(ParserArgument.Login, ParserArgument.Password, ParserArgument.Url, ParserArgument.Connection, ParserArgument.SessionID, ParserArgument.Pin, ParserArgument.Instrument, ParserArgument.TimeFrame, ParserArgument.DateFrom, ParserArgument.DateTo); argParser.ParseArguments(); if (!argParser.AreArgumentsValid) { argParser.PrintUsage(); return; } argParser.PrintArguments(); LoginParams loginParams = argParser.LoginParams; SampleParams sampleParams = argParser.SampleParams; session = O2GTransport.createSession(); statusListener = new SessionStatusListener(session, loginParams.SessionID, loginParams.Pin); session.subscribeSessionStatus(statusListener); statusListener.Reset(); session.login(loginParams.Login, loginParams.Password, loginParams.URL, loginParams.Connection); if (statusListener.WaitEvents() && statusListener.Connected) { responseListener = new ResponseListener(session); session.subscribeResponse(responseListener); GetHistoryPrices(session, sampleParams.Instrument, sampleParams.Timeframe, sampleParams.DateFrom, sampleParams.DateTo, responseListener); Console.WriteLine("Done!"); } } catch (Exception e) { Console.WriteLine("Exception: {0}", e.ToString()); } finally { if (session != null) { if (statusListener.Connected) { statusListener.Reset(); session.logout(); statusListener.WaitEvents(); if (responseListener != null) { session.unsubscribeResponse(responseListener); } } session.unsubscribeSessionStatus(statusListener); session.Dispose(); } } }
static void Main(string[] args) { O2GSession session = null; try { LoginParams loginParams = new LoginParams(ConfigurationManager.AppSettings); SampleParams sampleParams = new SampleParams(ConfigurationManager.AppSettings); PrintSampleParams("GetHistPrices", loginParams, sampleParams); session = O2GTransport.createSession(); SessionStatusListener statusListener = new SessionStatusListener(session, loginParams.SessionID, loginParams.Pin); session.subscribeSessionStatus(statusListener); statusListener.Reset(); session.login(loginParams.Login, loginParams.Password, loginParams.URL, loginParams.Connection); if (statusListener.WaitEvents() && statusListener.Connected) { ResponseListener responseListener = new ResponseListener(session); session.subscribeResponse(responseListener); GetHistoryPrices(session, sampleParams.Instrument, sampleParams.Timeframe, sampleParams.DateFrom, sampleParams.DateTo, responseListener); Console.WriteLine("Done!"); statusListener.Reset(); session.logout(); statusListener.WaitEvents(); session.unsubscribeResponse(responseListener); } session.unsubscribeSessionStatus(statusListener); } catch (Exception e) { Console.WriteLine("Exception: {0}", e.ToString()); } finally { if (session != null) { session.Dispose(); } } }
static void Main(string[] args) { O2GSession session = null; IPriceHistoryCommunicator communicator = null; SessionStatusListener statusListener = null; try { Console.WriteLine("GetHistPrices sample\n"); ArgumentParser argParser = new ArgumentParser(args, "GetHistPrices"); argParser.AddArguments(ParserArgument.Login, ParserArgument.Password, ParserArgument.Url, ParserArgument.Connection, ParserArgument.SessionID, ParserArgument.Pin, ParserArgument.Instrument, ParserArgument.TimeFrame, ParserArgument.DateFrom, ParserArgument.DateTo, ParserArgument.QuotesCount, ParserArgument.OpenPriceCandlesMode); argParser.ParseArguments(); if (!argParser.AreArgumentsValid) { argParser.PrintUsage(); return; } argParser.PrintArguments(); LoginParams loginParams = argParser.LoginParams; SampleParams sampleParams = argParser.SampleParams; // use the application module path as a base path for quotes storage string storagePath = System.IO.Path.Combine(AppContext.BaseDirectory, "History"); // create the ForexConnect trading session session = O2GTransport.createSession(); statusListener = new SessionStatusListener(session, loginParams.SessionID, loginParams.Pin); // subscribe IO2GSessionStatus interface implementation for the status events session.subscribeSessionStatus(statusListener); statusListener.Reset(); // create an instance of IPriceHistoryCommunicator communicator = PriceHistoryCommunicatorFactory.createCommunicator(session, storagePath); // log in to ForexConnect session.login(loginParams.Login, loginParams.Password, loginParams.URL, loginParams.Connection); if (statusListener.WaitEvents() && statusListener.Connected) { CommunicatorStatusListener communicatorStatusListener = new CommunicatorStatusListener(); communicator.addStatusListener(communicatorStatusListener); // wait until the communicator signals that it is ready if (communicator.isReady() || (communicatorStatusListener.WaitEvents() && communicatorStatusListener.Ready)) { // set open price candles mode, it must be called after login QuotesManager quotesManager = communicator.getQuotesManager(); quotesManager.openPriceCandlesMode = sampleParams.OpenPriceCandlesMode; // attach the instance of the class that implements the IPriceHistoryCommunicatorListener // interface to the communicator ResponseListener responseListener = new ResponseListener(); communicator.addListener(responseListener); GetHistoryPrices(communicator, sampleParams.Instrument, sampleParams.Timeframe, sampleParams.DateFrom, sampleParams.DateTo, sampleParams.QuotesCount, responseListener); Console.WriteLine("Done!"); communicator.removeListener(responseListener); } communicator.removeStatusListener(communicatorStatusListener); } } catch (Exception e) { Console.WriteLine("Exception: {0}", e.ToString()); } finally { if (communicator != null) { communicator.Dispose(); } if (session != null) { try { statusListener.Reset(); session.logout(); statusListener.WaitEvents(); } catch (Exception) { } session.unsubscribeSessionStatus(statusListener); session.Dispose(); } } }
/// <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); } }
static void Main(string[] args) { O2GSession session = null; IPriceHistoryCommunicator communicator = null; SessionStatusListener statusListener = null; bool loggedIn = false; try { LoginParams loginParams = new LoginParams(ConfigurationManager.AppSettings); SampleParams sampleParams = new SampleParams(ConfigurationManager.AppSettings); PrintSampleParams("GetHistPrices", loginParams, sampleParams); // use the application module path as a base path for quotes storage string storagePath = System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "History"); // create the ForexConnect trading session session = O2GTransport.createSession(); statusListener = new SessionStatusListener(session, loginParams.SessionID, loginParams.Pin); // subscribe IO2GSessionStatus interface implementation for the status events session.subscribeSessionStatus(statusListener); statusListener.Reset(); // create an instance of IPriceHistoryCommunicator communicator = PriceHistoryCommunicatorFactory.createCommunicator(session, storagePath); // log in to ForexConnect session.login(loginParams.Login, loginParams.Password, loginParams.URL, loginParams.Connection); if (statusListener.WaitEvents() && statusListener.Connected) { loggedIn = true; CommunicatorStatusListener communicatorStatusListener = new CommunicatorStatusListener(); communicator.addStatusListener(communicatorStatusListener); // wait until the communicator signals that it is ready if (communicator.isReady() || (communicatorStatusListener.WaitEvents() && communicatorStatusListener.Ready)) { // set open price candles mode, it must be called after login QuotesManager quotesManager = communicator.getQuotesManager(); quotesManager.openPriceCandlesMode = sampleParams.OpenPriceCandlesMode; // attach the instance of the class that implements the IPriceHistoryCommunicatorListener // interface to the communicator ResponseListener responseListener = new ResponseListener(); communicator.addListener(responseListener); GetHistoryPrices(communicator, sampleParams.Instrument, sampleParams.Timeframe, sampleParams.DateFrom, sampleParams.DateTo, sampleParams.QuotesCount, responseListener); Console.WriteLine("Done!"); communicator.removeListener(responseListener); } communicator.removeStatusListener(communicatorStatusListener); } } catch (Exception e) { Console.WriteLine("Exception: {0}", e.ToString()); } finally { if (communicator != null) { communicator.Dispose(); } if (session != null) { try { statusListener.Reset(); session.logout(); statusListener.WaitEvents(); } catch (Exception ee) { } session.unsubscribeSessionStatus(statusListener); session.Dispose(); } } }