@page @model SalesAnalyzer @{ ViewData["Title"] = ""; } @section Styles { }
@{ string totalCurrentValueString = Model.totalCurrentValue.ToString("#,#0.00000000", new System.Globalization.CultureInfo("en-US")); if (Model.totalCurrentValue > 100) { totalCurrentValueString = Math.Round(Model.totalCurrentValue, 2).ToString("#,#0.00", new System.Globalization.CultureInfo("en-US")); } }
Total Account Value:   @totalCurrentValueString @Model.Summary.MainMarket Starting Value:   @Model.PTMagicConfiguration.GeneralSettings.Application.StartBalance   @Model.Summary.MainMarket

Cumulative Profits

@if (Model.PTData.SellLog.Count == 0) {

No Sales!

Sorry, but your Profit Trailer did not sell anything so far. Please wait for the bot to have at least one sale and you will start seeing data in here.

} else {

Sales Analysis

@{ double totalProfit = 0; if (Model.PTData.Properties.Shorting) { totalProfit = Model.PTData.SellLog.Sum(s => s.Profit * (-1)); } else { totalProfit = Model.PTData.SellLog.Sum(s => s.Profit); } double totalProfitFiat = Math.Round(totalProfit * Model.Summary.MainMarketPrice, 2); double percentGain = Math.Round(totalProfit / Model.PTMagicConfiguration.GeneralSettings.Application.StartBalance * 100, 2); double avgDailyGain = Model.DailyGains.Values.Average(dg => dg); double avgMonthlyGain = Model.MonthlyGains.Values.Average(dg => dg); string percentGainText = percentGain.ToString("#,#0.00", new System.Globalization.CultureInfo("en-US")) + "%"; if (Model.PTData.TransactionData.Transactions.Count > 0) { percentGainText = ""; } }
Total AVG/Day AVG/Month
Sales @Model.PTData.SellLog.Count @Math.Round((double)Model.PTData.SellLog.Count / (double)Model.PTData.SellLog.GroupBy(d => d.SoldDate.Date).ToList().Count, 2).ToString("#,#0.00", new System.Globalization.CultureInfo("en-US")) @Math.Round((double)Model.PTData.SellLog.Count / (double)Model.PTData.SellLog.GroupBy(d => d.SoldDate.Date.ToString("yyyy-MM")).ToList().Count, 2).ToString("#,#0.00", new System.Globalization.CultureInfo("en-US"))
Profit @totalProfit.ToString("#,#0.00000000", new System.Globalization.CultureInfo("en-US")) @Math.Round(totalProfit / (double)Model.PTData.SellLog.GroupBy(d => d.SoldDate.Date).ToList().Count, 8).ToString("#,#0.00000000", new System.Globalization.CultureInfo("en-US")) @Math.Round(totalProfit / (double)Model.PTData.SellLog.GroupBy(d => d.SoldDate.Date.ToString("yyyy-MM")).ToList().Count, 8).ToString("#,#0.00000000", new System.Globalization.CultureInfo("en-US"))
Profit USD @Html.Raw(Model.MainFiatCurrencySymbol + totalProfitFiat.ToString("#,#0.00", new System.Globalization.CultureInfo("en-US"))) @Html.Raw(Model.MainFiatCurrencySymbol + Math.Round(totalProfitFiat / (double)Model.PTData.SellLog.GroupBy(d => d.SoldDate.Date).ToList().Count, 8).ToString("#,#0.00", new System.Globalization.CultureInfo("en-US"))) @Html.Raw(Model.MainFiatCurrencySymbol + Math.Round(totalProfitFiat / (double)Model.PTData.SellLog.GroupBy(d => d.SoldDate.Date.ToString("yyyy-MM")).ToList().Count, 8).ToString("#,#0.00", new System.Globalization.CultureInfo("en-US")))
% Gain @Html.Raw(percentGainText) @avgDailyGain.ToString("#,#0.00", new System.Globalization.CultureInfo("en-US"))% @avgMonthlyGain.ToString("#,#0.00", new System.Globalization.CultureInfo("en-US"))%
@{ double currentTotalBalance = Model.totalCurrentValue; double estimatedBalance1Month = Math.Round(currentTotalBalance * Math.Pow((1 + (avgDailyGain / 100)), 30.0), 8); double estimatedBalance3Months = Math.Round(currentTotalBalance * Math.Pow((1 + (avgDailyGain / 100)), 90.0), 8); double estimatedBalance6Months = Math.Round(currentTotalBalance * Math.Pow((1 + (avgDailyGain / 100)), 180.0), 8); double estimatedBalance1Year = Math.Round(currentTotalBalance * Math.Pow((1 + (avgDailyGain / 100)), 365.0), 8); }

Balance Prediction

Est. Balance Est. @Model.Summary.MainFiatCurrency Value Est. Gain
1 month @estimatedBalance1Month.ToString("#,#0.00000000", new System.Globalization.CultureInfo("en-US")) @Html.Raw(Model.MainFiatCurrencySymbol + Math.Round(estimatedBalance1Month * Model.Summary.MainMarketPrice, 2).ToString("#,#0.00", new System.Globalization.CultureInfo("en-US"))) @Math.Round((estimatedBalance1Month - currentTotalBalance) / currentTotalBalance * 100, 2).ToString("#,#0.00", new System.Globalization.CultureInfo("en-US"))%
3 months @estimatedBalance3Months.ToString("#,#0.00000000", new System.Globalization.CultureInfo("en-US")) @Html.Raw(Model.MainFiatCurrencySymbol + Math.Round(estimatedBalance3Months * Model.Summary.MainMarketPrice, 2).ToString("#,#0.00", new System.Globalization.CultureInfo("en-US"))) @Math.Round((estimatedBalance3Months - currentTotalBalance) / currentTotalBalance * 100, 2).ToString("#,#0.00", new System.Globalization.CultureInfo("en-US"))%
6 months @estimatedBalance6Months.ToString("#,#0.00000000", new System.Globalization.CultureInfo("en-US")) @Html.Raw(Model.MainFiatCurrencySymbol + Math.Round(estimatedBalance6Months * Model.Summary.MainMarketPrice, 2).ToString("#,#0.00", new System.Globalization.CultureInfo("en-US"))) @Math.Round((estimatedBalance6Months - currentTotalBalance) / currentTotalBalance * 100, 2).ToString("#,#0.00", new System.Globalization.CultureInfo("en-US"))%
1 year @estimatedBalance1Year.ToString("#,#0.00000000", new System.Globalization.CultureInfo("en-US")) @Html.Raw(Model.MainFiatCurrencySymbol + Math.Round(estimatedBalance1Year * Model.Summary.MainMarketPrice, 2).ToString("#,#0.00", new System.Globalization.CultureInfo("en-US"))) @Math.Round((estimatedBalance1Year - currentTotalBalance) / currentTotalBalance * 100, 2).ToString("#,#0.00", new System.Globalization.CultureInfo("en-US"))%

Last @Model.PTMagicConfiguration.GeneralSettings.Monitor.MaxDailySummaries days

@for (DateTime salesDate = Model.DateTimeNow.DateTime.Date; salesDate >= Model.DateTimeNow.DateTime.AddDays(-Model.PTMagicConfiguration.GeneralSettings.Monitor.MaxDailySummaries) && salesDate >= Model.MinSellLogDate; salesDate = salesDate.AddDays(-1)) { List salesDateSales = Model.PTData.SellLog.FindAll(sl => sl.SoldDate.Date == salesDate); double salesDateProfit = 0; if (Model.PTData.Properties.Shorting) { salesDateProfit = salesDateSales.Sum(sl => sl.Profit * (-1)); } else { salesDateProfit = salesDateSales.Sum(sl => sl.Profit); } double salesDateProfitFiat = Math.Round(salesDateProfit * Model.Summary.MainMarketPrice, 2); double salesDateStartBalance = Model.PTData.GetSnapshotBalance(salesDate); double salesDateGain = Math.Round(salesDateProfit / salesDateStartBalance * 100, 2); }
Day Sales Profit @Model.Summary.MainMarket Profit @Model.Summary.MainFiatCurrency % Gain
@salesDate.ToShortDateString() @salesDateSales.Count @salesDateProfit.ToString("#,#0.00000000", new System.Globalization.CultureInfo("en-US")) @Html.Raw(Model.MainFiatCurrencySymbol + salesDateProfitFiat.ToString("#,#0.00", new System.Globalization.CultureInfo("en-US"))) @salesDateGain.ToString("#,#0.00", new System.Globalization.CultureInfo("en-US"))%

Last @Model.PTMagicConfiguration.GeneralSettings.Monitor.MaxMonthlySummaries months

@{ DateTime minSellLogMonthDate = new DateTime(Model.MinSellLogDate.Year, Model.MinSellLogDate.Month, 1).Date; DateTime salesMonthStartDate = new DateTime(Model.DateTimeNow.DateTime.Year, Model.DateTimeNow.DateTime.Month, 1).Date; } @for (DateTime salesMonthDate = salesMonthStartDate.Date; salesMonthDate >= Model.DateTimeNow.DateTime.AddMonths(-Model.PTMagicConfiguration.GeneralSettings.Monitor.MaxMonthlySummaries) && salesMonthDate >= minSellLogMonthDate; salesMonthDate = salesMonthDate.AddMonths(-1)) { List salesMonthSales = Model.PTData.SellLog.FindAll(sl => sl.SoldDate.Date.Month == salesMonthDate.Month && sl.SoldDate.Date.Year == salesMonthDate.Year); double salesDateProfit = 0; if (Model.PTData.Properties.Shorting) { salesDateProfit = salesMonthSales.Sum(sl => sl.Profit * (-1)); } else { salesDateProfit = salesMonthSales.Sum(sl => sl.Profit); } double salesDateProfitFiat = Math.Round(salesDateProfit * Model.Summary.MainMarketPrice, 2); double salesDateStartBalance = Model.PTData.GetSnapshotBalance(salesMonthDate); double salesDateGain = Math.Round(salesDateProfit / salesDateStartBalance * 100, 2); double salesDateAVGDailyGain = 0; double monthDailyProfit = 0; int days = 0; for (int d = 1; d <= DateTime.DaysInMonth(salesMonthDate.Year, salesMonthDate.Month); d++) { DateTime monthDay = salesMonthDate.AddDays(-salesMonthDate.Day + d); if (monthDay <= Model.DateTimeNow) { days++; List monthDaySales = Model.PTData.SellLog.FindAll(sl => sl.SoldDate.Date == monthDay.Date); double monthDayProfit = 0; if (Model.PTData.Properties.Shorting) { monthDayProfit = monthDaySales.Sum(sl => sl.Profit * (-1)); } else { monthDayProfit = monthDaySales.Sum(sl => sl.Profit); } double monthDayStartBalance = Model.PTData.GetSnapshotBalance(monthDay); monthDailyProfit += Math.Round(monthDayProfit / monthDayStartBalance * 100, 2); } } salesDateAVGDailyGain = Math.Round(monthDailyProfit / days, 2); }
Month Sales Profit @Model.Summary.MainMarket Profit @Model.Summary.MainFiatCurrency % Gain AVG %/Day
@salesMonthDate.ToString("MMMM", new System.Globalization.CultureInfo("en-US")) @salesMonthSales.Count @salesDateProfit.ToString("#,#0.00000000", new System.Globalization.CultureInfo("en-US")) @Html.Raw(Model.MainFiatCurrencySymbol + salesDateProfitFiat.ToString("#,#0.00", new System.Globalization.CultureInfo("en-US"))) @salesDateGain.ToString("#,#0.00", new System.Globalization.CultureInfo("en-US"))% @salesDateAVGDailyGain.ToString("#,#0.00", new System.Globalization.CultureInfo("en-US"))%

Top @Model.PTMagicConfiguration.GeneralSettings.Monitor.MaxTopMarkets Sales Market Analysis

@{ var topMarkets = Model.PTData.SellLog.GroupBy(m => m.Market).Select(mg => mg.Sum(m => m.Profit)); if (Model.PTData.Properties.Shorting) { topMarkets = Model.PTData.SellLog.GroupBy(m => m.Market).Select(mg => mg.Sum(m => m.Profit) * (-1)); } int marketRank = 0; } @foreach (KeyValuePair marketData in Model.TopMarkets) { marketRank++; int trades = Model.PTData.SellLog.FindAll(m => m.Market == marketData.Key).Count; double profitFiat = Math.Round(marketData.Value * Model.Summary.MainMarketPrice, 2); double profitFiatPerTrade = Math.Round(profitFiat / trades, 2); }
Rank Market Sales Profit @Model.Summary.MainMarket Profit @Model.Summary.MainFiatCurrency Profit @Model.Summary.MainFiatCurrency/Trade Profit %/Trade
@marketRank @marketData.Key @trades @marketData.Value.ToString("#,#0.00000000", new System.Globalization.CultureInfo("en-US")) @profitFiat.ToString("#,#0.00", new System.Globalization.CultureInfo("en-US")) @Model.Summary.MainFiatCurrency @profitFiatPerTrade.ToString("#,#0.00", new System.Globalization.CultureInfo("en-US")) @Model.Summary.MainFiatCurrency @Model.PTData.SellLog.FindAll(m => m.Market == marketData.Key).Average(p => p.ProfitPercent).ToString("#,#0.00", new System.Globalization.CultureInfo("en-US"))%
} @section Scripts { }