Ejemplo n.º 1
0
        public override bool HandleMessage(IMessage message)
        {
            //ForTest:if(UnlTradingData.Margin > 0){ }

            if (base.HandleMessage(message))
            {
                return(true);
            }

            switch (message.APIDataType)
            {
            case EapiDataTypes.AccountSummaryData:
                AccountSummaryData = message as AccountSummaryData;
                return(true);

            case EapiDataTypes.TradingTimeEvent:
                var tradingTimeEvent = (TradingTimeEvent)message;
                try
                {
                    var eventType = tradingTimeEvent.TradingTimeEventType;
                    switch (eventType)
                    {
                    case ETradingTimeEventType.StartTrading:
                        _taskId = UNLManager.AddScheduledTaskOnUnl(TimeSpan.FromSeconds(TRADING_CYCLE_TYME), DoTradingWork, true);
                        break;

                    case ETradingTimeEventType.EndTradingIn30Seconds:
                        break;

                    case ETradingTimeEventType.EndTradingIn60Seconds:
                        break;

                    case ETradingTimeEventType.EndTrading:
                        UNLManager.RemoveScheduledTaskOnUnl(_taskId);
                        break;
                    }
                }
                finally
                {
                    //Propagate by event:
                    OnSendTradingTimeEvent(tradingTimeEvent);
                }

                return(true);

            case EapiDataTypes.BrokerConnectionStatus:
                var connectionStatusMessage = (BrokerConnectionStatusMessage)message;
                if (connectionStatusMessage.AfterConnectionToApiWrapper)
                {
                    DoWorkAfterConnection();
                }
                return(true);

            case EapiDataTypes.TransactionData:
                //Create the adequate UnlOptins object and save it in db:
                CreateOrUpdateUnlOption(message as TransactionData);
                break;
            }
            return(false);
        }
        public OptionNegotiator(ITradingApi apiWrapper, UNLManager unlManager, bool simulatorAccount = false)
        {
            APIWrapper   = apiWrapper;
            UnlManager   = unlManager;
            MinPriceStep = AllConfigurations.AllConfigurationsObject.Trading.MinPriceStep;

            SetSimulatorAccountParameters(simulatorAccount);
        }
Ejemplo n.º 3
0
 public TradingManager(ManagedSecurity managedSecurity, UNLManager unlManager) : base(
         managedSecurity, unlManager)
 {
     OrderManager     = unlManager.OrdersManager;
     _pendingCloseDic = new Dictionary <string, OrderData>();
     _pendingSellDic  = new Dictionary <string, OrderData>();
     OrderManager.OrderTradingNegotioationWasTerminated += OrderManager_OrderTradingNegotioationWasTerminated;
 }
Ejemplo n.º 4
0
        /// <summary>
        /// Waiting for notifications from the OptionNegotiator and sell ATM option.
        /// </summary>
        /// <param name="orderStatus"></param>
        /// <param name="orderId"></param>
        private void OrdersManager_OrderTradingNegotioationWasTerminated(OrderStatus orderStatus, string orderId)
        {
            if (_shutDownOptimizerReceived)
            {
                _pendingSellDic.Clear();
                _pendingCloseDic.Clear();
            }
            if (_pendingSellDic.ContainsKey(orderId))
            {
                HandleSellOrders(orderStatus, orderId);
                return;
            }

            if (!_pendingCloseDic.ContainsKey(orderId))
            {
                return;
            }

            var orderData = _pendingCloseDic[orderId];

            _pendingCloseDic.Remove(orderId);
            if (orderStatus == OrderStatus.Filled)
            {
                //Sell ATM Position:
                Logger.Info($"Position Closed successfully: {orderData}");
                SellATMPosition(orderData);
            }
            else if (orderStatus == OrderStatus.NegotiationFailed)
            {
                Logger.Info($"Negotiation Failed: {orderData}");
                _notAllPositionClosed = true;
            }
            else
            {
                Logger.Info($"Close position Failed ({orderStatus}): {orderData}");
                _notAllPositionClosed = true;
            }
            //Keep waiting for finish all pending close positions:
            if (_pendingCloseDic.Count != 0)
            {
                return;
            }

            //Unregister to the event:
            UNLManager.OrdersManager.OrderTradingNegotioationWasTerminated -=
                OrdersManager_OrderTradingNegotioationWasTerminated;

            //Resend for buy the positions that still not closed
            if (_notAllPositionClosed)
            {
                UNLManager.AddScheduledTaskOnUnl(TimeSpan.FromMilliseconds(100), () => { OptimizePositions(); });
            }
            else if (_pendingSellDic.Count == 0)
            {
                //Send notification that mission is accomplished:
                OnMissionAccomplished();
            }
        }
Ejemplo n.º 5
0
 protected UnlMemberBaseManager(ManagedSecurity managedSecurity, UNLManager unlManager)
 {
     ManagedSecurity  = managedSecurity;
     UNLManager       = unlManager;
     APIWrapper       = unlManager.APIWrapper;
     ConnectionStatus = ConnectionStatus.Disconnected;
     Symbol           = managedSecurity.Symbol;
     UnlTradingData   = unlManager.UnlTradingData;
 }
Ejemplo n.º 6
0
 private void AddTaskForUpdateOptionDataOnPosition()
 {
     //Add the repeated task to start in 10 sec, to let the options manager to load them.
     UNLManager.AddScheduledTaskOnUnl(TimeSpan.FromSeconds(10), () =>
     {
         UNLManager.AddScheduledTaskOnUnl(TimeSpan.FromSeconds(1), AddOrUpdateDataToPosition, true);
         Logger.InfoFormat("{0} PDB start repeated task for add or update options to position objects.", Symbol);
     });
 }
Ejemplo n.º 7
0
        private (List <OptionsPositionData>, bool, bool) PrepareForOptimizationNew()
        {
            //var atmOption = UNLManager.OptionsManager.GetATMOptionData(ExpiryDate, EOptionType.Call);
            //Check for trading time, Don't act if now isn't working time.
            if ((UNLManager.IsNowWorkingTime == false) && (UNLManager.IsSimulatorAccount == false))
            {
                throw new Exception("The operation can't be done now! it can be done only within working time.");
            }

            _notAllPositionClosed = false;

            if (_pendingCloseDic == null)
            {
                _pendingCloseDic = new Dictionary <string, OrderData>();
            }
            else
            {
                _pendingCloseDic.Clear();
            }

            if (_pendingSellDic == null)
            {
                _pendingSellDic = new Dictionary <string, OrderData>();
            }
            else
            {
                _pendingSellDic.Clear();
            }
            List <OptionsPositionData> outLimitList;

            if (!GetOutOfLimitPositions(out outLimitList))
            {
                throw new Exception($"{Symbol}: There is no out of limit Positions!");
            }

            bool doForPutPositions  = UNLManager.OptionsManager.CheckForATMOption(EOptionType.Put, ExpiryDate);
            bool doForCallPositions = UNLManager.OptionsManager.CheckForATMOption(EOptionType.Call, ExpiryDate);

            if (!doForCallPositions && !doForPutPositions)
            {
                throw new Exception("There are no ATM Positions!!");
            }
            //return false;

            //Initialize watchDog: Finish all works immediatly:
            _shutDownTaskId = UNLManager.AddScheduledTaskOnUnl(TimeSpan.FromMinutes(1), ShutDown);

            //Register for done notifications.
            UNLManager.OrdersManager.OrderTradingNegotioationWasTerminated +=
                OrdersManager_OrderTradingNegotioationWasTerminated;
            //var outLimit = (outLimitList: List<OptionsPositionData>, doForPutPositions: bool, doForCallPositions: bool);
            return(outLimitList, doForPutPositions, doForCallPositions);
        }
Ejemplo n.º 8
0
 public PositionsDataBuilder(ManagedSecurity managedSecurity,
                             UNLManager unlManager)
     : base(managedSecurity, unlManager)
 {
     PositionDataDic = new Dictionary <string, OptionsPositionData>();
     OptionsManager  = unlManager.OptionsManager;
     Logger.DebugFormat("{0}.OptionsManager created. Thread name: {1}.", Symbol, Thread.CurrentThread.Name);
     PositionsSummaryData = new PositionsSummaryData();
     if (UnlTradingData != null)
     {
         UnlTradingData.PositionsSummaryData = PositionsSummaryData;
     }
 }
Ejemplo n.º 9
0
 public OptionsManager(ManagedSecurity managedSecurity, UNLManager unlManager) : base(
         managedSecurity, unlManager)
 {
     OptionDataDic = new Dictionary <string, OptionData>();
 }
Ejemplo n.º 10
0
 protected virtual void OnMissionAccomplished()
 {
     UNLManager.RemoveScheduledTaskOnUnl(_shutDownTaskId);
     ShutDown();
     MissionAccomplished?.Invoke(this);
 }
Ejemplo n.º 11
0
 public OptionNegotiator(UNLManager unlManager)
 {
     UnlManager = unlManager;
     APIWrapper = unlManager.APIWrapper;
 }
Ejemplo n.º 12
0
 public TradingTimeManager(ITradingApi apiWrapper, ManagedSecurity managedSecurity, UNLManager unlManager) :
     base(apiWrapper, managedSecurity, unlManager)
 {
 }
Ejemplo n.º 13
0
 public OrdersManager(ManagedSecurity managedSecurity, UNLManager unlManager) : base(managedSecurity, unlManager)
 {
     OrderStatusDataDic  = new Dictionary <string, OrderStatusData>();
     OptionNegotiatorDic = new Dictionary <string, OptionNegotiator>();
 }