コード例 #1
0
        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);
                }
            }
        }
コード例 #2
0
        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);
        }
コード例 #3
0
 private void TerminateNegotiation()
 {
     UnlManager.RemoveScheduledTaskOnUnl(ScheduledTaskId);
     UnlManager.OrdersManager.SendOrderTaskAccomplished(OrderStatusData.OrderId);
 }
コード例 #4
0
 private void TerminateNegotiation(OrderStatus orderStatus)
 {
     DoTradingWasTerminated = true;
     UnlManager.RemoveScheduledTaskOnUnl(ScheduledTaskId);
     UnlManager.OrdersManager.SendOrderTaskAccomplished(OrderStatusData.OrderId, orderStatus);
 }
コード例 #5
0
 public void UnRegisterForMessage()
 {
     UnlManager.UnRegisterForMessage(this, DataType);
 }