public void AllowsOneActiveOrderPerSymbol(OrderTestParameters parameters) { // tradier's api gets special with zero holdings crossing in that they need to fill the order // before the next can be submitted, so we just limit this impl to only having on active order // by symbol at a time, new orders will issue cancel commands for the existing order bool orderFilledOrCanceled = false; var order = parameters.CreateLongOrder(1); EventHandler <OrderEvent> brokerageOnOrderStatusChanged = (sender, args) => { // we expect all orders to be cancelled except for market orders, they may fill before the next order is submitted if (args.OrderId == order.Id && args.Status == OrderStatus.Canceled || (order is MarketOrder && args.Status == OrderStatus.Filled)) { orderFilledOrCanceled = true; } }; Brokerage.OrderStatusChanged += brokerageOnOrderStatusChanged; // starting from zero initiate two long orders and see that the first is canceled PlaceOrderWaitForStatus(order, OrderStatus.Submitted); PlaceOrderWaitForStatus(parameters.CreateLongMarketOrder(1)); Brokerage.OrderStatusChanged -= brokerageOnOrderStatusChanged; Assert.IsTrue(orderFilledOrCanceled); }
public void CloseFromLong(OrderTestParameters parameters) { Log.Trace(""); Log.Trace("CLOSE FROM LONG"); Log.Trace(""); // first go long PlaceZerodhaOrderWaitForStatus(parameters.CreateLongMarketOrder(GetDefaultQuantity()), OrderStatus.Filled); // now close it PlaceZerodhaOrderWaitForStatus(parameters.CreateShortOrder(GetDefaultQuantity()), parameters.ExpectedStatus); }
public virtual void ShortFromLong(OrderTestParameters parameters) { Log.Trace(""); Log.Trace("SHORT FROM LONG"); Log.Trace(""); // first go long PlaceZerodhaOrderWaitForStatus(parameters.CreateLongMarketOrder(GetDefaultQuantity())); // now go net short var order = PlaceZerodhaOrderWaitForStatus(parameters.CreateShortOrder(2 * GetDefaultQuantity()), parameters.ExpectedStatus); if (parameters.ModifyUntilFilled) { ModifyOrderUntilFilled(order, parameters); } }
public void AllowsOneActiveOrderPerSymbol(OrderTestParameters parameters) { // tradier's api gets special with zero holdings crossing in that they need to fill the order // before the next can be submitted, so we just limit this impl to only having on active order // by symbol at a time, new orders will issue cancel commands for the existing order bool orderFilledOrCanceled = false; var order = parameters.CreateLongOrder(1); EventHandler<OrderEvent> brokerageOnOrderStatusChanged = (sender, args) => { // we expect all orders to be cancelled except for market orders, they may fill before the next order is submitted if (args.OrderId == order.Id && args.Status == OrderStatus.Canceled || (order is MarketOrder && args.Status == OrderStatus.Filled)) { orderFilledOrCanceled = true; } }; Brokerage.OrderStatusChanged += brokerageOnOrderStatusChanged; // starting from zero initiate two long orders and see that the first is canceled PlaceOrderWaitForStatus(order, OrderStatus.Submitted); PlaceOrderWaitForStatus(parameters.CreateLongMarketOrder(1)); Brokerage.OrderStatusChanged -= brokerageOnOrderStatusChanged; Assert.IsTrue(orderFilledOrCanceled); }