private void RadButton2_Click_1(object sender, EventArgs e) { // ConcurrentBag<List<Model.PNL>> consolidated = new ConcurrentBag<List<Model.PNL>>(); try { Parallel.ForEach((radDropDownList1.Items), (x) => { ProgressDelegate myProgres = ShowMyProgress; List <Model.Idea> myideas = Common.GetIdeas(); Model.Idea selectedIdea = myideas.Where(a => a.Name == x.Text).First(); StockOHLC stockOHLC = new StockOHLC(); int year = 2019; //for (int year = 2015; year <= 2019; year++) //{ //Load Data Task <Dictionary <string, List <Model.Candle> > > loadmydata = Task.Run <Dictionary <string, List <Model.Candle> > >(() => stockOHLC.GetOHLC(new DateTime(year, Convert.ToInt32(ddlStartMonth.SelectedItem.Text), Convert.ToInt32(ddlStartDate.SelectedItem.Text)), new DateTime(year + 1, Convert.ToInt32(ddlEndMonth.SelectedItem.Text), Convert.ToInt32(ddlEndDate.SelectedItem.Text)), selectedIdea.Interval, myProgres)); //Apply indicators loadmydata.ContinueWith((t0) => { SetText("Applying indicators"); Task <Dictionary <string, List <Model.Candle> > > withIndicators = Task.Run <Dictionary <string, List <Model.Candle> > >(() => TechnicalIndicators.AddIndicators(t0.Result, selectedIdea.TI, new DateTime(year, Convert.ToInt32(ddlStartMonth.SelectedItem.Text), Convert.ToInt32(ddlStartDate.SelectedItem.Text)), new DateTime(Convert.ToInt32(ddlEndYear.SelectedItem.Text), Convert.ToInt32(ddlEndMonth.SelectedItem.Text), Convert.ToInt32(ddlEndDate.SelectedItem.Text)))); Task getTradingStocks = withIndicators.ContinueWith((t1) => { Task <Dictionary <Guid, Model.StrategyModel> > getTradedStocks = Task.Run <Dictionary <Guid, Model.StrategyModel> >(() => stockOHLC.GetTopMostSolidGapOpenerDayWise(t1.Result, selectedIdea, myProgres)); Task tradeMyStocks = getTradedStocks.ContinueWith((t2) => { Task <List <Model.PNL> > calculation = Task <List <Model.PNL> > .Run(() => stockOHLC.TradeStocks(t2.Result, t1.Result, selectedIdea, myProgres)); calculation.ContinueWith((t3) => { consolidated.Add(t3.Result); //SetDataSource(t3.Result); //SetText("Idea ran successfully"); }); }); }); }); //} }); //while(consolidated.Count()< radDropDownList1.Items.Count) //{ // Thread.Sleep(10000); //} } catch (Exception ex) { File.AppendAllText(@"C:\Jai Sri Thakur Ji\Nifty Analysis\errors.txt", Environment.NewLine); File.AppendAllText(@"C:\Jai Sri Thakur Ji\Nifty Analysis\errors.txt", System.Reflection.MethodBase.GetCurrentMethod() + " :- " + ex.Message); File.AppendAllText(@"C:\Jai Sri Thakur Ji\Nifty Analysis\errors.txt", System.Reflection.MethodBase.GetCurrentMethod() + " :- " + ex.StackTrace); File.AppendAllText(@"C:\Jai Sri Thakur Ji\Nifty Analysis\errors.txt", System.Reflection.MethodBase.GetCurrentMethod() + " :- " + ex.InnerException); } }
private void btnLoad_Click(object sender, EventArgs e) { l.Clear(); //rgvStocks.DataSource = null; try { ProgressDelegate myProgres = ShowMyProgress; List <Model.Idea> myideas = null; if (checkBox1.Checked) { myideas = Common.GetIdeas().OrderBy(a => a.runOrder).ToList(); } else { myideas = Common.GetIdeas().Where(a => a.Name == radDropDownList1.SelectedItem.Text).ToList(); } List <Task> allTask = new List <Task>(); //Model.Idea selectedIdea = myideas.Where(a => a.Name == radDropDownList1.SelectedItem.Text).First(); foreach (var selectedIdea in myideas.OrderBy(a => a.runOrder)) { if (selectedIdea.Name == "Dual_Time_Frame_Momentum") { StockOHLC stockOHLC = new StockOHLC(); //Load Data Task <Dictionary <string, List <Model.Candle> > > loadmydata = Task.Run <Dictionary <string, List <Model.Candle> > >(() => stockOHLC.GetOHLC(new DateTime(Convert.ToInt32(ddlStartYear.SelectedItem.Text), Convert.ToInt32(ddlStartMonth.SelectedItem.Text), Convert.ToInt32(ddlStartDate.SelectedItem.Text)), new DateTime(Convert.ToInt32(ddlEndYear.SelectedItem.Text), Convert.ToInt32(ddlEndMonth.SelectedItem.Text), Convert.ToInt32(ddlEndDate.SelectedItem.Text)), selectedIdea.Interval, myProgres)); allTask.Add(loadmydata); loadmydata.ContinueWith((t0) => { SetText("Applying stochastic indicators to small timeframe"); Task <Dictionary <string, List <Model.Candle> > > withIndicators = Task.Run <Dictionary <string, List <Model.Candle> > >(() => TechnicalIndicators.AddIndicators(t0.Result, selectedIdea.TI, new DateTime(Convert.ToInt32(ddlStartYear.SelectedItem.Text), Convert.ToInt32(ddlStartMonth.SelectedItem.Text), Convert.ToInt32(ddlStartDate.SelectedItem.Text)), new DateTime(Convert.ToInt32(ddlEndYear.SelectedItem.Text), Convert.ToInt32(ddlEndMonth.SelectedItem.Text), Convert.ToInt32(ddlEndDate.SelectedItem.Text)))); withIndicators.ContinueWith((t1) => { Task <Dictionary <string, List <Model.Candle> > > loadmydata2 = Task.Run <Dictionary <string, List <Model.Candle> > >(() => stockOHLC.GetOHLC(new DateTime(Convert.ToInt32(ddlStartYear.SelectedItem.Text), Convert.ToInt32(ddlStartMonth.SelectedItem.Text), Convert.ToInt32(ddlStartDate.SelectedItem.Text)), new DateTime(Convert.ToInt32(ddlEndYear.SelectedItem.Text), Convert.ToInt32(ddlEndMonth.SelectedItem.Text), Convert.ToInt32(ddlEndDate.SelectedItem.Text)), selectedIdea.Interval2, myProgres)); allTask.Add(loadmydata2); loadmydata2.ContinueWith((t2) => { SetText("Applying stochastic indicators to large time frame"); Task <Dictionary <string, List <Model.Candle> > > withIndicators2 = Task.Run <Dictionary <string, List <Model.Candle> > >(() => TechnicalIndicators.AddIndicators(t2.Result, selectedIdea.TI, new DateTime(Convert.ToInt32(ddlStartYear.SelectedItem.Text), Convert.ToInt32(ddlStartMonth.SelectedItem.Text), Convert.ToInt32(ddlStartDate.SelectedItem.Text)), new DateTime(Convert.ToInt32(ddlEndYear.SelectedItem.Text), Convert.ToInt32(ddlEndMonth.SelectedItem.Text), Convert.ToInt32(ddlEndDate.SelectedItem.Text)))); allTask.Add(withIndicators2); withIndicators2.ContinueWith((t3) => { Task <Dictionary <Guid, Model.StrategyModel> > getTradedStocks = Task.Run <Dictionary <Guid, Model.StrategyModel> >(() => stockOHLC.ApplyDualMomentumStrategyModel(DateTime.Now, t1.Result, t3.Result, selectedIdea, myProgres)); allTask.Add(getTradedStocks); Task tradeMyStocks = getTradedStocks.ContinueWith((t4) => { var stocksList = t4.Result; List <PNL> p = new List <PNL>(); foreach (var s in stocksList) { p.Add(new PNL { Stock = s.Value.Stock, Date = s.Value.Date, Direction = Enum.GetName(typeof(Model.Trade), s.Value.Trade) }); } l.Add(new CustomizedPNL { order = selectedIdea.runOrder, selectedIdea = selectedIdea, Strategyoutput = p }); }); }); }); }); }); } else { StockOHLC stockOHLC = new StockOHLC(); //Load Data Task <Dictionary <string, List <Model.Candle> > > loadmydata = Task.Run <Dictionary <string, List <Model.Candle> > >(() => stockOHLC.GetOHLC(new DateTime(Convert.ToInt32(ddlStartYear.SelectedItem.Text), Convert.ToInt32(ddlStartMonth.SelectedItem.Text), Convert.ToInt32(ddlStartDate.SelectedItem.Text)), new DateTime(Convert.ToInt32(ddlEndYear.SelectedItem.Text), Convert.ToInt32(ddlEndMonth.SelectedItem.Text), Convert.ToInt32(ddlEndDate.SelectedItem.Text)), selectedIdea.Interval, myProgres)); allTask.Add(loadmydata); //loadmydata.Wait(); //Apply indicators loadmydata.ContinueWith((t0) => { SetText("Applying indicators"); Task <Dictionary <string, List <Model.Candle> > > withIndicators = Task.Run <Dictionary <string, List <Model.Candle> > >(() => TechnicalIndicators.AddIndicators(t0.Result, selectedIdea.TI, new DateTime(Convert.ToInt32(ddlStartYear.SelectedItem.Text), Convert.ToInt32(ddlStartMonth.SelectedItem.Text), Convert.ToInt32(ddlStartDate.SelectedItem.Text)), new DateTime(Convert.ToInt32(ddlEndYear.SelectedItem.Text), Convert.ToInt32(ddlEndMonth.SelectedItem.Text), Convert.ToInt32(ddlEndDate.SelectedItem.Text)))); allTask.Add(withIndicators); Task getTradingStocks = withIndicators.ContinueWith((t1) => { Task <Dictionary <Guid, Model.StrategyModel> > getTradedStocks = Task.Run <Dictionary <Guid, Model.StrategyModel> >(() => stockOHLC.GetTopMostSolidGapOpenerDayWise(t1.Result, selectedIdea, myProgres)); allTask.Add(getTradedStocks); Task tradeMyStocks = getTradedStocks.ContinueWith((t2) => { Task <List <Model.PNL> > calculation = Task <List <Model.PNL> > .Run(() => stockOHLC.TradeStocks(t2.Result, t1.Result, selectedIdea, myProgres)); allTask.Add(getTradedStocks); calculation.ContinueWith((t3) => { l.Add(new CustomizedPNL { order = selectedIdea.runOrder, selectedIdea = selectedIdea, Strategyoutput = t3.Result }); }); //calculation.Wait(); }); }); }); //loadmydata.Wait(); //Task.WaitAll(); } Task.Factory.ContinueWhenAll(allTask.ToArray(), FinalWork); } } catch (Exception ex) { File.AppendAllText(@"C:\Jai Sri Thakur Ji\Nifty Analysis\errors.txt", Environment.NewLine); File.AppendAllText(@"C:\Jai Sri Thakur Ji\Nifty Analysis\errors.txt", System.Reflection.MethodBase.GetCurrentMethod() + " :- " + ex.Message); File.AppendAllText(@"C:\Jai Sri Thakur Ji\Nifty Analysis\errors.txt", System.Reflection.MethodBase.GetCurrentMethod() + " :- " + ex.StackTrace); File.AppendAllText(@"C:\Jai Sri Thakur Ji\Nifty Analysis\errors.txt", System.Reflection.MethodBase.GetCurrentMethod() + " :- " + ex.InnerException); } }
public static Dictionary <string, List <Candle> > LoadDailyNPivotsDataZerodha(Dictionary <string, List <Candle> > allCandles) { try { Dictionary <string, List <Model.Candle> > loadmydataDaily = new StockOHLC().GetOHLC(DateTime.Now.AddYears(-10), DateTime.Now, 0, null); Dictionary <string, List <Model.Candle> > loadmydata5 = new StockOHLC().GetOHLC(DateTime.Now.AddYears(-10), DateTime.Now, 5, null); Parallel.ForEach(allCandles.Keys, new ParallelOptions { MaxDegreeOfParallelism = 2 }, (s) => { int i = 0; foreach (Candle dr in allCandles[s]) { //if (pivotPoints.Where(a => a.TimeStamp.Date == dr.TimeStamp.Date && a.Stock == dr.Stock).Count() > 0) //{ // dr.dPP = Math.Round(dailyPivot, 2); // dr.dR1 = Math.Round((2 * dailyPivot) - prevDayLow, 2); // dr.dS1 = Math.Round((2 * dailyPivot) - prevDayHigh, 2); // dr.dR2 = Math.Round(dailyPivot + (prevDayHigh - prevDayLow), 2); // dr.dS2 = Math.Round(dailyPivot - (prevDayHigh - prevDayLow), 2); // dr.dR3 = Math.Round(dailyPivot + 2 * (prevDayHigh - prevDayLow), 2); // dr.dS3 = Math.Round(dailyPivot - 2 * (prevDayHigh - prevDayLow), 2); // dr.dClose = prevDayClose; // dr.dHigh = prevDayHigh; // dr.dLow = prevDayLow; // dr.dOpen = prevDayOpen; // dr.yPP = Math.Round(yearPivot, 2); // dr.yR1 = Math.Round((2 * yearPivot) - lastYearLow, 2); // dr.yS1 = Math.Round((2 * yearPivot) - lastYearHigh, 2); // dr.yR2 = Math.Round(yearPivot + (lastYearHigh - lastYearLow), 2); // dr.yS2 = Math.Round(yearPivot - (lastYearHigh - lastYearLow), 2); // dr.yR3 = Math.Round(yearPivot + 2 * (lastYearHigh - lastYearLow), 2); // dr.yS3 = Math.Round(yearPivot - 2 * (lastYearHigh - lastYearLow), 2); // dr.yClose = lastYearClose; // dr.yHigh = lastYearHigh; // dr.yLow = lastYearLow; // dr.yOpen = lastYearOpen; // dr.YearStartDate = loadmydataDaily[s].Where(a => a.TimeStamp.Year == lastYear).OrderBy(a => a.TimeStamp.Date).First().TimeStamp.Date; // dr.YearEndDate = loadmydataDaily[s].Where(a => a.TimeStamp.Year == lastYear).OrderBy(a => a.TimeStamp.Date).Last().TimeStamp.Date; // dr.mPP = Math.Round(monthPivot, 2); // dr.mR1 = Math.Round((2 * monthPivot) - lastMonthLow, 2); // dr.mS1 = Math.Round((2 * monthPivot) - lastMonthHigh, 2); // dr.mR2 = Math.Round(monthPivot + (lastMonthHigh - lastMonthLow), 2); // dr.mS2 = Math.Round(monthPivot - (lastMonthHigh - lastMonthLow), 2); // dr.mR3 = Math.Round(monthPivot + 2 * (lastMonthHigh - lastMonthLow), 2); // dr.mS3 = Math.Round(monthPivot - 2 * (lastMonthHigh - lastMonthLow), 2); // dr.mClose = lastMonthClose; // dr.mHigh = lastMonthHigh; // dr.mLow = lastMonthLow; // dr.mOpen = lastMonthOpen; // dr.MonthStartDate = loadmydataDaily[s].Where(a => a.TimeStamp.Year == currentYear && a.TimeStamp.Month == lastMonth).OrderBy(a => a.TimeStamp).First().TimeStamp.Date; // dr.MonthEndDate = loadmydataDaily[s].Where(a => a.TimeStamp.Year == currentYear && a.TimeStamp.Month == lastMonth).OrderBy(a => a.TimeStamp).Last().TimeStamp.Date; // dr.curMonthClose = loadmydataDaily[s].Where(a => a.TimeStamp.Year == currentYear && a.TimeStamp.Month == dr.TimeStamp.Month).OrderBy(a => a.TimeStamp).Last().Close; // dr.curMonthHigh = loadmydataDaily[s].Where(a => a.TimeStamp.Year == currentYear && a.TimeStamp.Month == dr.TimeStamp.Month).Max(a => a.High); // dr.curMonthLow = loadmydataDaily[s].Where(a => a.TimeStamp.Year == currentYear && a.TimeStamp.Month == dr.TimeStamp.Month).Min(a => a.Low); // dr.curMonthOpen = loadmydataDaily[s].Where(a => a.TimeStamp.Year == currentYear && a.TimeStamp.Month == dr.TimeStamp.Month).First().Open; //} Candle dr1 = loadmydataDaily[s].Where(a => a.TimeStamp.Date == dr.TimeStamp.Date).First(); if (true) { DateTime currentDay = dr1.TimeStamp.Date; DateTime prevDate = loadmydataDaily[s].Where(a => a.TimeStamp.Date < currentDay).Last().TimeStamp.Date; Candle prevDayDailyCandle = loadmydataDaily[s].Where(a => a.TimeStamp.Date == prevDate).First(); double prevDayClose = loadmydata5[s].Where(a => a.TimeStamp.Date == prevDate).OrderBy(a => a.TimeStamp).Last().Close; double prevDayOpen = prevDayDailyCandle.Open; double prevDayHigh = prevDayDailyCandle.High; double prevDayLow = prevDayDailyCandle.Low; double dailyPivot = (prevDayClose + prevDayHigh + prevDayLow) / 3; dr.dPP = Math.Round(dailyPivot, 2); dr.dR1 = Math.Round((2 * dailyPivot) - prevDayLow, 2); dr.dS1 = Math.Round((2 * dailyPivot) - prevDayHigh, 2); dr.dR2 = Math.Round(dailyPivot + (prevDayHigh - prevDayLow), 2); dr.dS2 = Math.Round(dailyPivot - (prevDayHigh - prevDayLow), 2); dr.dR3 = Math.Round(dailyPivot + 2 * (prevDayHigh - prevDayLow), 2); dr.dS3 = Math.Round(dailyPivot - 2 * (prevDayHigh - prevDayLow), 2); dr.dClose = prevDayClose; dr.dHigh = prevDayHigh; dr.dLow = prevDayLow; dr.dOpen = prevDayOpen; //pivot calculation for monthly & weekly chart - range is one year int currentYear = dr.TimeStamp.Date.Year; int lastYear = currentYear - 1; if (loadmydata5[s].Where(a => a.TimeStamp.Year == lastYear).Count() > 0) { double lastYearClose = loadmydataDaily[s].Where(a => a.TimeStamp.Year == lastYear).OrderBy(a => a.TimeStamp.Date).Last().Close; double lastYearHigh = loadmydataDaily[s].Where(a => a.TimeStamp.Year == lastYear).Max(a => a.High); double lastYearLow = loadmydataDaily[s].Where(a => a.TimeStamp.Year == lastYear).Min(a => a.Low); double lastYearOpen = loadmydataDaily[s].Where(a => a.TimeStamp.Year == lastYear).First().Open; double yearPivot = (lastYearClose + lastYearHigh + lastYearLow) / 3; dr.yPP = Math.Round(yearPivot, 2); dr.yR1 = Math.Round((2 * yearPivot) - lastYearLow, 2); dr.yS1 = Math.Round((2 * yearPivot) - lastYearHigh, 2); dr.yR2 = Math.Round(yearPivot + (lastYearHigh - lastYearLow), 2); dr.yS2 = Math.Round(yearPivot - (lastYearHigh - lastYearLow), 2); dr.yR3 = Math.Round(yearPivot + 2 * (lastYearHigh - lastYearLow), 2); dr.yS3 = Math.Round(yearPivot - 2 * (lastYearHigh - lastYearLow), 2); dr.yClose = lastYearClose; dr.yHigh = lastYearHigh; dr.yLow = lastYearLow; dr.yOpen = lastYearOpen; dr.YearStartDate = loadmydataDaily[s].Where(a => a.TimeStamp.Year == lastYear).OrderBy(a => a.TimeStamp.Date).First().TimeStamp.Date; dr.YearEndDate = loadmydataDaily[s].Where(a => a.TimeStamp.Year == lastYear).OrderBy(a => a.TimeStamp.Date).Last().TimeStamp.Date; } //pivot calculation for daily chart -range is one month int currentMonth = dr.TimeStamp.Month; int lastMonth = currentMonth - 1; if (lastMonth == 0) { lastMonth = 12; currentYear = currentYear - 1; } if (loadmydataDaily[s].Where(a => a.TimeStamp.Year == currentYear && a.TimeStamp.Month == lastMonth).Count() > 0) { double lastMonthClose = loadmydataDaily[s].Where(a => a.TimeStamp.Year == currentYear && a.TimeStamp.Month == lastMonth).OrderBy(a => a.TimeStamp.Date).Last().Close; double lastMonthHigh = loadmydataDaily[s].Where(a => a.TimeStamp.Year == currentYear && a.TimeStamp.Month == lastMonth).Max(a => a.High); double lastMonthLow = loadmydataDaily[s].Where(a => a.TimeStamp.Year == currentYear && a.TimeStamp.Month == lastMonth).Min(a => a.Low); double lastMonthOpen = loadmydataDaily[s].Where(a => a.TimeStamp.Year == currentYear && a.TimeStamp.Month == lastMonth).First().Open; double monthPivot = (lastMonthClose + lastMonthHigh + lastMonthLow) / 3; dr.mPP = Math.Round(monthPivot, 2); dr.mR1 = Math.Round((2 * monthPivot) - lastMonthLow, 2); dr.mS1 = Math.Round((2 * monthPivot) - lastMonthHigh, 2); dr.mR2 = Math.Round(monthPivot + (lastMonthHigh - lastMonthLow), 2); dr.mS2 = Math.Round(monthPivot - (lastMonthHigh - lastMonthLow), 2); dr.mR3 = Math.Round(monthPivot + 2 * (lastMonthHigh - lastMonthLow), 2); dr.mS3 = Math.Round(monthPivot - 2 * (lastMonthHigh - lastMonthLow), 2); dr.mClose = lastMonthClose; dr.mHigh = lastMonthHigh; dr.mLow = lastMonthLow; dr.mOpen = lastMonthOpen; dr.MonthStartDate = loadmydataDaily[s].Where(a => a.TimeStamp.Year == currentYear && a.TimeStamp.Month == lastMonth).OrderBy(a => a.TimeStamp).First().TimeStamp.Date; dr.MonthEndDate = loadmydataDaily[s].Where(a => a.TimeStamp.Year == currentYear && a.TimeStamp.Month == lastMonth).OrderBy(a => a.TimeStamp).Last().TimeStamp.Date; try { dr.curMonthClose = loadmydataDaily[s].Where(a => a.TimeStamp.Year == currentYear && a.TimeStamp.Month == dr.TimeStamp.Month).OrderBy(a => a.TimeStamp).Last().Close; dr.curMonthHigh = loadmydataDaily[s].Where(a => a.TimeStamp.Year == currentYear && a.TimeStamp.Month == dr.TimeStamp.Month).Max(a => a.High); dr.curMonthLow = loadmydataDaily[s].Where(a => a.TimeStamp.Year == currentYear && a.TimeStamp.Month == dr.TimeStamp.Month).Min(a => a.Low); dr.curMonthOpen = loadmydataDaily[s].Where(a => a.TimeStamp.Year == currentYear && a.TimeStamp.Month == dr.TimeStamp.Month).First().Open; } catch { } } currentYear = dr.TimeStamp.Year; //pivot calculation for 30 Min & 60 Min chart - range is 1 week int curretnWeek = GetWeekOfMonth(dr.TimeStamp.Date); int lastWeek = curretnWeek - 1; if (lastWeek == 0) { if (currentMonth == 1 && curretnWeek == 1) { currentYear = currentYear - 1; currentMonth = 12; curretnWeek = GetWeekOfMonth(new DateTime(currentYear, currentMonth, 27)); } else if (curretnWeek == 1) { currentMonth = 12; curretnWeek = GetWeekOfMonth(new DateTime(currentYear, currentMonth, 27)); } } DateTime thisWeekMonday = dr.TimeStamp.Date.StartOfWeek(DayOfWeek.Monday).AddDays(-7); DateTime thisWeekTuesday = thisWeekMonday.AddDays(1); DateTime thisWeekWednesday = thisWeekMonday.AddDays(2); DateTime thisWeekThursday = thisWeekMonday.AddDays(3); DateTime thisWeekFriday = thisWeekMonday.AddDays(4); List <DateTime> weekDayList = new List <DateTime>(); weekDayList.Add(thisWeekMonday); weekDayList.Add(thisWeekTuesday); weekDayList.Add(thisWeekWednesday); weekDayList.Add(thisWeekThursday); weekDayList.Add(thisWeekFriday); var lstWeekData = loadmydataDaily[s].Where(a => weekDayList.Contains(a.TimeStamp.Date)).OrderBy(a => a.TimeStamp.Date).ToList(); DateTime curWeekMonday = dr.TimeStamp.Date.StartOfWeek(DayOfWeek.Monday); DateTime curWeekTuesday = curWeekMonday.AddDays(1); DateTime curWeekWednesday = curWeekMonday.AddDays(2); DateTime curWeekThursday = curWeekMonday.AddDays(3); DateTime curWeekFriday = curWeekMonday.AddDays(4); List <DateTime> curweekDayList = new List <DateTime>(); curweekDayList.Add(curWeekMonday); curweekDayList.Add(curWeekTuesday); curweekDayList.Add(curWeekWednesday); curweekDayList.Add(curWeekThursday); curweekDayList.Add(curWeekFriday); var curWeekData = loadmydataDaily[s].Where(a => curweekDayList.Contains(a.TimeStamp.Date)).OrderBy(a => a.TimeStamp.Date).ToList(); if (curWeekData.Count() > 0) { dr.curWeekOpen = curWeekData.First().Open; dr.curWeekHigh = curWeekData.Max(a => a.High); dr.curWeekLow = curWeekData.Min(a => a.Low); dr.curWeekClose = curWeekData.Last().Close; } if (lstWeekData.Count() > 0) { double lastWeekclose = lstWeekData.Last().Close; double lastWeekHigh = lstWeekData.Max(a => a.High); double lastWeekLow = lstWeekData.Min(a => a.Low); double lastWeekOpen = lstWeekData.First().Open; double weekPivot = (lastWeekclose + lastWeekHigh + lastWeekLow) / 3; dr.wPP = Math.Round(weekPivot, 2); dr.wR1 = Math.Round((2 * weekPivot) - lastWeekLow, 2); dr.wS1 = Math.Round((2 * weekPivot) - lastWeekHigh, 2); dr.wR2 = Math.Round(weekPivot + (lastWeekHigh - lastWeekLow), 2); dr.wS2 = Math.Round(weekPivot - (lastWeekHigh - lastWeekLow), 2); dr.wR3 = Math.Round(weekPivot + 2 * (lastWeekHigh - lastWeekLow), 2); dr.wS3 = Math.Round(weekPivot - 2 * (lastWeekHigh - lastWeekLow), 2); dr.wClose = lastWeekclose; dr.wHigh = lastWeekHigh; dr.wLow = lastWeekLow; dr.wOpen = lastWeekOpen; dr.WeekStartDate = lstWeekData.First().TimeStamp.Date; dr.WeekEndDate = lstWeekData.Last().TimeStamp.Date; } } i++; //if (pivotPoints.Where(a => a.TimeStamp.Date == dr.TimeStamp.Date && a.Stock == dr.Stock).Count() == 0) //{ // pivotPoints.Add(dr); //} } // assign values here }); } catch (Exception ex) { throw ex; } return(allCandles); }