示例#1
0
        /// <summary>
        /// check how oftne we have to send the notification throuight the caller ( investor), e.g: once, unlimited,
        /// we can improve this by adding some more meta data in the notification interface like data, time, week,...
        /// then we could manage all diffrent senarioes like once per day m once per week , or all other combination that investor will inject by the time that
        /// set the investor in the stocket object or later attch new one...
        /// </summary>
        /// <param name="investor"></param>
        /// <param name="tradeTrigger"></param>
        /// <returns></returns>
        private bool hasPermissionToSendNotification(IInvestor investor, ITradeTrigger tradeTrigger)
        {
            if (tradeTrigger.NotificationType == ReceiveNotificationType.Unlimited)
            {
                return(true);
            }
            else if (tradeTrigger.NotificationType == ReceiveNotificationType.Once)
            {
                if (NotificationHistory.Where(h => h.Investor == investor.InvestorName && h.TradeTriggerType == tradeTrigger.TradeTriggerType && h.TriggerName == tradeTrigger.TriggerName).FirstOrDefault() == null)
                {
                    return(true);
                }
            }

            return(false);
        }
示例#2
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="tradeTrigger"></param>
        /// <returns></returns>
        TradeTriggerType getTriggerAction(ITradeTrigger tradeTrigger)
        {
            double priceMin = tradeTrigger.TargetPrice - tradeTrigger.FluctuationsRate;
            double priceMax = tradeTrigger.TargetPrice + +tradeTrigger.FluctuationsRate;

            TradeTriggerType tradeTriggerAction = TradeTriggerType.None;

            if (tradeTrigger.Sensitivity == StockSensitivityType.MeetExactTargetPrice && tradeTrigger.TargetPrice == _price)
            {
                tradeTriggerAction = getTradeTriggerActionByPriceDirection(tradeTrigger);
            }
            else if (tradeTrigger.Sensitivity == StockSensitivityType.MeetAroundTargetPrice &&
                     (priceMin <= _price && _price <= priceMax))
            {
                tradeTriggerAction = getTradeTriggerActionByPriceDirection(tradeTrigger);
            }

            return(tradeTriggerAction);
        }
示例#3
0
        /// <summary>
        /// update the history of hit through the caller ( investors)
        /// </summary>
        /// <param name="investor"></param>
        /// <param name="sellingStock"></param>
        /// <param name="tradeTrigger"></param>
        private void updateNotificationHistory(IInvestor investor, TradeTriggerType tradeTriggerType, ITradeTrigger tradeTrigger)
        {
            var histoiry = NotificationHistory.Where(h => h.Investor == investor.InvestorName && h.TradeTriggerType == tradeTriggerType && h.TriggerName == tradeTrigger.TriggerName).FirstOrDefault();

            if (histoiry == null)
            {
                NotificationHistory.Add(new Notification()
                {
                    Investor = investor.InvestorName, TradeTriggerType = tradeTriggerType, TriggerName = tradeTrigger.TriggerName, Counter = 1
                });
            }
            else
            {
                histoiry.Counter = histoiry.Counter + 1;
            }
        }
示例#4
0
 public bool RemoveTrigger(ITradeTrigger tradeTrigger)
 {
     _tradTriggers.Remove(tradeTrigger);
     return(true);
 }
示例#5
0
 //
 public bool AddTrigger(ITradeTrigger tradeTrigger)
 {
     _tradTriggers.Add(tradeTrigger);
     return(true);
 }
示例#6
0
 private void printMessage(IStock stock, ITradeTrigger tradeTrigger)
 {
     Console.WriteLine("Notified ({0}) {1} - {2} of {3}'s change to {4:C} ==>{5}",
                       tradeTrigger.TradeTriggerType, _name, tradeTrigger.TriggerName, stock.Symbol, stock.Price, DateTime.Now.ToLocalTime());
 }
示例#7
0
 /// <summary>
 /// only notify by Stock once the buying action meet
 /// </summary>
 /// <param name="stock"></param>
 /// <param name="tradeTrigger"></param>
 public void Buy(IStock stock, ITradeTrigger tradeTrigger)
 {
     printMessage(stock, tradeTrigger);
 }
示例#8
0
 /// <summary>
 ///  Constructor to add only one trigger
 /// </summary>
 /// <param name="name">investor name</param>
 /// <param name="tradeTrigger">how to get notification(rule)</param>
 public Investor(string name, ITradeTrigger tradeTrigger)
 {
     this._name = name;
     this._tradTriggers.Add(tradeTrigger);
 }