/// <summary>
        /// Create or Update DailyPlay for trade idea
        /// </summary>
        public void AddOrUpdate(TradeIdea tradeIdea)
        {
            DateTime date = tradeIdea.DateOfScan.Date;

            DailyPlay dailyPlay = GetByDate(date);

            if (dailyPlay != null)
            {
                dailyPlay.Price          = tradeIdea.Price;
                dailyPlay.MasterSecurity = tradeIdea.MasterSecurity;
                Update(dailyPlay);
            }
            else
            {
                dailyPlay = new DailyPlay
                {
                    Price          = tradeIdea.Price,
                    SecurityCode   = tradeIdea.MasterSecurity.SecurityCode,
                    MasterSecurity = tradeIdea.MasterSecurity,
                    Date           = date
                };
                Add(dailyPlay);
            }
        }
        private Tuple <TradeIdea, TradeIdeaLog> GenerateTradeIdeaForLatestDate(List <Signal> signals, HistoricalData historicalData)
        {
            Tuple <TradeIdea, TradeIdeaLog> result;

            DateTime date = historicalData.LatestDate;

            //TODO: should we remove this at all? now delayed
            //SupportAndResistance sr = _algoService.GetSupportAndResistance(historicalData, expandedQuote.Last);
            TradeIdeasGeneratorArgument args = TradeIdeasGeneratorArgument.Create(signals, historicalData /*, sr*/);

            double marketCap = 0;
            //if (quote != null)
            //{
            //    marketCap = quote.MarketCapitalization ?? 0;
            //}

            TradeIdeaLog tradeIdeaLog = new TradeIdeaLog(historicalData.SecurityCode, args, date);
            List <TradeIdeaRuleWrapper> generatedTradeIdeas = GenerateTradeIdeas(args, tradeIdeaLog);

            Signal syrahSentiment = signals
                                    .ForIndicator(TradeIdeasGeneratorArgument.LongTermSentimentForDependencies)
                                    .FirstOrDefault(s => s.Date == date);
            int?syrahSentimentLongTerm = syrahSentiment == null
                ? null
                : (int?)syrahSentiment.Value;

            syrahSentiment = signals
                             .ForIndicator(TradeIdeasGeneratorArgument.ShortTermSentimentForDependencies)
                             .FirstOrDefault(s => s.Date == date);
            int?syrahSentimentShortTerm = syrahSentiment == null
                ? null
                : (int?)syrahSentiment.Value;

            double lastPrice = historicalData.Close.Last();

            string companyName = historicalData.SecurityCode;

            if (generatedTradeIdeas != null && generatedTradeIdeas.Any())
            {
                TradeIdea tradeIdea = new TradeIdea
                {
                    DailyPlay               = false,
                    DateOfScan              = date,
                    MarketCap               = marketCap,
                    Price                   = lastPrice,
                    StockCode               = historicalData.SecurityCode,
                    CompanyName             = companyName,
                    SyrahSentimentValue     = syrahSentimentLongTerm,
                    SyrahSentimentShortTerm = syrahSentimentShortTerm,
                    RuleMatch               = generatedTradeIdeas.Select(item => item.Rule).ToList(),
                    RulesWithLogs           = generatedTradeIdeas
                };

                result = Tuple.Create(tradeIdea, tradeIdeaLog);
            }
            else
            {
                result = Tuple.Create((TradeIdea)null, tradeIdeaLog);
            }

            return(result);
        }
Exemple #3
0
 public static void SetDateOfScan(this TradeIdea tradeIdea, DateTime date)
 {
     tradeIdea.DateOfScan      = new DateTime(date.Year, date.Month, date.Day, 0, 0, 0, DateTimeKind.Utc);
     tradeIdea.DateOfScanTicks = Convert.ToInt32(tradeIdea.DateOfScan.Ticks / Precision);
 }
Exemple #4
0
 public void SaveTradeIdea(TradeIdea tradeIdea)
 {
     throw new NotImplementedException();
 }