public void ClientCancelsLimitOrder() { OrderStatus status = OrderStatus.New; var manualResetEvent = new ManualResetEvent(false); var ib = new InteractiveBrokersBrokerage(); ib.Connect(); ib.OrderEvent += (sender, args) => { status = args.Status; manualResetEvent.Set(); }; // try to sell a single share at a ridiculous price, we'll cancel this later var order = new Order("AAPL", SecurityType.Equity, -1, OrderType.Limit, DateTime.UtcNow, 100000); ib.PlaceOrder(order); manualResetEvent.WaitOne(2500); ib.CancelOrder(order); manualResetEvent.Reset(); manualResetEvent.WaitOne(2500); Assert.AreEqual(OrderStatus.Canceled, status); }
public void InitializeBrokerage() { InteractiveBrokersGatewayRunner.Start(Config.Get("ib-controller-dir"), Config.Get("ib-tws-dir"), Config.Get("ib-user-name"), Config.Get("ib-password"), Config.GetBool("ib-use-tws") ); // grabs account info from configuration _interactiveBrokersBrokerage = new InteractiveBrokersBrokerage(new OrderProvider(_orders), new SecurityProvider()); _interactiveBrokersBrokerage.Connect(); }
public void InitializeBrokerage() { InteractiveBrokersGatewayRunner.Start(Config.Get("ib-controller-dir"), Config.Get("ib-tws-dir"), Config.Get("ib-user-name"), Config.Get("ib-password"), Config.Get("ib-trading-mode"), Config.GetBool("ib-use-tws") ); // grabs account info from configuration var securityProvider = new SecurityProvider(); securityProvider[Symbols.USDJPY] = new Security(SecurityExchangeHours.AlwaysOpen(TimeZones.NewYork), new SubscriptionDataConfig(typeof(TradeBar), Symbols.USDJPY, Resolution.Minute, TimeZones.NewYork, TimeZones.NewYork, false, false, false), new Cash(CashBook.AccountCurrency, 0, 1m), SymbolProperties.GetDefault(CashBook.AccountCurrency)); _interactiveBrokersBrokerage = new InteractiveBrokersBrokerage(new OrderProvider(_orders), securityProvider); _interactiveBrokersBrokerage.Connect(); }
public void GetsTickData() { InteractiveBrokersGatewayRunner.StartFromConfiguration(); var ib = new InteractiveBrokersBrokerage(new OrderProvider()); ib.Connect(); ib.Subscribe(null, new List<Symbol> {Symbols.USDJPY, Symbols.EURGBP}); Thread.Sleep(1000); for (int i = 0; i < 10; i++) { foreach (var tick in ib.GetNextTicks()) { Console.WriteLine("{0}: {1} - {2} @ {3}", tick.Time, tick.Symbol, tick.Price, ((Tick)tick).Quantity); } } InteractiveBrokersGatewayRunner.Stop(); }
public void ClientPlacesLimitOrder() { bool orderFilled = false; var manualResetEvent = new ManualResetEvent(false); var ib = new InteractiveBrokersBrokerage(); ib.Connect(); decimal aapl = 100m; decimal delta = 85.0m; // if we can't get a price then make the delta huge ib.OrderEvent += (sender, args) => { orderFilled = true; aapl = args.FillPrice; delta = 0.02m; manualResetEvent.Set(); }; // get the current market price, couldn't get RequestMarketData to fire tick events int id = 0; ib.PlaceOrder(new Order("AAPL", SecurityType.Equity, 1, OrderType.Market, DateTime.UtcNow) { Id = ++id }); manualResetEvent.WaitOne(2000); manualResetEvent.Reset(); // make a box around the current price +- a little const int quantity = 1; var order = new Order("AAPL", SecurityType.Equity, +quantity, OrderType.Limit, DateTime.Now, aapl - delta) {Id = ++id}; ib.PlaceOrder(order); ib.PlaceOrder(new Order("AAPL", SecurityType.Equity, -quantity, OrderType.Limit, DateTime.Now, aapl + delta) {Id = ++id}); manualResetEvent.WaitOne(1000); var orderFromIB = AssertOrderOpened(orderFilled, ib, order); Assert.AreEqual(OrderType.Limit, orderFromIB.Type); }
public void GetsTickData() { InteractiveBrokersGatewayRunner.StartFromConfiguration(); var ib = new InteractiveBrokersBrokerage(new OrderMapping()); ib.Connect(); ib.Subscribe(null, new Dictionary<SecurityType, List<string>> { {SecurityType.Forex, new List<string>{"USDJPY", "EURGBP"}} }); Thread.Sleep(1000); for (int i = 0; i < 10; i++) { foreach (var tick in ib.GetNextTicks()) { Console.WriteLine("{0}: {1} - {2} @ {3}", tick.Time, tick.Symbol, tick.Price, ((Tick)tick).Quantity); } } InteractiveBrokersGatewayRunner.Stop(); }
public void ClientConnects() { var ib = new InteractiveBrokersBrokerage(); ib.Connect(); }
public void ClientSellsMarketOrder() { bool orderFilled = false; var manualResetEvent = new ManualResetEvent(false); var ib = new InteractiveBrokersBrokerage(); ib.Connect(); ib.OrderEvent += (sender, args) => { orderFilled = true; manualResetEvent.Set(); }; // sell a single share var order = new Order("AAPL", SecurityType.Equity, -1, OrderType.Market, DateTime.UtcNow); ib.PlaceOrder(order); manualResetEvent.WaitOne(2500); var orderFromIB = AssertOrderOpened(orderFilled, ib, order); Assert.AreEqual(OrderType.Market, orderFromIB.Type); }
public void ClientPlacesMarketOrder() { bool orderFilled = false; var manualResetEvent = new ManualResetEvent(false); var ib = new InteractiveBrokersBrokerage(); ib.Connect(); ib.Client.RequestOpenOrders(); ib.OrderEvent += (sender, args) => { orderFilled = true; manualResetEvent.Set(); }; const int buyQuantity = 1; //ib.PlaceOrder(new Order("AAPL", SecurityType.Equity, buyQuantity, OrderType.Market, DateTime.Now)); var order = new Order("AAPL", SecurityType.Equity, buyQuantity, OrderType.Market, DateTime.Now); ib.PlaceOrder(order); manualResetEvent.WaitOne(2500); var orderFromIB = AssertOrderOpened(orderFilled, ib, order); Assert.AreEqual(OrderType.Market, orderFromIB.Type); }