コード例 #1
0
ファイル: Stock.cs プロジェクト: izadpoor/stockmonitoring
        /// <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;
            }
        }
コード例 #2
0
ファイル: Stock.cs プロジェクト: izadpoor/stockmonitoring
        /// <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
ファイル: Stock.cs プロジェクト: izadpoor/stockmonitoring
        public void Notify()
        {
            foreach (IInvestor investor in _investors)
            {
                foreach (ITradeTrigger tradeTrigger in investor.TradeTriggers)
                {
                    TradeTriggerType tradeTriggerAction = getTriggerAction(tradeTrigger);

                    if (tradeTriggerAction != TradeTriggerType.None && !hasPermissionToSendNotification(investor, tradeTrigger))
                    {
                        tradeTriggerAction = TradeTriggerType.None;
                    }

                    switch (tradeTriggerAction)
                    {
                    case TradeTriggerType.SellingStock:
                        investor.Sell(this, tradeTrigger);
                        updateNotificationHistory(investor, TradeTriggerType.SellingStock, tradeTrigger);
                        break;

                    case TradeTriggerType.BuyingStock:
                        investor.Buy(this, tradeTrigger);
                        updateNotificationHistory(investor, TradeTriggerType.BuyingStock, tradeTrigger);
                        break;

                    case TradeTriggerType.GeneralUpdate:
                        investor.Update(this, tradeTrigger);
                        updateNotificationHistory(investor, TradeTriggerType.GeneralUpdate, tradeTrigger);
                        break;

                    default:
                        break;
                    }
                }
            }
        }