This commit is contained in:
HojouFotytu 2019-03-20 01:13:41 +09:00
parent 9c24a6038e
commit e36fd2ee21
7 changed files with 145 additions and 6 deletions

View File

@ -611,6 +611,13 @@ namespace Core.Helper
return result; return result;
} }
public static string GetMainCurrencySymbol(string tvSymbol)
{
string result = tvSymbol;
return result;
}
public static string GetCurrencySymbol(string code) public static string GetCurrencySymbol(string code)
{ {
string result = code; string result = code;

View File

@ -12,7 +12,97 @@
<div class="row"> <div class="row">
<div class="col-sm-12"> <div class="col-sm-12">
<div class="card-box"> <div class="card-box">
<h4 class="m-t-0 header-title text-center">Current &nbsp; @Model.Summary.MainMarket &nbsp; Price:<text class="text-autocolor">&nbsp; &nbsp; @Html.Raw(Model.MainFiatCurrencySymbol + Model.Summary.MainMarketPrice.ToString("#,#0.00", new System.Globalization.CultureInfo("en-US"))) &nbsp; </text> <small> <i class="fa fa-info-circle text-muted" data-toggle="tooltip" data-placement="top" title="This is the value of your market currency."></i></small></h4> @if (Model.Summary.MainMarket.Equals("USDT", StringComparison.InvariantCultureIgnoreCase) || Model.Summary.MainMarket.Equals("TUSD", StringComparison.InvariantCultureIgnoreCase) || Model.Summary.MainMarket.Equals("USDC", StringComparison.InvariantCultureIgnoreCase) || Model.Summary.MainMarket.Equals("PAX", StringComparison.InvariantCultureIgnoreCase) || Model.Summary.MainMarket.Equals("USD", StringComparison.InvariantCultureIgnoreCase))
{
string TvSymbol = @Core.Helper.SystemHelper.GetMainCurrencySymbol(Model.Summary.MainMarket)+"USD";
<div class="tradingview-widget-container">
<div class="tradingview-widget-container__widget"></div>
<script type="text/javascript" src="https://s3.tradingview.com/external-embedding/embed-widget-mini-symbol-overview.js" async>
{
"symbol": "@Core.Helper.SystemHelper.GetMainCurrencySymbol(@TvSymbol)",
"width": "100%",
"height": "200",
"locale": "en",
"dateRange": "1d",
"colorTheme": "dark",
"trendLineColor": "#37a6ef",
"underLineColor": "rgba(55, 166, 239, 0.15)",
"isTransparent": true,
"autosize": true,
"largeChartUrl": ""
}
</script>
</div>
}
else {
if (Model.PTMagicConfiguration.GeneralSettings.Application.Exchange.Equals("Binance", StringComparison.InvariantCultureIgnoreCase))
{
string TvSymbol = "BINANCE:" + @Core.Helper.SystemHelper.GetMainCurrencySymbol(Model.Summary.MainMarket) + "USDT";
<div class="tradingview-widget-container">
<div class="tradingview-widget-container__widget"></div>
<script type="text/javascript" src="https://s3.tradingview.com/external-embedding/embed-widget-mini-symbol-overview.js" async>
{
"symbol": "@Core.Helper.SystemHelper.GetMainCurrencySymbol(@TvSymbol)",
"width": "100%",
"height": "200",
"locale": "en",
"dateRange": "1d",
"colorTheme": "dark",
"trendLineColor": "#37a6ef",
"underLineColor": "rgba(55, 166, 239, 0.15)",
"isTransparent": true,
"autosize": true,
"largeChartUrl": ""
}
</script>
</div>
}
else
if (Model.PTMagicConfiguration.GeneralSettings.Application.Exchange.Equals("Bittrex", StringComparison.InvariantCultureIgnoreCase)) {
string TvSymbol = "BITTREX:" + @Core.Helper.SystemHelper.GetMainCurrencySymbol(Model.Summary.MainMarket) + "USD";
<div class="tradingview-widget-container">
<div class="tradingview-widget-container__widget"></div>
<script type="text/javascript" src="https://s3.tradingview.com/external-embedding/embed-widget-mini-symbol-overview.js" async>
{
"symbol": "@Core.Helper.SystemHelper.GetMainCurrencySymbol(@TvSymbol)",
"width": "100%",
"height": "100%",
"locale": "en",
"dateRange": "1d",
"colorTheme": "dark",
"trendLineColor": "#37a6ef",
"underLineColor": "rgba(55, 166, 239, 0.15)",
"isTransparent": true,
"autosize": true,
"largeChartUrl": ""
}
</script>
</div>
}
else
{
string TvSymbol = "Poloniex:" + @Core.Helper.SystemHelper.GetMainCurrencySymbol(Model.Summary.MainMarket) + "USDT";
<div class="tradingview-widget-container">
<div class="tradingview-widget-container__widget"></div>
<script type="text/javascript" src="https://s3.tradingview.com/external-embedding/embed-widget-mini-symbol-overview.js" async>
{
"symbol": "@Core.Helper.SystemHelper.GetMainCurrencySymbol(@TvSymbol)",
"width": "100%",
"height": "100%",
"locale": "en",
"dateRange": "1d",
"colorTheme": "dark",
"trendLineColor": "#37a6ef",
"underLineColor": "rgba(55, 166, 239, 0.15)",
"isTransparent": true,
"autosize": true,
"largeChartUrl": ""
}
</script>
</div>
}
}
</div> </div>
</div> </div>
</div> </div>
@ -21,7 +111,6 @@
<div class="col-sm-12"> <div class="col-sm-12">
<div class="card-box"> <div class="card-box">
<h4 class="m-t-0 m-b-20 header-title"><b>Market Trend Averages</b></h4> <h4 class="m-t-0 m-b-20 header-title"><b>Market Trend Averages</b></h4>
<table class="table table-sm"> <table class="table table-sm">
<thead> <thead>
<tr> <tr>

View File

@ -22,7 +22,19 @@
currentBalanceString = Math.Round(currentBalance, 2).ToString("#,#0.00", new System.Globalization.CultureInfo("en-US")); currentBalanceString = Math.Round(currentBalance, 2).ToString("#,#0.00", new System.Globalization.CultureInfo("en-US"));
} }
} }
<h4 class="m-t-0 header-title text-center">Total Account Value: &nbsp; &nbsp; <text class="text-autocolor"> @currentBalanceString &nbsp; @Model.Summary.MainMarket &nbsp; </text> <small> <i class="fa fa-info-circle text-muted" data-toggle="tooltip" data-placement="top" title="This value is estimated based on your sales history and any entries on the Transactions page"></i></small></h4> <h4 class="m-t-0 header-title text-center">Starting Account Value: &nbsp; &nbsp; <text class="text-autocolor"> @Model.PTMagicConfiguration.GeneralSettings.Application.StartBalance &nbsp; @Model.Summary.MainMarket &nbsp; </text> <small> <i class="fa fa-info-circle text-muted" data-toggle="tooltip" data-placement="top" title="This is the starting vlaue found in your settings file"></i></small></h4>
<h4 class="m-t-0 header-title text-center">Estimated Account Value: &nbsp; &nbsp; <text class="text-autocolor"> @currentBalanceString &nbsp; @Model.Summary.MainMarket &nbsp; </text> <small> <i class="fa fa-info-circle text-muted" data-toggle="tooltip" data-placement="top" title="This is based on your sales history and entries on the Transactions page. It doesn't include any currently held positions."></i></small></h4>
</div>
</div>
</div>
<div class="row">
<div class="col-md-12">
<div class="card-box">
<h4 class="m-t-0 header-title text-center">Cumulative Profits <small> <i class="fa fa-info-circle text-muted" data-toggle="tooltip" data-placement="top" title="This value is based on your sales history"></i></small></h4>
<div class="balance-chart">
<svg style="height:350px;width:100%"></svg>
</div>
</div> </div>
</div> </div>
</div> </div>
@ -363,6 +375,21 @@
return lineChart; return lineChart;
}); });
nv.addGraph(function () {
var lineChart = nv.models.lineChart();
var height = 400;
/**/
var chartData = @Html.Raw(Model.BalanceChartDataJSON);
/**/
lineChart.useInteractiveGuideline(true);
lineChart.xAxis.tickFormat(function (d) { return d3.time.format('%Y/%m/%d')(new Date(d)); });
lineChart.yAxis.axisLabel('Profit').tickFormat(d3.format(',.2f'));
d3.select('.balance-chart svg').attr('perserveAspectRatio', 'xMinYMid').datum(chartData).transition().duration(500).call(lineChart);
nv.utils.windowResize(lineChart.update);
return lineChart;
});
$("#salesList").on("show.bs.modal", function (e) { $("#salesList").on("show.bs.modal", function (e) {
$(this).find(".modal-content").html('<i class="fa fa-circle-o-notch fa-spin fa-3x fa-fw"></i>'); $(this).find(".modal-content").html('<i class="fa fa-circle-o-notch fa-spin fa-3x fa-fw"></i>');
var link = $(e.relatedTarget); var link = $(e.relatedTarget);

View File

@ -14,6 +14,7 @@ namespace Monitor.Pages
public ProfitTrailerData PTData = null; public ProfitTrailerData PTData = null;
public string TradesChartDataJSON = ""; public string TradesChartDataJSON = "";
public string ProfitChartDataJSON = ""; public string ProfitChartDataJSON = "";
public string BalanceChartDataJSON = "";
public IEnumerable<KeyValuePair<string, double>> TopMarkets = null; public IEnumerable<KeyValuePair<string, double>> TopMarkets = null;
public DateTime MinSellLogDate = Constants.confMinDate; public DateTime MinSellLogDate = Constants.confMinDate;
public Dictionary<DateTime, double> DailyGains = new Dictionary<DateTime, double>(); public Dictionary<DateTime, double> DailyGains = new Dictionary<DateTime, double>();
@ -63,20 +64,26 @@ namespace Monitor.Pages
int tradeDayIndex = 0; int tradeDayIndex = 0;
string tradesPerDayJSON = ""; string tradesPerDayJSON = "";
string profitPerDayJSON = ""; string profitPerDayJSON = "";
string balancePerDayJSON = "";
double balance = 0.0;
for (DateTime salesDate = graphStartDate; salesDate <= DateTimeNow.DateTime.Date; salesDate = salesDate.AddDays(1)) for (DateTime salesDate = graphStartDate; salesDate <= DateTimeNow.DateTime.Date; salesDate = salesDate.AddDays(1))
{ {
if (tradeDayIndex > 0) if (tradeDayIndex > 0)
{ {
tradesPerDayJSON += ",\n"; tradesPerDayJSON += ",\n";
profitPerDayJSON += ",\n"; profitPerDayJSON += ",\n";
balancePerDayJSON += ",\n";
} }
int trades = PTData.SellLog.FindAll(t => t.SoldDate.Date == salesDate.Date).Count; int trades = PTData.SellLog.FindAll(t => t.SoldDate.Date == salesDate.Date).Count;
double profit = PTData.SellLog.FindAll(t => t.SoldDate.Date == salesDate.Date).Sum(t => t.Profit); double profit = PTData.SellLog.FindAll(t => t.SoldDate.Date == salesDate.Date).Sum(t => t.Profit);
double profitFiat = Math.Round(profit * Summary.MainMarketPrice, 2); double profitFiat = Math.Round(profit * Summary.MainMarketPrice, 2);
balance += profitFiat;
tradesPerDayJSON += "{x: new Date('" + salesDate.Date.ToString("yyyy-MM-dd") + "'), y: " + trades + "}"; tradesPerDayJSON += "{x: new Date('" + salesDate.Date.ToString("yyyy-MM-dd") + "'), y: " + trades + "}";
profitPerDayJSON += "{x: new Date('" + salesDate.Date.ToString("yyyy-MM-dd") + "'), y: " + profitFiat.ToString("0.00", new System.Globalization.CultureInfo("en-US")) + "}"; profitPerDayJSON += "{x: new Date('" + salesDate.Date.ToString("yyyy-MM-dd") + "'), y: " + profitFiat.ToString("0.00", new System.Globalization.CultureInfo("en-US")) + "}";
balancePerDayJSON += "{x: new Date('" + salesDate.Date.ToString("yyyy-MM-dd") + "'), y: " + balance.ToString("0.00", new System.Globalization.CultureInfo("en-US")) + "}";
tradeDayIndex++; tradeDayIndex++;
} }
@ -97,6 +104,14 @@ namespace Monitor.Pages
ProfitChartDataJSON += "}"; ProfitChartDataJSON += "}";
ProfitChartDataJSON += "]"; ProfitChartDataJSON += "]";
BalanceChartDataJSON = "[";
BalanceChartDataJSON += "{";
BalanceChartDataJSON += "key: 'Profit in " + Summary.MainFiatCurrency + "',";
BalanceChartDataJSON += "color: '" + Constants.ChartLineColors[1] + "',";
BalanceChartDataJSON += "values: [" + balancePerDayJSON + "]";
BalanceChartDataJSON += "}";
BalanceChartDataJSON += "]";
for (DateTime salesDate = DateTimeNow.DateTime.Date; salesDate >= MinSellLogDate; salesDate = salesDate.AddDays(-1)) for (DateTime salesDate = DateTimeNow.DateTime.Date; salesDate >= MinSellLogDate; salesDate = salesDate.AddDays(-1))
{ {
List<SellLogData> salesDateSales = PTData.SellLog.FindAll(sl => sl.SoldDate.Date == salesDate); List<SellLogData> salesDateSales = PTData.SellLog.FindAll(sl => sl.SoldDate.Date == salesDate);

View File

@ -19,7 +19,7 @@
double intervalSeconds = Model.PTMagicConfiguration.AnalyzerSettings.MarketAnalyzer.IntervalMinutes * 60.0; double intervalSeconds = Model.PTMagicConfiguration.AnalyzerSettings.MarketAnalyzer.IntervalMinutes * 60.0;
string ptMagicHealthIcon = "<i class=\"fa fa-heartbeat text-success\" data-toggle=\"tooltip\" data-placement=\"top\" title=\"PT Magic is alive and healthy!\"></i>"; string ptMagicHealthIcon = "<i class=\"fa fa-heartbeat text-success\" data-toggle=\"tooltip\" data-placement=\"top\" title=\"PT Magic is alive and healthy!\"></i>";
if (elapsedSecondsSinceRuntime > (intervalSeconds + intervalSeconds * 0.2)) { if (elapsedSecondsSinceRuntime > (intervalSeconds + intervalSeconds)) {
ptMagicHealthIcon = "<i class=\"fa fa-bolt text-danger\" data-toggle=\"tooltip\" data-placement=\"top\" title=\"PT Magic seems to have problems, check the logs!\"></i>"; ptMagicHealthIcon = "<i class=\"fa fa-bolt text-danger\" data-toggle=\"tooltip\" data-placement=\"top\" title=\"PT Magic seems to have problems, check the logs!\"></i>";
} }

View File

@ -22,7 +22,7 @@
string iconColor = "text-success"; string iconColor = "text-success";
string ptMagicHealthIcon = "fa-heartbeat"; string ptMagicHealthIcon = "fa-heartbeat";
string ptMagicHealthTooltip = "PT Magic is alive and healthy!"; string ptMagicHealthTooltip = "PT Magic is alive and healthy!";
if (elapsedSecondsSinceRuntime > (intervalSeconds + intervalSeconds * 0.5)) { if (elapsedSecondsSinceRuntime > (intervalSeconds + intervalSeconds)) {
ptMagicHealthIcon = "fa-exclamation-triangle"; ptMagicHealthIcon = "fa-exclamation-triangle";
ptMagicHealthTooltip = "PT Magic seems to have problems, check the logs!"; ptMagicHealthTooltip = "PT Magic seems to have problems, check the logs!";
iconColor = "text-danger"; iconColor = "text-danger";

View File

@ -154,7 +154,8 @@
.trend-chart .nvd3.nv-line .nvd3.nv-scatter .nv-groups .nv-point, .trend-chart .nvd3.nv-line .nvd3.nv-scatter .nv-groups .nv-point,
.trades-chart .nvd3.nv-line .nvd3.nv-scatter .nv-groups .nv-point, .trades-chart .nvd3.nv-line .nvd3.nv-scatter .nv-groups .nv-point,
.profit-chart .nvd3.nv-line .nvd3.nv-scatter .nv-groups .nv-point { .profit-chart .nvd3.nv-line .nvd3.nv-scatter .nv-groups .nv-point,
.balance-chart .nvd3.nv-line .nvd3.nv-scatter .nv-groups .nv-point {
fill-opacity: 1 !important; fill-opacity: 1 !important;
stroke-opacity: 1 !important; stroke-opacity: 1 !important;
} }