/// <summary> /// Initializes a new instance of the <see cref="OandaRestApiBase"/> class. /// </summary> /// <param name="symbolMapper">The symbol mapper.</param> /// <param name="orderProvider">The order provider.</param> /// <param name="securityProvider">The holdings provider.</param> /// <param name="environment">The Oanda environment (Trade or Practice)</param> /// <param name="accessToken">The Oanda access token (can be the user's personal access token or the access token obtained with OAuth by QC on behalf of the user)</param> /// <param name="accountId">The account identifier.</param> /// <param name="agent">The Oanda agent string</param> protected OandaRestApiBase(OandaSymbolMapper symbolMapper, IOrderProvider orderProvider, ISecurityProvider securityProvider, Environment environment, string accessToken, string accountId, string agent) : base("Oanda Brokerage") { SymbolMapper = symbolMapper; OrderProvider = orderProvider; SecurityProvider = securityProvider; Environment = environment; AccessToken = accessToken; AccountId = accountId; Agent = agent; PricingConnectionHandler = new DefaultConnectionHandler { MaximumIdleTimeSpan = TimeSpan.FromSeconds(20) }; PricingConnectionHandler.ConnectionLost += OnPricingConnectionLost; PricingConnectionHandler.ConnectionRestored += OnPricingConnectionRestored; PricingConnectionHandler.ReconnectRequested += OnPricingReconnectRequested; PricingConnectionHandler.Initialize(null); TransactionsConnectionHandler = new DefaultConnectionHandler { MaximumIdleTimeSpan = TimeSpan.FromSeconds(20) }; TransactionsConnectionHandler.ConnectionLost += OnTransactionsConnectionLost; TransactionsConnectionHandler.ConnectionRestored += OnTransactionsConnectionRestored; TransactionsConnectionHandler.ReconnectRequested += OnTransactionsReconnectRequested; TransactionsConnectionHandler.Initialize(null); }
public void ThrowsOnUnknownSymbol() { var mapper = new OandaSymbolMapper(); Assert.Throws<ArgumentException>(() => mapper.GetLeanSymbol("ABC_USD", SecurityType.Forex, Market.Oanda)); var symbol = Symbol.Create("ABCUSD", SecurityType.Forex, Market.Oanda); Assert.Throws<ArgumentException>(() => mapper.GetBrokerageSymbol(symbol)); }
/// <summary> /// Initializes a new instance of the <see cref="OandaRestApiBase"/> class. /// </summary> /// <param name="symbolMapper">The symbol mapper.</param> /// <param name="orderProvider">The order provider.</param> /// <param name="securityProvider">The holdings provider.</param> /// <param name="environment">The Oanda environment (Trade or Practice)</param> /// <param name="accessToken">The Oanda access token (can be the user's personal access token or the access token obtained with OAuth by QC on behalf of the user)</param> /// <param name="accountId">The account identifier.</param> protected OandaRestApiBase(OandaSymbolMapper symbolMapper, IOrderProvider orderProvider, ISecurityProvider securityProvider, Environment environment, string accessToken, string accountId) : base("Oanda Brokerage") { SymbolMapper = symbolMapper; OrderProvider = orderProvider; SecurityProvider = securityProvider; Environment = environment; AccessToken = accessToken; AccountId = accountId; }
/// <summary> /// Initializes a new instance of the <see cref="OandaRestApiBase"/> class. /// </summary> /// <param name="symbolMapper">The symbol mapper.</param> /// <param name="orderProvider">The order provider.</param> /// <param name="securityProvider">The holdings provider.</param> /// <param name="aggregator">Consolidate ticks</param> /// <param name="environment">The Oanda environment (Trade or Practice)</param> /// <param name="accessToken">The Oanda access token (can be the user's personal access token or the access token obtained with OAuth by QC on behalf of the user)</param> /// <param name="accountId">The account identifier.</param> /// <param name="agent">The Oanda agent string</param> protected OandaRestApiBase(OandaSymbolMapper symbolMapper, IOrderProvider orderProvider, ISecurityProvider securityProvider, IDataAggregator aggregator, Environment environment, string accessToken, string accountId, string agent) : base("Oanda Brokerage") { SymbolMapper = symbolMapper; OrderProvider = orderProvider; SecurityProvider = securityProvider; Environment = environment; AccessToken = accessToken; AccountId = accountId; Agent = agent; Aggregator = aggregator; _subscriptionManager = new EventBasedDataQueueHandlerSubscriptionManager(); _subscriptionManager.SubscribeImpl += (s, t) => Refresh(); _subscriptionManager.UnsubscribeImpl += (s, t) => Refresh(); PricingConnectionHandler = new DefaultConnectionHandler { MaximumIdleTimeSpan = TimeSpan.FromSeconds(20) }; PricingConnectionHandler.ConnectionLost += OnPricingConnectionLost; PricingConnectionHandler.ConnectionRestored += OnPricingConnectionRestored; PricingConnectionHandler.ReconnectRequested += OnPricingReconnectRequested; PricingConnectionHandler.Initialize(null); TransactionsConnectionHandler = new DefaultConnectionHandler { MaximumIdleTimeSpan = TimeSpan.FromSeconds(20) }; TransactionsConnectionHandler.ConnectionLost += OnTransactionsConnectionLost; TransactionsConnectionHandler.ConnectionRestored += OnTransactionsConnectionRestored; TransactionsConnectionHandler.ReconnectRequested += OnTransactionsReconnectRequested; TransactionsConnectionHandler.Initialize(null); Task.Factory.StartNew( () => { do { _refreshEvent.WaitOne(); Thread.Sleep(SubscribeDelay); if (!_isConnected) { continue; } _refreshEvent.Reset(); var symbolsToSubscribe = SubscribedSymbols; // restart streaming session SubscribeSymbols(symbolsToSubscribe); } while (!_streamingCancellationTokenSource.IsCancellationRequested); }, TaskCreationOptions.LongRunning ); }
public void ReturnsCorrectBrokerageSymbol() { var mapper = new OandaSymbolMapper(); var symbol = Symbol.Create("EURUSD", SecurityType.Forex, Market.Oanda); var brokerageSymbol = mapper.GetBrokerageSymbol(symbol); Assert.AreEqual("EUR_USD", brokerageSymbol); symbol = Symbol.Create("DE30EUR", SecurityType.Cfd, Market.Oanda); brokerageSymbol = mapper.GetBrokerageSymbol(symbol); Assert.AreEqual("DE30_EUR", brokerageSymbol); }
public void ReturnsCorrectLeanSymbol() { var mapper = new OandaSymbolMapper(); var symbol = mapper.GetLeanSymbol("EUR_USD", SecurityType.Forex, Market.Oanda); Assert.AreEqual("EURUSD", symbol.Value); Assert.AreEqual(SecurityType.Forex, symbol.ID.SecurityType); Assert.AreEqual(Market.Oanda, symbol.ID.Market); symbol = mapper.GetLeanSymbol("DE30_EUR", SecurityType.Cfd, Market.Oanda); Assert.AreEqual("DE30EUR", symbol.Value); Assert.AreEqual(SecurityType.Cfd, symbol.ID.SecurityType); Assert.AreEqual(Market.Oanda, symbol.ID.Market); }
/// <summary> /// Initializes a new instance of the <see cref="OandaRestApiV20"/> class. /// </summary> /// <param name="symbolMapper">The symbol mapper.</param> /// <param name="orderProvider">The order provider.</param> /// <param name="securityProvider">The holdings provider.</param> /// <param name="environment">The Oanda environment (Trade or Practice)</param> /// <param name="accessToken">The Oanda access token (can be the user's personal access token or the access token obtained with OAuth by QC on behalf of the user)</param> /// <param name="accountId">The account identifier.</param> public OandaRestApiV20(OandaSymbolMapper symbolMapper, IOrderProvider orderProvider, ISecurityProvider securityProvider, Environment environment, string accessToken, string accountId) : base(symbolMapper, orderProvider, securityProvider, environment, accessToken, accountId) { var basePathRest = environment == Environment.Trade ? "https://api-fxtrade.oanda.com/v3" : "https://api-fxpractice.oanda.com/v3"; var basePathStreaming = environment == Environment.Trade ? "https://stream-fxtrade.oanda.com/v3" : "https://stream-fxpractice.oanda.com/v3"; _apiRest = new DefaultApi(basePathRest); _apiStreaming = new DefaultApi(basePathStreaming); }
/// <summary> /// Initializes a new instance of the <see cref="OandaRestApiV20"/> class. /// </summary> /// <param name="symbolMapper">The symbol mapper.</param> /// <param name="orderProvider">The order provider.</param> /// <param name="securityProvider">The holdings provider.</param> /// <param name="aggregator">Consolidate ticks.</param> /// <param name="environment">The Oanda environment (Trade or Practice)</param> /// <param name="accessToken">The Oanda access token (can be the user's personal access token or the access token obtained with OAuth by QC on behalf of the user)</param> /// <param name="accountId">The account identifier.</param> /// <param name="agent">The Oanda agent string</param> public OandaRestApiV20(OandaSymbolMapper symbolMapper, IOrderProvider orderProvider, ISecurityProvider securityProvider, IDataAggregator aggregator, Environment environment, string accessToken, string accountId, string agent) : base(symbolMapper, orderProvider, securityProvider, aggregator, environment, accessToken, accountId, agent) { var basePathRest = environment == Environment.Trade ? "https://api-fxtrade.oanda.com/v3" : "https://api-fxpractice.oanda.com/v3"; var basePathStreaming = environment == Environment.Trade ? "https://stream-fxtrade.oanda.com/v3" : "https://stream-fxpractice.oanda.com/v3"; _apiRest = new DefaultApi(basePathRest); _apiRest.Configuration.AddDefaultHeader(OandaAgentKey, Agent); _apiStreaming = new DefaultApi(basePathStreaming); }
public void ThrowsOnNullOrEmptySymbol() { var mapper = new OandaSymbolMapper(); Assert.Throws<ArgumentException>(() => mapper.GetLeanSymbol(null, SecurityType.Forex, Market.Oanda)); Assert.Throws<ArgumentException>(() => mapper.GetLeanSymbol("", SecurityType.Forex, Market.Oanda)); var symbol = Symbol.Empty; Assert.Throws<ArgumentException>(() => mapper.GetBrokerageSymbol(symbol)); symbol = null; Assert.Throws<ArgumentException>(() => mapper.GetBrokerageSymbol(symbol)); symbol = Symbol.Create("", SecurityType.Forex, Market.Oanda); Assert.Throws<ArgumentException>(() => mapper.GetBrokerageSymbol(symbol)); }
public void ChecksForKnownSymbols() { #pragma warning disable 0618 // This test requires implicit operators var mapper = new OandaSymbolMapper(); Assert.IsFalse(mapper.IsKnownBrokerageSymbol(null)); Assert.IsFalse(mapper.IsKnownBrokerageSymbol("")); Assert.IsTrue(mapper.IsKnownBrokerageSymbol("EUR_USD")); Assert.IsTrue(mapper.IsKnownBrokerageSymbol("DE30_EUR")); Assert.IsFalse(mapper.IsKnownBrokerageSymbol("ABC_USD")); Assert.IsFalse(mapper.IsKnownLeanSymbol(null)); Assert.IsFalse(mapper.IsKnownLeanSymbol("")); Assert.IsFalse(mapper.IsKnownLeanSymbol(Symbol.Empty)); Assert.IsTrue(mapper.IsKnownLeanSymbol(Symbol.Create("EURUSD", SecurityType.Forex, Market.Oanda))); Assert.IsFalse(mapper.IsKnownLeanSymbol(Symbol.Create("ABCUSD", SecurityType.Forex, Market.Oanda))); Assert.IsFalse(mapper.IsKnownLeanSymbol(Symbol.Create("EURUSD", SecurityType.Cfd, Market.Oanda))); Assert.IsFalse(mapper.IsKnownLeanSymbol(Symbol.Create("DE30EUR", SecurityType.Forex, Market.Oanda))); #pragma warning restore 0618 }
public void ThrowsOnInvalidSecurityType() { var mapper = new OandaSymbolMapper(); Assert.Throws<ArgumentException>(() => mapper.GetLeanSymbol("AAPL", SecurityType.Equity, Market.Oanda)); var symbol = Symbol.Create("AAPL", SecurityType.Equity, Market.Oanda); Assert.Throws<ArgumentException>(() => mapper.GetBrokerageSymbol(symbol)); }
/// <summary> /// Initializes a new instance of the <see cref="OandaRestApiV1"/> class. /// </summary> /// <param name="symbolMapper">The symbol mapper.</param> /// <param name="orderProvider">The order provider.</param> /// <param name="securityProvider">The holdings provider.</param> /// <param name="environment">The Oanda environment (Trade or Practice)</param> /// <param name="accessToken">The Oanda access token (can be the user's personal access token or the access token obtained with OAuth by QC on behalf of the user)</param> /// <param name="accountId">The account identifier.</param> /// <param name="agent">The Oanda agent string</param> public OandaRestApiV1(OandaSymbolMapper symbolMapper, IOrderProvider orderProvider, ISecurityProvider securityProvider, Environment environment, string accessToken, string accountId, string agent) : base(symbolMapper, orderProvider, securityProvider, environment, accessToken, accountId, agent) { }