public async Task HistoricalDataController_Should_RetrieveHistoricalData() { // Setup TwsObjectFactory twsObjectFactory = new TwsObjectFactory(); TwsRequestIdGenerator twsRequestIdGenerator = new TwsRequestIdGenerator(); TwsConnectionController connectionController = new TwsConnectionController(twsObjectFactory.ClientSocket, twsObjectFactory.TwsCallbackHandler, "localhost", 7462, 1); TwsHistoricalDataController historicalDataController = new TwsHistoricalDataController(twsObjectFactory.ClientSocket, twsObjectFactory.TwsCallbackHandler, twsRequestIdGenerator); await connectionController.EnsureConnectedAsync(); Contract contract = new Contract { SecType = TwsContractSecType.Stock, Symbol = "MSFT", Exchange = TwsExchange.Smart, PrimaryExch = TwsExchange.Island, }; var queryTime = DateTime.Now.AddMonths(-6); // Call List <HistoricalDataEventArgs> historicalDataEvents = await historicalDataController.GetHistoricalDataAsync(contract, queryTime, TwsDuration.OneMonth, TwsBarSizeSetting.OneDay, TwsHistoricalDataRequestType.Midpoint); // Assert historicalDataEvents.Count.Should().BeGreaterThan(0); }
public async Task TwsExecutionController_Should_ReturnOpenOrdersTwice() { TwsObjectFactory twsObjectFactory = new TwsObjectFactory(); TwsConnectionController connectionController = new TwsConnectionController(twsObjectFactory.ClientSocket, twsObjectFactory.TwsCallbackHandler, "localhost", 7462, 1); TwsOpenOrdersController twsOpenOrdersController = new TwsOpenOrdersController(twsObjectFactory.ClientSocket, twsObjectFactory.TwsCallbackHandler); ITwsNextOrderIdController nextOrderIdController = new TwsNextOrderIdController(twsObjectFactory.ClientSocket, twsObjectFactory.TwsCallbackHandler); TwsOrderPlacementController orderPlacementController = new TwsOrderPlacementController(twsObjectFactory.ClientSocket, twsObjectFactory.TwsCallbackHandler); TwsRequestIdGenerator twsRequestIdGenerator = new TwsRequestIdGenerator(); TwsExecutionController executionController = new TwsExecutionController(twsObjectFactory.ClientSocket, twsObjectFactory.TwsCallbackHandler, twsRequestIdGenerator); await connectionController.EnsureConnectedAsync(); // Create a position Contract contract = new Contract(); contract.SecType = TwsContractSecType.Stock; contract.Symbol = "MSFT"; contract.Exchange = TwsExchange.Smart; contract.Currency = TwsCurrency.Usd; contract.PrimaryExch = TwsExchange.Island; Order order = new Order { Action = "BUY", OrderType = "LMT", TotalQuantity = 1, LmtPrice = 1, }; int orderId = await nextOrderIdController.GetNextValidIdAsync(); bool successfullyPlaced = await orderPlacementController.PlaceOrderAsync(orderId, contract, order); Thread.Sleep(1000); // TWS takes some time to put the order in the portfolio. Wait for it. var openOrders = await twsOpenOrdersController.RequestOpenOrders(); openOrders.Count.Should().BeGreaterOrEqualTo(1); Thread.Sleep(5005); var openOrders2 = await twsOpenOrdersController.RequestOpenOrders(); openOrders2.Count.Should().BeGreaterOrEqualTo(1); }
public async Task TwsExecutionController_Should_ReturnExecutions() { TwsObjectFactory twsObjectFactory = new TwsObjectFactory(); TwsConnectionController connectionController = new TwsConnectionController(twsObjectFactory.ClientSocket, twsObjectFactory.TwsCallbackHandler, "localhost", 7462, 1); ITwsNextOrderIdController nextOrderIdController = new TwsNextOrderIdController(twsObjectFactory.ClientSocket, twsObjectFactory.TwsCallbackHandler); TwsOrderPlacementController orderPlacementController = new TwsOrderPlacementController(twsObjectFactory.ClientSocket, twsObjectFactory.TwsCallbackHandler); TwsRequestIdGenerator twsRequestIdGenerator = new TwsRequestIdGenerator(); TwsExecutionController executionController = new TwsExecutionController(twsObjectFactory.ClientSocket, twsObjectFactory.TwsCallbackHandler, twsRequestIdGenerator); await connectionController.EnsureConnectedAsync(); // Create a position Contract contract = new Contract(); contract.SecType = TwsContractSecType.Future; contract.Symbol = TwsSymbol.Dax; contract.Exchange = TwsExchange.Dtb; contract.Currency = TwsCurrency.Eur; contract.Multiplier = "25"; contract.LastTradeDateOrContractMonth = "201809"; Order order = new Order { Action = "BUY", OrderType = "MKT", TotalQuantity = 1 }; int orderId = await nextOrderIdController.GetNextValidIdAsync(); bool successfullyPlaced = await orderPlacementController.PlaceOrderAsync(orderId, contract, order); Thread.Sleep(1000); // TWS takes some time to put the order in the portfolio. Wait for it. // Call List <ExecutionDetailsEventArgs> executionDetailEvents = await executionController.RequestExecutions(); // Assert executionDetailEvents.Count.Should().BeGreaterOrEqualTo(0); // Tear down await connectionController.DisconnectAsync(); }
public async Task Should_GetOptionsContracts() { TwsObjectFactory twsObjectFactory = new TwsObjectFactory(); TwsRequestIdGenerator twsRequestIdGenerator = new TwsRequestIdGenerator(); TwsConnectionController connectionController = new TwsConnectionController(twsObjectFactory.ClientSocket, twsObjectFactory.TwsCallbackHandler, "localhost", 7462, 1); TwsSecurityDefinitionOptionParametersController securityDefinitionController = new TwsSecurityDefinitionOptionParametersController(twsObjectFactory.ClientSocket, twsObjectFactory.TwsCallbackHandler, twsRequestIdGenerator); TwsContractDetailsController twsContractDetailsController = new TwsContractDetailsController(twsObjectFactory.ClientSocket, twsObjectFactory.TwsCallbackHandler, twsRequestIdGenerator); await connectionController.EnsureConnectedAsync(); Contract contract = new Contract { SecType = TwsContractSecType.Stock, Symbol = "MSFT", Exchange = TwsExchange.Smart, }; // Get the contract details of the STOCK so that you can find the underlying security ID, required for the security definitions call. var contractDetails = await twsContractDetailsController.GetContractAsync(contract); var securityDefinitions = await securityDefinitionController.RequestSecurityDefinitionOptionParameters("MSFT", "", "STK", contractDetails.First().Contract.ConId); securityDefinitions.Count.Should().BeGreaterThan(1); ////// If you want, you can request the contract details from this info or get historical data for it ////Contract option = new Contract() ////{ //// SecType = TwsContractSecType.Option, //// Symbol = "MSFT", //// Exchange = "SMART", //// Strike = 150, //// LastTradeDateOrContractMonth = securityDefinitions[0].Expirations.First(), // March 27, 20 //// Right = "C", //// Multiplier = securityDefinitions[0].Multiplier, //// Currency = TwsCurrency.Usd, ////}; ////var optionContractDetails = await twsContractDetailsController.GetContractAsync(option); ////var queryTime = DateTime.Now; ////List<HistoricalDataEventArgs> historicalDataEvents = await twsHistoricalDataController.GetHistoricalDataAsync(option, queryTime, TwsDuration.OneMonth, TwsBarSizeSetting.OneMinute, TwsHistoricalDataRequestType.Trades); }