/// <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; } }
/// <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); }
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; } } } }