Example #1
0
        public static List <SummaryStats> SummaryProfitLoss(List <Trade> Trades, Period Period)
        {
            var TradeList_Stats           = new List <Trade>();
            List <SummaryStats> statsList = new List <SummaryStats>();

            if (TradeList_Stats.Count == 0)
            {
                foreach (Trade t in Trades)
                {
                    if (t.RunningProfit != 0)
                    {
                        TradeList_Stats.Add(t);
                    }
                }
            }

            try
            {
                #region Weekly

                if (Period == Period.Weekly)
                {
                    var weekly = from q in TradeList_Stats
                                 group q by new
                    {
                        Y = q.TimeStamp.Year,
                        M = q.TimeStamp.Month,
                        W = Math.Floor((decimal)q.TimeStamp.DayOfYear / 7) + 1,
                        //D=(DateTime)q.TimeStamp
                    }
                    into FGroup
                    orderby FGroup.Key.Y, FGroup.Key.M, FGroup.Key.W
                        select new
                    {
                        Year           = FGroup.Key.Y,
                        Month          = FGroup.Key.M,
                        Week           = FGroup.Key.W,
                        Count          = FGroup.Count(z => z.Reason != Trade.Trigger.None),
                        FirstTradeDate = FGroup.First().TimeStamp,
                        LastTradeDate  = FGroup.Last().TimeStamp,
                        AvPrice        = (double)FGroup.Where(z => z.Reason == Trade.Trigger.CloseShort || z.Reason == Trade.Trigger.CloseLong)
                                         .Average(t => t.RunningProfit),
                        SumPrice = (int)FGroup.Where(z => z.Reason == Trade.Trigger.CloseShort || z.Reason == Trade.Trigger.CloseLong)
                                   .Sum(t => t.RunningProfit),
                        marketmovement = (FGroup.Last().CurrentPrice) - (FGroup.First().CurrentPrice),
                        Prices         = FGroup.Select(z => z.CurrentPrice),
                    };

                    foreach (var v in weekly)
                    {
                        SummaryStats stat = new SummaryStats();
                        stat.Detail            = "Weekly Profit and Loss Summary";
                        stat.Period            = Period;
                        stat.Year              = (int)v.Year;
                        stat.Month             = (int)v.Month;
                        stat.Week              = (int)v.Week;
                        stat.Count             = (int)v.Count;
                        stat.Sum               = (int)v.SumPrice;
                        stat.Average           = (double)v.AvPrice;
                        stat.FirstTrade        = v.FirstTradeDate;
                        stat.LastTrade         = v.LastTradeDate;
                        stat.MarketMovement    = v.marketmovement;
                        stat.StandardDeviation = StandardDeviation(v.Prices.ToList());
                        statsList.Add(stat);

                        //    Debug.WriteLine(v.Year + "   " + v.Month + "  " + v.Week + "  " + v.Count + "  " + v.SumPrice + "  " + v.AvPrice);
                    }
                }

                #endregion

                #region Fortnight

                if (Period == Period.TwoWeekly)
                {
                    var fortnight = from q in TradeList_Stats
                                    group q by new
                    {
                        Y = q.TimeStamp.Year,
                        M = q.TimeStamp.Month,
                        W = q.TimeStamp.Day <= 15 ? 1 : 2,
                        //D=(DateTime)q.TimeStamp
                    }
                    into FGroup
                    orderby FGroup.Key.Y, FGroup.Key.M, FGroup.Key.W
                        select new
                    {
                        Year           = FGroup.Key.Y,
                        Month          = FGroup.Key.M,
                        Week           = FGroup.Key.W,
                        Count          = FGroup.Count(z => z.Reason != Trade.Trigger.None),
                        FirstTradeDate = FGroup.First().TimeStamp,
                        LastTradeDate  = FGroup.Last().TimeStamp,
                        AvPrice        = (double)FGroup.Where(z => z.Reason == Trade.Trigger.CloseShort || z.Reason == Trade.Trigger.CloseLong)
                                         .Average(t => t.RunningProfit),
                        SumPrice = (int)FGroup.Where(z => z.Reason == Trade.Trigger.CloseShort || z.Reason == Trade.Trigger.CloseLong)
                                   .Sum(t => t.RunningProfit),
                        marketmovement = (FGroup.Last().CurrentPrice) - (FGroup.First().CurrentPrice),
                        Prices         = FGroup.Select(z => z.CurrentPrice),
                    };

                    foreach (var v in fortnight)
                    {
                        SummaryStats stat = new SummaryStats();
                        stat.Detail            = "Fortnightly Profit and Loss Summary";
                        stat.Period            = Period;
                        stat.Year              = (int)v.Year;
                        stat.Month             = (int)v.Month;
                        stat.Week              = (int)v.Week;
                        stat.Count             = (int)v.Count;
                        stat.Sum               = (int)v.SumPrice;
                        stat.Average           = (double)v.AvPrice;
                        stat.FirstTrade        = v.FirstTradeDate;
                        stat.LastTrade         = v.LastTradeDate;
                        stat.MarketMovement    = v.marketmovement;
                        stat.StandardDeviation = StandardDeviation(v.Prices.ToList());
                        statsList.Add(stat);
                        // Debug.WriteLine(v.Year + "   " + v.Month + "  " + v.Week + "  " + v.Count + "  " + v.SumPrice + "  " + v.AvPrice);
                    }
                }

                #endregion

                #region Monthly

                if (Period == Period.Monthly)
                {
                    var monthly = from q in TradeList_Stats
                                  group q by new
                    {
                        Y = q.TimeStamp.Year,
                        M = q.TimeStamp.Month,

                        //D=(DateTime)q.TimeStamp
                    }
                    into FGroup
                    orderby FGroup.Key.Y, FGroup.Key.M
                        select new
                    {
                        Year           = FGroup.Key.Y,
                        Month          = FGroup.Key.M,
                        FirstTradeDate = FGroup.First().TimeStamp,
                        LastTradeDate  = FGroup.Last().TimeStamp,
                        Count          = FGroup.Count(z => z.Reason != Trade.Trigger.None),
                        AvPrice        = (double)FGroup.Where(z => z.Reason == Trade.Trigger.CloseShort || z.Reason == Trade.Trigger.CloseLong)
                                         .Average(t => t.RunningProfit),
                        SumPrice = (int)FGroup.Where(z => z.Reason == Trade.Trigger.CloseShort || z.Reason == Trade.Trigger.CloseLong)
                                   .Sum(t => t.RunningProfit),
                        marketmovement = (FGroup.Last().CurrentPrice) - (FGroup.First().CurrentPrice),
                        Prices         = FGroup.Select(z => z.CurrentPrice),
                    };

                    foreach (var v in monthly)
                    {
                        SummaryStats stat = new SummaryStats();
                        stat.Detail            = "Monthly Profit and Loss Summary";
                        stat.Period            = Period;
                        stat.Year              = (int)v.Year;
                        stat.Month             = (int)v.Month;
                        stat.Week              = 0;
                        stat.Count             = (int)v.Count;
                        stat.Sum               = (int)v.SumPrice;
                        stat.Average           = (double)v.AvPrice;
                        stat.FirstTrade        = v.FirstTradeDate;
                        stat.LastTrade         = v.LastTradeDate;
                        stat.MarketMovement    = v.marketmovement;
                        stat.StandardDeviation = StandardDeviation(v.Prices.ToList());
                        statsList.Add(stat);
                        //  Debug.WriteLine(v.Year + "   " + v.Month + "  " + v.Count + "  " + v.SumPrice + "  " + v.AvPrice);
                    }
                }
                #endregion
            }
            catch { return(statsList); }
            return(statsList);
        }
        private void PopulateStatBox(SummaryStats Stats)
        {
            statsListView.Items.Clear();

            ListViewItem n = new ListViewItem("Total Profit");
            n.SubItems.Add(Stats.TotalProfit.ToString());
            statsListView.Items.Add(n);

            ListViewItem n1 = new ListViewItem("Trade Count");
            n1.SubItems.Add(Stats.TradeCount.ToString());
            statsListView.Items.Add(n1);

            ListViewItem n2 = new ListViewItem("Total avg Profit");
            n2.SubItems.Add(Stats.Total_Avg_PL.ToString());
            statsListView.Items.Add(n2);

            ListViewItem n3 = new ListViewItem("Win Trades");
            n3.SubItems.Add(Stats.Pct_Prof.ToString());
            statsListView.Items.Add(n3);

            ListViewItem n4 = new ListViewItem("Loss Trades");
            n4.SubItems.Add(Stats.Pct_Loss.ToString());
            statsListView.Items.Add(n4);
        }
Example #3
0
        public List <CompletedTrade> CalcExpandedTradeStats(List <CompletedTrade> Trades)
        {
            double totalProfit = 0;
            double tradeCount  = Trades.Count;
            double prof_count  = 0;
            double loss_count  = 0;
            double prof_sum    = 0;
            double loss_sum    = 0;



            foreach (var t in Trades)
            {
                t.OpenTrade.Extention.newTotalProfit = totalProfit;

                if (t.CloseTrade.Reason == Trade.Trigger.CloseLong)
                {
                    double prof = (t.CloseTrade.TradedPrice - t.OpenTrade.TradedPrice) * t.OpenTrade.Extention.OrderVol;
                    t.CloseTrade.Extention.newRunningProf = prof;
                    totalProfit += prof;
                    t.CloseTrade.Extention.newTotalProfit = totalProfit;
                    if (prof > 0)
                    {
                        prof_sum += prof;
                        prof_count++;
                    }
                    else
                    {
                        loss_sum += prof;
                        loss_count++;
                    }
                }

                if (t.CloseTrade.Reason == Trade.Trigger.CloseShort)
                {
                    double prof = (t.OpenTrade.TradedPrice - t.CloseTrade.TradedPrice) * t.OpenTrade.Extention.OrderVol;
                    t.CloseTrade.Extention.newRunningProf = prof;
                    totalProfit += prof;
                    t.CloseTrade.Extention.newTotalProfit = totalProfit;
                    if (prof > 0)
                    {
                        prof_sum += prof;
                        prof_count++;
                    }
                    else
                    {
                        loss_sum += prof;
                        loss_count++;
                    }
                }
            }

            decimal avg_pl     = (decimal)Math.Round((totalProfit / tradeCount), 5);
            decimal loss_pct   = (decimal)Math.Round((loss_count / tradeCount) * 100, 2);
            decimal prof_pct   = (decimal)Math.Round((prof_count / tradeCount) * 100, 2);
            decimal pl_ratio   = (decimal)Math.Round((prof_sum / loss_sum), 2);
            decimal avg_profit = (decimal)Math.Round((prof_count / prof_sum), 2);
            decimal avg_loss   = (decimal)Math.Round((loss_count / loss_sum), 2);

            SummaryStats s = new SummaryStats()
            {
                TotalProfit  = totalProfit,
                TradeCount   = tradeCount,
                Total_Avg_PL = avg_pl,
                Pct_Prof     = prof_pct,
                Pct_Loss     = loss_pct,
                Avg_Loss     = avg_loss,
                Avg_Prof     = avg_profit,
            };

            try
            {
                StatsCalculatedEvent sc = new StatsCalculatedEvent();
                sc.SumStats = s;
                OnStatsCaculated(this, sc);
            }
            catch
            {
            }
            return(Trades);
        }
Example #4
0
        public List <Trade> CalcBasicTradeStats(List <Trade> Trades)
        {
            double totalProfit = 0;
            double tradeCount  = 0;
            double prof_count  = 0;
            double loss_count  = 0;
            double prof_sum    = 0;
            double loss_sum    = 0;


            for (int x = 1; x < Trades.Count; x++)
            {
                if (Trades[x].TradeTriggerGeneral == Trade.Trigger.Close)
                {
                    totalProfit += Trades[x].RunningProfit;
                    tradeCount++;

                    if (Trades[x].RunningProfit <= 0)
                    {
                        loss_count++;
                        loss_sum += Trades[x].RunningProfit;
                    }

                    if (Trades[x].RunningProfit > 0)
                    {
                        prof_count++;
                        prof_sum += Trades[x].RunningProfit;
                    }

                    Trades[x].TotalPL    = totalProfit;
                    Trades[x].TradeCount = (int)tradeCount;
                }

                if (Trades[x].Reason == Trade.Trigger.OpenLong || Trades[x].Reason == Trade.Trigger.OpenShort)
                {
                    Trades[x].TotalPL = totalProfit;
                }
            }

            decimal avg_pl     = (decimal)Math.Round((totalProfit / tradeCount), 5);
            decimal loss_pct   = (decimal)Math.Round((loss_count / tradeCount) * 100, 2);
            decimal prof_pct   = (decimal)Math.Round((prof_count / tradeCount) * 100, 2);
            decimal pl_ratio   = (decimal)Math.Round((prof_sum / loss_sum), 2);
            decimal avg_profit = (decimal)Math.Round((prof_count / prof_sum), 2);
            decimal avg_loss   = (decimal)Math.Round((loss_count / loss_sum), 2);

            SummaryStats s = new SummaryStats()
            {
                TotalProfit  = totalProfit,
                TradeCount   = tradeCount,
                Total_Avg_PL = avg_pl,
                Pct_Prof     = prof_pct,
                Pct_Loss     = loss_pct,
                Avg_Loss     = avg_loss,
                Avg_Prof     = avg_profit,
            };

            try
            {
                StatsCalculatedEvent sc = new StatsCalculatedEvent();
                sc.SumStats = s;
                OnStatsCaculated(this, sc);
            }
            catch
            {
            }
            return(Trades);
        }
        public static List<SummaryStats> SummaryProfitLoss(List<Trade> Trades, Period Period)
        {

            var TradeList_Stats = new List<Trade>();
            List<SummaryStats> statsList = new List<SummaryStats>();
            if (TradeList_Stats.Count == 0)
                foreach (Trade t in Trades) if (t.RunningProfit != 0) TradeList_Stats.Add(t);

            try
            {

                #region Weekly

                if (Period == Period.Weekly)
                {
                    var weekly = from q in TradeList_Stats
                                 group q by new
                                 {
                                     Y = q.TimeStamp.Year,
                                     M = q.TimeStamp.Month,
                                     W = Math.Floor((decimal)q.TimeStamp.DayOfYear / 7) + 1,
                                     //D=(DateTime)q.TimeStamp
                                 }
                                     into FGroup
                                     orderby FGroup.Key.Y, FGroup.Key.M, FGroup.Key.W
                                     select new
                                     {
                                         Year = FGroup.Key.Y,
                                         Month = FGroup.Key.M,
                                         Week = FGroup.Key.W,
                                         Count = FGroup.Count(z => z.Reason != Trade.Trigger.None),
                                         FirstTradeDate = FGroup.First().TimeStamp,
                                         LastTradeDate = FGroup.Last().TimeStamp,
                                         AvPrice = (double)FGroup.Where(z => z.Reason == Trade.Trigger.CloseShort || z.Reason == Trade.Trigger.CloseLong)
                                          .Average(t => t.RunningProfit),
                                         SumPrice = (int)FGroup.Where(z => z.Reason == Trade.Trigger.CloseShort || z.Reason == Trade.Trigger.CloseLong)
                                         .Sum(t => t.RunningProfit),
                                         marketmovement = (FGroup.Last().CurrentPrice) - (FGroup.First().CurrentPrice),
                                         Prices = FGroup.Select(z => z.CurrentPrice),

                                     };

                    foreach (var v in weekly)
                    {
                        SummaryStats stat = new SummaryStats();
                        stat.Detail = "Weekly Profit and Loss Summary";
                        stat.Period = Period;
                        stat.Year = (int)v.Year;
                        stat.Month = (int)v.Month;
                        stat.Week = (int)v.Week;
                        stat.Count = (int)v.Count;
                        stat.Sum = (int)v.SumPrice;
                        stat.Average = (double)v.AvPrice;
                        stat.FirstTrade = v.FirstTradeDate;
                        stat.LastTrade = v.LastTradeDate;
                        stat.MarketMovement = v.marketmovement;
                        stat.StandardDeviation = StandardDeviation(v.Prices.ToList());
                        statsList.Add(stat);

                        //    Debug.WriteLine(v.Year + "   " + v.Month + "  " + v.Week + "  " + v.Count + "  " + v.SumPrice + "  " + v.AvPrice);
                    }

                }

                #endregion

                #region Fortnight

                if (Period == Period.TwoWeekly)
                {

                    var fortnight = from q in TradeList_Stats
                                    group q by new
                                    {
                                        Y = q.TimeStamp.Year,
                                        M = q.TimeStamp.Month,
                                        W = q.TimeStamp.Day <= 15 ? 1 : 2,
                                        //D=(DateTime)q.TimeStamp
                                    }
                                        into FGroup
                                        orderby FGroup.Key.Y, FGroup.Key.M, FGroup.Key.W
                                        select new
                                        {
                                            Year = FGroup.Key.Y,
                                            Month = FGroup.Key.M,
                                            Week = FGroup.Key.W,
                                            Count = FGroup.Count(z => z.Reason != Trade.Trigger.None),
                                            FirstTradeDate = FGroup.First().TimeStamp,
                                            LastTradeDate = FGroup.Last().TimeStamp,
                                            AvPrice = (double)FGroup.Where(z => z.Reason == Trade.Trigger.CloseShort || z.Reason == Trade.Trigger.CloseLong)
                                          .Average(t => t.RunningProfit),
                                            SumPrice = (int)FGroup.Where(z => z.Reason == Trade.Trigger.CloseShort || z.Reason == Trade.Trigger.CloseLong)
                                            .Sum(t => t.RunningProfit),
                                            marketmovement = (FGroup.Last().CurrentPrice) - (FGroup.First().CurrentPrice),
                                            Prices = FGroup.Select(z => z.CurrentPrice),
                                        };

                    foreach (var v in fortnight)
                    {
                        SummaryStats stat = new SummaryStats();
                        stat.Detail = "Fortnightly Profit and Loss Summary";
                        stat.Period = Period;
                        stat.Year = (int)v.Year;
                        stat.Month = (int)v.Month;
                        stat.Week = (int)v.Week;
                        stat.Count = (int)v.Count;
                        stat.Sum = (int)v.SumPrice;
                        stat.Average = (double)v.AvPrice;
                        stat.FirstTrade = v.FirstTradeDate;
                        stat.LastTrade = v.LastTradeDate;
                        stat.MarketMovement = v.marketmovement;
                        stat.StandardDeviation = StandardDeviation(v.Prices.ToList());
                        statsList.Add(stat);
                        // Debug.WriteLine(v.Year + "   " + v.Month + "  " + v.Week + "  " + v.Count + "  " + v.SumPrice + "  " + v.AvPrice);
                    }


                }

                #endregion

                #region Monthly

                if (Period == Period.Monthly)
                {
                    var monthly = from q in TradeList_Stats
                                  group q by new
                                  {
                                      Y = q.TimeStamp.Year,
                                      M = q.TimeStamp.Month,

                                      //D=(DateTime)q.TimeStamp
                                  }
                                      into FGroup
                                      orderby FGroup.Key.Y, FGroup.Key.M
                                      select new
                                      {
                                          Year = FGroup.Key.Y,
                                          Month = FGroup.Key.M,
                                          FirstTradeDate = FGroup.First().TimeStamp,
                                          LastTradeDate = FGroup.Last().TimeStamp,
                                          Count = FGroup.Count(z => z.Reason != Trade.Trigger.None),
                                          AvPrice = (double)FGroup.Where(z => z.Reason == Trade.Trigger.CloseShort || z.Reason == Trade.Trigger.CloseLong)
                                          .Average(t => t.RunningProfit),
                                          SumPrice = (int)FGroup.Where(z => z.Reason == Trade.Trigger.CloseShort || z.Reason == Trade.Trigger.CloseLong)
                                          .Sum(t => t.RunningProfit),
                                          marketmovement = (FGroup.Last().CurrentPrice) - (FGroup.First().CurrentPrice),
                                          Prices = FGroup.Select(z => z.CurrentPrice),
                                      };

                    foreach (var v in monthly)
                    {
                        SummaryStats stat = new SummaryStats();
                        stat.Detail = "Monthly Profit and Loss Summary";
                        stat.Period = Period;
                        stat.Year = (int)v.Year;
                        stat.Month = (int)v.Month;
                        stat.Week = 0;
                        stat.Count = (int)v.Count;
                        stat.Sum = (int)v.SumPrice;
                        stat.Average = (double)v.AvPrice;
                        stat.FirstTrade = v.FirstTradeDate;
                        stat.LastTrade = v.LastTradeDate;
                        stat.MarketMovement = v.marketmovement;
                        stat.StandardDeviation = StandardDeviation(v.Prices.ToList());
                        statsList.Add(stat);
                        //  Debug.WriteLine(v.Year + "   " + v.Month + "  " + v.Count + "  " + v.SumPrice + "  " + v.AvPrice);
                    }
                }
                #endregion
            }
            catch { return statsList; }
            return statsList;

        }
        public List<CompletedTrade> CalcExpandedTradeStats(List<CompletedTrade> Trades)
        {
            double totalProfit = 0;
            double tradeCount = Trades.Count;
            double prof_count = 0;
            double loss_count = 0;
            double prof_sum = 0;
            double loss_sum = 0;



            foreach (var t in Trades)
            {
                t.OpenTrade.Extention.newTotalProfit = totalProfit;

                if (t.CloseTrade.Reason == Trade.Trigger.CloseLong)
                {
                    double prof = (t.CloseTrade.TradedPrice - t.OpenTrade.TradedPrice) * t.OpenTrade.Extention.OrderVol;
                    t.CloseTrade.Extention.newRunningProf = prof;
                    totalProfit += prof;
                    t.CloseTrade.Extention.newTotalProfit = totalProfit;
                    if (prof > 0)
                    {
                        prof_sum += prof;
                        prof_count++;
                    }
                    else
                    {
                        loss_sum += prof;
                        loss_count++;
                    }
                }

                if (t.CloseTrade.Reason == Trade.Trigger.CloseShort)
                {
                    double prof = (t.OpenTrade.TradedPrice - t.CloseTrade.TradedPrice) * t.OpenTrade.Extention.OrderVol;
                    t.CloseTrade.Extention.newRunningProf = prof;
                    totalProfit += prof;
                    t.CloseTrade.Extention.newTotalProfit = totalProfit;
                    if (prof > 0)
                    {
                        prof_sum += prof;
                        prof_count++;
                    }
                    else
                    {
                        loss_sum += prof;
                        loss_count++;
                    }
                }
            }

            decimal avg_pl = (decimal)Math.Round((totalProfit / tradeCount), 5);
            decimal loss_pct = (decimal)Math.Round((loss_count / tradeCount) * 100, 2);
            decimal prof_pct = (decimal)Math.Round((prof_count / tradeCount) * 100, 2);
            decimal pl_ratio = (decimal)Math.Round((prof_sum / loss_sum), 2);
            decimal avg_profit = (decimal)Math.Round((prof_count / prof_sum), 2);
            decimal avg_loss = (decimal)Math.Round((loss_count / loss_sum), 2);

            SummaryStats s = new SummaryStats()
            {
                TotalProfit = totalProfit,
                TradeCount = tradeCount,
                Total_Avg_PL = avg_pl,
                Pct_Prof = prof_pct,
                Pct_Loss = loss_pct,
                Avg_Loss = avg_loss,
                Avg_Prof = avg_profit,

            };

            try
            {
                StatsCalculatedEvent sc = new StatsCalculatedEvent();
                sc.SumStats = s;
                OnStatsCaculated(this, sc);
            }
            catch
            {
            }
            return Trades;
        }
        public List<Trade> CalcBasicTradeStats(List<Trade> Trades)
        {

            double totalProfit = 0;
            double tradeCount = 0;
            double prof_count = 0;
            double loss_count = 0;
            double prof_sum = 0;
            double loss_sum = 0;


            for (int x = 1; x < Trades.Count; x++)
            {

                if (Trades[x].TradeTriggerGeneral == Trade.Trigger.Close)
                {
                    totalProfit += Trades[x].RunningProfit;
                    tradeCount++;

                    if (Trades[x].RunningProfit <= 0)
                    {
                        loss_count++;
                        loss_sum += Trades[x].RunningProfit;
                    }

                    if (Trades[x].RunningProfit > 0)
                    {
                        prof_count++;
                        prof_sum += Trades[x].RunningProfit;
                    }

                    Trades[x].TotalPL = totalProfit;
                    Trades[x].TradeCount = (int)tradeCount;
                }

                if (Trades[x].Reason == Trade.Trigger.OpenLong || Trades[x].Reason == Trade.Trigger.OpenShort) Trades[x].TotalPL = totalProfit;
            }

            decimal avg_pl = (decimal)Math.Round((totalProfit / tradeCount), 5);
            decimal loss_pct = (decimal)Math.Round((loss_count / tradeCount) * 100, 2);
            decimal prof_pct = (decimal)Math.Round((prof_count / tradeCount) * 100, 2);
            decimal pl_ratio = (decimal)Math.Round((prof_sum / loss_sum), 2);
            decimal avg_profit = (decimal)Math.Round((prof_count / prof_sum), 2);
            decimal avg_loss = (decimal)Math.Round((loss_count / loss_sum), 2);

            SummaryStats s = new SummaryStats()
            {
                TotalProfit = totalProfit,
                TradeCount = tradeCount,
                Total_Avg_PL = avg_pl,
                Pct_Prof = prof_pct,
                Pct_Loss = loss_pct,
                Avg_Loss = avg_loss,
                Avg_Prof = avg_profit,

            };

            try
            {
                StatsCalculatedEvent sc = new StatsCalculatedEvent();
                sc.SumStats = s;
                OnStatsCaculated(this, sc);
            }
            catch
            {
            }
            return Trades;
        }