public void MalformedContractSymbolCreatesFutureContract(string symbol) { var malformedContract = new Contract { IncludeExpired = false, Currency = "USD", Symbol = symbol, SecType = IB.SecurityType.Future }; var expectedContract = new Contract { Symbol = "ES", LastTradeDateOrContractMonth = "20210319", SecType = IB.SecurityType.Future, IncludeExpired = false, Currency = "USD" }; var mapper = new InteractiveBrokersSymbolMapper(new LocalDiskMapFileProvider()); var actualContract = mapper.ParseMalformedContractFutureSymbol(malformedContract, SymbolPropertiesDatabase.FromDataFolder()); Assert.AreEqual(expectedContract.Symbol, actualContract.Symbol); Assert.AreEqual(expectedContract.Multiplier, actualContract.Multiplier); Assert.AreEqual(expectedContract.LastTradeDateOrContractMonth, actualContract.LastTradeDateOrContractMonth); Assert.AreEqual(expectedContract.Right, actualContract.Right); Assert.AreEqual(expectedContract.Strike, actualContract.Strike); Assert.AreEqual(expectedContract.Exchange, actualContract.Exchange); Assert.AreEqual(expectedContract.SecType, actualContract.SecType); Assert.AreEqual(expectedContract.IncludeExpired, actualContract.IncludeExpired); Assert.AreEqual(expectedContract.Currency, actualContract.Currency); }
public void MapCorrectBrokerageSymbol(string ticker, string ibSymbol) { var mapper = new InteractiveBrokersSymbolMapper(new LocalDiskMapFileProvider()); var symbol = Symbol.Create(ticker, SecurityType.Equity, Market.USA); var brokerageSymbol = mapper.GetBrokerageSymbol(symbol); Assert.AreEqual(ibSymbol, brokerageSymbol); }
public void FuturesOptionsWithUnderlyingContractMonthMappedByRuleResolvesUnderlyingGetLeanSymbol(int year, int month, int day) { var futuresChainProvider = new BacktestingFutureChainProvider(TestGlobals.DataProvider); var mapper = new InteractiveBrokersSymbolMapper(TestGlobals.MapFileProvider); var expectedUnderlyingSymbol = Symbol.CreateFuture("GC", Market.COMEX, new DateTime(2021, 4, 28)); var futureOption = mapper.GetLeanSymbol("OG", SecurityType.FutureOption, Market.COMEX, new DateTime(year, month, day)); Assert.AreEqual(expectedUnderlyingSymbol, futureOption.Underlying); }
public void ReturnsCorrectBrokerageSymbol() { var mapper = new InteractiveBrokersSymbolMapper(); var symbol = Symbol.Create("EURUSD", SecurityType.Forex, Market.FXCM); var brokerageSymbol = mapper.GetBrokerageSymbol(symbol); Assert.AreEqual("EURUSD", brokerageSymbol); symbol = Symbol.Create("AAPL", SecurityType.Equity, Market.USA); brokerageSymbol = mapper.GetBrokerageSymbol(symbol); Assert.AreEqual("AAPL", brokerageSymbol); }
public void ReturnsCorrectLeanSymbol() { var mapper = new InteractiveBrokersSymbolMapper(); var symbol = mapper.GetLeanSymbol("EURUSD", SecurityType.Forex, Market.FXCM); Assert.AreEqual("EURUSD", symbol.Value); Assert.AreEqual(SecurityType.Forex, symbol.ID.SecurityType); Assert.AreEqual(Market.FXCM, symbol.ID.Market); symbol = mapper.GetLeanSymbol("AAPL", SecurityType.Equity, Market.USA); Assert.AreEqual("AAPL", symbol.Value); Assert.AreEqual(SecurityType.Equity, symbol.ID.SecurityType); Assert.AreEqual(Market.USA, symbol.ID.Market); }
public void ThrowsOnNullOrEmptyOrInvalidSymbol() { var mapper = new InteractiveBrokersSymbolMapper(new LocalDiskMapFileProvider()); Assert.Throws <ArgumentException>(() => mapper.GetLeanSymbol(null, SecurityType.Forex, Market.FXCM)); Assert.Throws <ArgumentException>(() => mapper.GetLeanSymbol("", SecurityType.Forex, Market.FXCM)); var symbol = Symbol.Empty; Assert.Throws <ArgumentException>(() => mapper.GetBrokerageSymbol(symbol)); symbol = null; Assert.Throws <ArgumentException>(() => mapper.GetBrokerageSymbol(symbol)); symbol = Symbol.Create("", SecurityType.Forex, Market.FXCM); Assert.Throws <ArgumentException>(() => mapper.GetBrokerageSymbol(symbol)); symbol = Symbol.Create("ABC_XYZ", SecurityType.Forex, Market.FXCM); Assert.Throws <ArgumentException>(() => mapper.GetBrokerageSymbol(symbol)); }
public void MalformedContractSymbolCreatesOptionContract(string symbol) { var malformedContract = new Contract { IncludeExpired = false, Currency = "USD", Multiplier = "100", Symbol = symbol, SecType = IB.SecurityType.Option, }; var expectedContract = new Contract { Symbol = "SPY", Multiplier = "100", LastTradeDateOrContractMonth = "20210618", Right = IB.RightType.Put, Strike = 345.0, Exchange = "Smart", SecType = IB.SecurityType.Option, IncludeExpired = false, Currency = "USD" }; var actualContract = InteractiveBrokersSymbolMapper.ParseMalformedContractOptionSymbol(malformedContract); Assert.AreEqual(expectedContract.Symbol, actualContract.Symbol); Assert.AreEqual(expectedContract.Multiplier, actualContract.Multiplier); Assert.AreEqual(expectedContract.LastTradeDateOrContractMonth, actualContract.LastTradeDateOrContractMonth); Assert.AreEqual(expectedContract.Right, actualContract.Right); Assert.AreEqual(expectedContract.Strike, actualContract.Strike); Assert.AreEqual(expectedContract.Exchange, actualContract.Exchange); Assert.AreEqual(expectedContract.SecType, actualContract.SecType); Assert.AreEqual(expectedContract.IncludeExpired, actualContract.IncludeExpired); Assert.AreEqual(expectedContract.Currency, actualContract.Currency); }
public void CreatesExpectedFuturesContracts() { var symbolMapper = new InteractiveBrokersSymbolMapper(); using (var ib = new InteractiveBrokersBrokerage(new QCAlgorithm(), new OrderProvider(), new SecurityProvider(), new AggregationManager())) { ib.Connect(); Assert.IsTrue(ib.IsConnected); var ibMarkets = new Dictionary <string, string> { { Market.CME, "GLOBEX" }, { Market.NYMEX, "NYMEX" }, { Market.COMEX, "NYMEX" }, { Market.CBOT, "ECBOT" }, { Market.ICE, "NYBOT" }, { Market.CBOE, "CFE" } }; var tickersByMarket = new Dictionary <string, string[]> { { Market.CBOE, new[] { "VX" } }, { Market.CBOT, new[] { "AW", //"BCF", //"BWF", "EH", "F1U", "KE", "TN", "UB", "YM", "ZB", "ZC", "ZF", "ZL", "ZM", "ZN", "ZO", "ZS", "ZT", "ZW", } }, { Market.CME, new[] { "6A", "6B", "6C", "6E", "6J", "6L", "6M", "6N", "6R", "6S", "6Z", //"ACD", //"AJY", //"ANE", "BIO", "BTC", "CB", //"CJY", //"CNH", "CSC", //"DC", "DY", "E7", //"EAD", //"ECD", //"EI", "EMD", "ES", //"ESK", "GD", "GDK", "GE", "GF", //"GNF", "HE", //"IBV", "J7", //"LBS", "LE", "NKD", "NQ", "RTY", } }, { Market.COMEX, new[] { //"AUP", //"EDP", "GC", "HG", "SI", } }, { Market.ICE, new[] { "B", "CC", "CT", "DX", "G", "KC", "OJ", "SB", } }, { Market.NYMEX, new[] { //"1S", //"22", //"A0D", //"A0F", //"A1L", //"A1M", //"A1R", //"A32", //"A3G", //"A7E", //"A7I", //"A7Q", //"A8J", //"A8K", //"A8O", //"A91", //"A9N", //"AA6", //"AA8", //"ABS", "ABT", //"AC0", //"AD0", //"ADB", //"AE5", //"AGA", //"AJL", //"AJS", //"AKL", //"AKZ", //"APS", //"AR0", "ARE", //"AVZ", //"AYV", //"AYX", //"AZ1", //"B0", //"B7H", "BK", //"BOO", //"BR7", "BZ", "CL", //"CRB", //"CSW", "CSX", //"CU", //"D1N", //"DCB", //"E6", //"EN", //"EPN", //"EVC", "EWG", //"EWN", "EXR", //"FO", "FRC", //"FSS", //"GCU", //"HCL", "HH", "HO", "HP", "HRC", //"HTT", "NG", "PA", "PL", "RB", //"YO", } } }; foreach (var kvp in tickersByMarket) { var market = kvp.Key; var tickers = kvp.Value; foreach (var ticker in tickers) { var contract = new Contract { Symbol = symbolMapper.GetBrokerageRootSymbol(ticker), Currency = Currencies.USD, Exchange = null, SecType = "FUT" }; Log.Trace($"Market: {market} - Future Ticker: {ticker}"); var results = ib.FindContracts(contract, contract.Symbol); foreach (var contractDetails in results.Where(x => ibMarkets.Values.Contains(x.Contract.Exchange))) { var message = $" - ContractDetails: {contractDetails.Contract} {contractDetails.ContractMonth}"; Log.Trace(message); Assert.AreEqual(ibMarkets[market], contractDetails.Contract.Exchange, message); } } } } }