コード例 #1
0
        /// <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);
        }
コード例 #2
0
ファイル: OandaSymbolMapperTests.cs プロジェクト: skyfyl/Lean
        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));
        }
コード例 #3
0
 /// <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;
 }
コード例 #4
0
        /// <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
                );
        }
コード例 #5
0
ファイル: OandaSymbolMapperTests.cs プロジェクト: skyfyl/Lean
        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);
        }
コード例 #6
0
ファイル: OandaSymbolMapperTests.cs プロジェクト: skyfyl/Lean
        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);
        }
コード例 #7
0
        /// <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);
        }
コード例 #8
0
        /// <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);
        }
コード例 #9
0
ファイル: OandaSymbolMapperTests.cs プロジェクト: skyfyl/Lean
        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));
        }
コード例 #10
0
ファイル: OandaSymbolMapperTests.cs プロジェクト: skyfyl/Lean
        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
        }
コード例 #11
0
ファイル: OandaSymbolMapperTests.cs プロジェクト: skyfyl/Lean
        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));
        }
コード例 #12
0
ファイル: OandaRestApiV1.cs プロジェクト: hao507/Lean
 /// <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)
 {
 }