public double SendWhatIfOrder(OptionData optionData, OrderAction orderAction, int quantity) { OptionData = optionData; try { UnlManager.RegisterForMessage(this, EapiDataTypes.OrderStatus); var orderData = new OrderData { OrderType = OrderType.MKT, OrderAction = orderAction, Quantity = quantity, Contract = OptionData.OptionContract, WhatIf = true, }; WhatIfOrderId = APIWrapper.CreateOrder(orderData); orderData.OrderId = WhatIfOrderId; //Put the current thread into waiting state until it receives the signal var isSignaled = _autoResetEvent.WaitOne(TimeSpan.FromSeconds(5)); //Thread.Sleep(5000); if (!isSignaled) { var ex = new Exception("No Answer from TWS. 5 secondfs Timeout!!!"); Logger.Error("No Answer from TWS. 5 secondfs Timeout!!!", ex); throw ex; } if (OrderStatusData.OrderStatus == OrderStatus.Filled) { return(OrderStatusData.Margin); } var ex1 = new Exception("Send WhatIf order failed!!!"); Logger.Error("Send WhatIf order failed!!!", ex1); throw ex1; } finally { UnlManager.UnRegisterForMessage(this, EapiDataTypes.OrderStatus); try { _autoResetEvent.Dispose(); } catch (Exception ex) { Logger.Error("AutoResetEvent faild on Dispose()", ex); } } }
public OrderData StartTradingOption(OptionData optionData, bool sell, int quantity) { if (OptionData != null) { throw new ArgumentException("The OptionNegotiator already has open order!!!"); } OptionData = optionData ?? throw new Exception("The option data not exist!!!"); OrderAction = sell ? OrderAction.SELL : OrderAction.BUY; Quantity = quantity; //InializeTrading: InitializeNegotiationsTradingParameters(); SendWhatIfOrder(CurrentLimitPrice); CreateOrder(CurrentLimitPrice); //Start negotiation proccess: ScheduledTaskId = UnlManager.AddScheduledTaskOnUnl(SuccesiveIntervalTimeSpan, DoTrading, true); return(OrderData); }
private void TerminateNegotiation() { UnlManager.RemoveScheduledTaskOnUnl(ScheduledTaskId); UnlManager.OrdersManager.SendOrderTaskAccomplished(OrderStatusData.OrderId); }
private void TerminateNegotiation(OrderStatus orderStatus) { DoTradingWasTerminated = true; UnlManager.RemoveScheduledTaskOnUnl(ScheduledTaskId); UnlManager.OrdersManager.SendOrderTaskAccomplished(OrderStatusData.OrderId, orderStatus); }
public void UnRegisterForMessage() { UnlManager.UnRegisterForMessage(this, DataType); }