예제 #1
0
        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);
            }
        }
예제 #2
0
        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);
            }
        }
예제 #3
0
        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);
        }