Merge pull request #330 from PTMagicians/develop
2.6.1 .NET update and bug fixes
This commit is contained in:
commit
aaf8c2f6a2
|
@ -1,38 +0,0 @@
|
||||||
---
|
|
||||||
name: Bug report
|
|
||||||
about: Create a report to help us improve
|
|
||||||
title: ''
|
|
||||||
labels: ''
|
|
||||||
assignees: ''
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
**Describe the bug**
|
|
||||||
A clear and concise description of what the bug is.
|
|
||||||
|
|
||||||
**To Reproduce**
|
|
||||||
Steps to reproduce the behavior:
|
|
||||||
1. Go to '...'
|
|
||||||
2. Click on '....'
|
|
||||||
3. Scroll down to '....'
|
|
||||||
4. See error
|
|
||||||
|
|
||||||
**Expected behavior**
|
|
||||||
A clear and concise description of what you expected to happen.
|
|
||||||
|
|
||||||
**Screenshots**
|
|
||||||
If applicable, add screenshots to help explain your problem.
|
|
||||||
|
|
||||||
**Desktop (please complete the following information):**
|
|
||||||
- OS: [e.g. iOS]
|
|
||||||
- Browser [e.g. chrome, safari]
|
|
||||||
- Version [e.g. 22]
|
|
||||||
|
|
||||||
**Smartphone (please complete the following information):**
|
|
||||||
- Device: [e.g. iPhone6]
|
|
||||||
- OS: [e.g. iOS8.1]
|
|
||||||
- Browser [e.g. stock browser, safari]
|
|
||||||
- Version [e.g. 22]
|
|
||||||
|
|
||||||
**Additional context**
|
|
||||||
Add any other context about the problem here.
|
|
|
@ -1,20 +0,0 @@
|
||||||
---
|
|
||||||
name: Feature request
|
|
||||||
about: Suggest an idea for this project
|
|
||||||
title: ''
|
|
||||||
labels: ''
|
|
||||||
assignees: ''
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
**Is your feature request related to a problem? Please describe.**
|
|
||||||
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
|
|
||||||
|
|
||||||
**Describe the solution you'd like**
|
|
||||||
A clear and concise description of what you want to happen.
|
|
||||||
|
|
||||||
**Describe alternatives you've considered**
|
|
||||||
A clear and concise description of any alternative solutions or features you've considered.
|
|
||||||
|
|
||||||
**Additional context**
|
|
||||||
Add any other context or screenshots about the feature request here.
|
|
|
@ -1,14 +0,0 @@
|
||||||
---
|
|
||||||
name: Other
|
|
||||||
about: 'For trouble-shooting and other questions, visit our Discord server: https://discord.gg/KYmHMfk'
|
|
||||||
title: ''
|
|
||||||
labels: ''
|
|
||||||
assignees: ''
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
Posts in the Issues section should be limited to:
|
|
||||||
- Bug Reports
|
|
||||||
- Feature Requests
|
|
||||||
|
|
||||||
If you have general questions, please visit our Discord server at: https://discord.gg/KYmHMfk
|
|
|
@ -4,8 +4,8 @@
|
||||||
|
|
||||||
## What we expect from users who want to contribute a pull request
|
## What we expect from users who want to contribute a pull request
|
||||||
- Read the file [_Development/README.md](https://github.com/PTMagicians/PTMagic/blob/master/_Development/README.md) and follow the instructions carefully
|
- Read the file [_Development/README.md](https://github.com/PTMagicians/PTMagic/blob/master/_Development/README.md) and follow the instructions carefully
|
||||||
- Knowledge of the project PT Magic and what it is supposed to do
|
- In depth knowledge of the project PT Magic and what it is supposed to do
|
||||||
- Knowledge of the architecture, the different parts and layers of PT Magic
|
- In depth knowledge of the architecture, the different parts and layers of PT Magic
|
||||||
|
|
||||||
## What main goal should I follow when I want to implement something and submit my pull request?
|
## What main goal should I follow when I want to implement something and submit my pull request?
|
||||||
PT Magic is a project/addon that supports the trading experience of several users of Profit Trailer.
|
PT Magic is a project/addon that supports the trading experience of several users of Profit Trailer.
|
||||||
|
|
|
@ -1,18 +1,18 @@
|
||||||
<Project Sdk="Microsoft.NET.Sdk">
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<TargetFramework>netcoreapp3.1</TargetFramework>
|
<TargetFramework>netcoreapp7.0</TargetFramework>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="Microsoft.Extensions.Configuration.Binder" Version="3.1.0" />
|
<PackageReference Include="Microsoft.Extensions.Configuration.Binder" Version="7.0" />
|
||||||
<PackageReference Include="Newtonsoft.Json" Version="12.0.3" />
|
<PackageReference Include="Newtonsoft.Json" Version="13.0.2" />
|
||||||
<PackageReference Include="NLog" Version="4.6.8" />
|
<PackageReference Include="NLog" Version="4.6.8" />
|
||||||
<PackageReference Include="NLog.Extensions.Logging" Version="1.6.1" />
|
<PackageReference Include="NLog.Extensions.Logging" Version="1.6.1" />
|
||||||
<PackageReference Include="Microsoft.Extensions.Configuration" Version="3.1.0" />
|
<PackageReference Include="Microsoft.Extensions.Configuration" Version="7.0" />
|
||||||
<PackageReference Include="Microsoft.Extensions.Configuration.FileExtensions" Version="3.1.0" />
|
<PackageReference Include="Microsoft.Extensions.Configuration.FileExtensions" Version="7.0" />
|
||||||
<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="3.1.0" />
|
<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="7.0" />
|
||||||
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="3.1.0" />
|
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="7.0" />
|
||||||
<PackageReference Include="SharpZipLib" Version="*" />
|
<PackageReference Include="SharpZipLib" Version="*" />
|
||||||
<PackageReference Include="Telegram.Bot" Version="*" />
|
<PackageReference Include="Telegram.Bot" Version="*" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
|
@ -360,12 +360,12 @@ namespace Core.MarketAnalyzer
|
||||||
log.DoLogDebug("Binance - Getting ticks for '" + markets.Count + "' markets");
|
log.DoLogDebug("Binance - Getting ticks for '" + markets.Count + "' markets");
|
||||||
ConcurrentDictionary<string, List<MarketTick>> marketTicks = new ConcurrentDictionary<string, List<MarketTick>>();
|
ConcurrentDictionary<string, List<MarketTick>> marketTicks = new ConcurrentDictionary<string, List<MarketTick>>();
|
||||||
|
|
||||||
int ParallelThrottle = 4;
|
int ParallelThrottle = 2;
|
||||||
if (systemConfiguration.AnalyzerSettings.MarketAnalyzer.StoreDataMaxHours > 50)
|
if (systemConfiguration.AnalyzerSettings.MarketAnalyzer.StoreDataMaxHours > 6)
|
||||||
{
|
{
|
||||||
ParallelThrottle = 2;
|
ParallelThrottle = 1;
|
||||||
log.DoLogInfo("----------------------------------------------------------------------------");
|
log.DoLogInfo("----------------------------------------------------------------------------");
|
||||||
log.DoLogInfo("StoreDataMaxHours is greater than 50. Historical data requests will be");
|
log.DoLogInfo("StoreDataMaxHours is greater than 6. Historical data requests will be");
|
||||||
log.DoLogInfo("throttled to avoid exceeding exchange request limits. This initial ");
|
log.DoLogInfo("throttled to avoid exceeding exchange request limits. This initial ");
|
||||||
log.DoLogInfo("run could take more than 30 minutes. Please go outside for a walk...");
|
log.DoLogInfo("run could take more than 30 minutes. Please go outside for a walk...");
|
||||||
log.DoLogInfo("----------------------------------------------------------------------------");
|
log.DoLogInfo("----------------------------------------------------------------------------");
|
||||||
|
|
|
@ -71,7 +71,7 @@ namespace Core.MarketAnalyzer
|
||||||
//New variables for filtering out bad markets
|
//New variables for filtering out bad markets
|
||||||
float marketLastPrice = currencyTicker["lastPrice"].ToObject<float>();
|
float marketLastPrice = currencyTicker["lastPrice"].ToObject<float>();
|
||||||
float marketVolume = currencyTicker["volume"].ToObject<float>();
|
float marketVolume = currencyTicker["volume"].ToObject<float>();
|
||||||
if (marketLastPrice > 0 && marketVolume > 0)
|
if (marketLastPrice > 0 && marketVolume > 0 && marketName.EndsWith(mainMarket))
|
||||||
{
|
{
|
||||||
|
|
||||||
// Set last values in case any error occurs
|
// Set last values in case any error occurs
|
||||||
|
@ -92,8 +92,15 @@ namespace Core.MarketAnalyzer
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
//Let the user know that the problem market was ignored.
|
//Let the user know that a problem market was ignored.
|
||||||
|
if (!marketName.EndsWith(mainMarket))
|
||||||
|
{
|
||||||
|
log.DoLogInfo("BinanceFutures - Incorrect base currency: " + marketName + " ignored");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
log.DoLogInfo("BinanceFutures - Ignoring bad market data for " + marketName);
|
log.DoLogInfo("BinanceFutures - Ignoring bad market data for " + marketName);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -357,12 +364,12 @@ namespace Core.MarketAnalyzer
|
||||||
log.DoLogDebug("BinanceFutures - Getting ticks for '" + markets.Count + "' markets");
|
log.DoLogDebug("BinanceFutures - Getting ticks for '" + markets.Count + "' markets");
|
||||||
ConcurrentDictionary<string, List<MarketTick>> marketTicks = new ConcurrentDictionary<string, List<MarketTick>>();
|
ConcurrentDictionary<string, List<MarketTick>> marketTicks = new ConcurrentDictionary<string, List<MarketTick>>();
|
||||||
|
|
||||||
int ParallelThrottle = 4;
|
int ParallelThrottle = 2;
|
||||||
if (systemConfiguration.AnalyzerSettings.MarketAnalyzer.StoreDataMaxHours > 50)
|
if (systemConfiguration.AnalyzerSettings.MarketAnalyzer.StoreDataMaxHours > 6)
|
||||||
{
|
{
|
||||||
ParallelThrottle = 2;
|
ParallelThrottle = 1;
|
||||||
log.DoLogInfo("----------------------------------------------------------------------------");
|
log.DoLogInfo("----------------------------------------------------------------------------");
|
||||||
log.DoLogInfo("StoreDataMaxHours is greater than 50. Historical data requests will be");
|
log.DoLogInfo("StoreDataMaxHours is greater than 6. Historical data requests will be");
|
||||||
log.DoLogInfo("throttled to avoid exceeding exchange data request limits. This initial ");
|
log.DoLogInfo("throttled to avoid exceeding exchange data request limits. This initial ");
|
||||||
log.DoLogInfo("run could take more than 30 minutes. Please go outside for a walk...");
|
log.DoLogInfo("run could take more than 30 minutes. Please go outside for a walk...");
|
||||||
log.DoLogInfo("----------------------------------------------------------------------------");
|
log.DoLogInfo("----------------------------------------------------------------------------");
|
||||||
|
|
|
@ -370,12 +370,12 @@ namespace Core.MarketAnalyzer
|
||||||
log.DoLogDebug("BinanceUS - Getting ticks for '" + markets.Count + "' markets");
|
log.DoLogDebug("BinanceUS - Getting ticks for '" + markets.Count + "' markets");
|
||||||
ConcurrentDictionary<string, List<MarketTick>> marketTicks = new ConcurrentDictionary<string, List<MarketTick>>();
|
ConcurrentDictionary<string, List<MarketTick>> marketTicks = new ConcurrentDictionary<string, List<MarketTick>>();
|
||||||
|
|
||||||
int ParallelThrottle = 4;
|
int ParallelThrottle = 2;
|
||||||
if (systemConfiguration.AnalyzerSettings.MarketAnalyzer.StoreDataMaxHours > 200)
|
if (systemConfiguration.AnalyzerSettings.MarketAnalyzer.StoreDataMaxHours > 6)
|
||||||
{
|
{
|
||||||
ParallelThrottle = 2;
|
ParallelThrottle = 1;
|
||||||
log.DoLogInfo("----------------------------------------------------------------------------");
|
log.DoLogInfo("----------------------------------------------------------------------------");
|
||||||
log.DoLogInfo("StoreDataMaxHours is greater than 200. Historical data requests will be");
|
log.DoLogInfo("StoreDataMaxHours is greater than 6. Historical data requests will be");
|
||||||
log.DoLogInfo("throttled to avoid exceeding exchange data request limits. This initial ");
|
log.DoLogInfo("throttled to avoid exceeding exchange data request limits. This initial ");
|
||||||
log.DoLogInfo("run could take more than 30 minutes. Please go outside for a walk...");
|
log.DoLogInfo("run could take more than 30 minutes. Please go outside for a walk...");
|
||||||
log.DoLogInfo("----------------------------------------------------------------------------");
|
log.DoLogInfo("----------------------------------------------------------------------------");
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<Project Sdk="Microsoft.NET.Sdk.Web">
|
<Project Sdk="Microsoft.NET.Sdk.Web">
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<TargetFramework>netcoreapp3.1</TargetFramework>
|
<TargetFramework>netcoreapp7.0</TargetFramework>
|
||||||
<!--<PublishWithAspNetCoreTargetManifest>false</PublishWithAspNetCoreTargetManifest>-->
|
<!--<PublishWithAspNetCoreTargetManifest>false</PublishWithAspNetCoreTargetManifest>-->
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
@ -19,7 +19,7 @@
|
||||||
<None Include="nlog.config" CopyToOutputDirectory="Always" />
|
<None Include="nlog.config" CopyToOutputDirectory="Always" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="Newtonsoft.Json" Version="12.0.3" />
|
<PackageReference Include="Newtonsoft.Json" Version="13.0.2" />
|
||||||
<PackageReference Include="Microsoft.VisualStudio.Web.BrowserLink" Version="2.2.0" />
|
<PackageReference Include="Microsoft.VisualStudio.Web.BrowserLink" Version="2.2.0" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
|
|
@ -250,6 +250,8 @@ else
|
||||||
</thead>
|
</thead>
|
||||||
<tbody>
|
<tbody>
|
||||||
@foreach (string market in Model.Summary.MarketSummary.Keys.OrderBy(m => m)) {
|
@foreach (string market in Model.Summary.MarketSummary.Keys.OrderBy(m => m)) {
|
||||||
|
if (market.EndsWith(Model.Summary.MainMarket))
|
||||||
|
{
|
||||||
Core.Main.DataObjects.PTMagicData.MarketPairSummary mps = Model.Summary.MarketSummary[market];
|
Core.Main.DataObjects.PTMagicData.MarketPairSummary mps = Model.Summary.MarketSummary[market];
|
||||||
int marketTrendsDisplayed = 0;
|
int marketTrendsDisplayed = 0;
|
||||||
<tr>
|
<tr>
|
||||||
|
@ -294,6 +296,7 @@ else
|
||||||
<td></td>
|
<td></td>
|
||||||
}
|
}
|
||||||
</tr>
|
</tr>
|
||||||
|
}
|
||||||
}
|
}
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
|
|
|
@ -5,7 +5,9 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-md-5 px-1">
|
@if (Model.PTMagicConfiguration.GeneralSettings.Monitor.MaxDashboardBuyEntries>0)
|
||||||
|
{
|
||||||
|
<div class="col-md-6 px-1">
|
||||||
<div class="card-box px-2">
|
<div class="card-box px-2">
|
||||||
<h4 class="m-t-0 m-b-20 header-title"><b>Possible Buys (@Model.PTData.BuyLog.Count)</b><small id="buylist-refresh-icon"></small><small class="pull-right"><a href="@Html.Raw(Model.PTMagicConfiguration.GeneralSettings.Monitor.RootUrl)BuyAnalyzer">more</a></small></h4>
|
<h4 class="m-t-0 m-b-20 header-title"><b>Possible Buys (@Model.PTData.BuyLog.Count)</b><small id="buylist-refresh-icon"></small><small class="pull-right"><a href="@Html.Raw(Model.PTMagicConfiguration.GeneralSettings.Monitor.RootUrl)BuyAnalyzer">more</a></small></h4>
|
||||||
@if (Model.PTData.BuyLog.Count == 0)
|
@if (Model.PTData.BuyLog.Count == 0)
|
||||||
|
@ -79,8 +81,9 @@
|
||||||
}
|
}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
}
|
||||||
|
|
||||||
<div class="col-md-7 px-1">
|
<div class="col-md px-1">
|
||||||
<div class="card-box px-2">
|
<div class="card-box px-2">
|
||||||
<h4 class="m-t-0 m-b-20 header-title"><b>Pairs / DCA / Pending (@Model.PTData.DCALog.Count)</b><small id="baglist-refresh-icon"></small><small class="pull-right"><a href="@Html.Raw(Model.PTMagicConfiguration.GeneralSettings.Monitor.RootUrl)BagAnalyzer">more</a></small></h4>
|
<h4 class="m-t-0 m-b-20 header-title"><b>Pairs / DCA / Pending (@Model.PTData.DCALog.Count)</b><small id="baglist-refresh-icon"></small><small class="pull-right"><a href="@Html.Raw(Model.PTMagicConfiguration.GeneralSettings.Monitor.RootUrl)BagAnalyzer">more</a></small></h4>
|
||||||
|
|
||||||
|
@ -108,6 +111,7 @@
|
||||||
@foreach (Core.Main.DataObjects.PTMagicData.DCALogData dcaLogEntry in Model.PTData.DCALog.OrderByDescending(d => d.ProfitPercent).Take(Model.PTMagicConfiguration.GeneralSettings.Monitor.MaxDashboardBagEntries)) {
|
@foreach (Core.Main.DataObjects.PTMagicData.DCALogData dcaLogEntry in Model.PTData.DCALog.OrderByDescending(d => d.ProfitPercent).Take(Model.PTMagicConfiguration.GeneralSettings.Monitor.MaxDashboardBagEntries)) {
|
||||||
// Loop through the pairs preparing the data for display
|
// Loop through the pairs preparing the data for display
|
||||||
Core.Main.DataObjects.PTMagicData.MarketPairSummary mps = null;
|
Core.Main.DataObjects.PTMagicData.MarketPairSummary mps = null;
|
||||||
|
|
||||||
if (Model.Summary.MarketSummary.ContainsKey(dcaLogEntry.Market)) {
|
if (Model.Summary.MarketSummary.ContainsKey(dcaLogEntry.Market)) {
|
||||||
mps = Model.Summary.MarketSummary[dcaLogEntry.Market];
|
mps = Model.Summary.MarketSummary[dcaLogEntry.Market];
|
||||||
}
|
}
|
||||||
|
@ -146,22 +150,26 @@
|
||||||
|
|
||||||
// Check for when PT loses the value of a pair
|
// Check for when PT loses the value of a pair
|
||||||
bool lostValue = false;
|
bool lostValue = false;
|
||||||
lostValue = (dcaLogEntry.TotalCost == 0.0) || (dcaLogEntry.AverageBuyPrice == 0.0);
|
lostValue = !(sellStrategyText.Contains("WATCHMODE")) && !(sellStrategyText.Contains("PENDING")) && ((dcaLogEntry.TotalCost == 0.0) || (dcaLogEntry.AverageBuyPrice == 0.0));
|
||||||
|
|
||||||
// Profit percentage
|
// Profit percentage
|
||||||
var profitPercentage = dcaLogEntry.ProfitPercent;
|
var profitPercentage = dcaLogEntry.ProfitPercent;
|
||||||
|
|
||||||
if (dcaLogEntry.SellStrategies != null)
|
// if (dcaLogEntry.SellStrategies != null)
|
||||||
{
|
// {
|
||||||
var gainStrategy = dcaLogEntry.SellStrategies.FirstOrDefault(x => x.Name.Contains(" GAIN", StringComparison.InvariantCultureIgnoreCase));
|
// var gainStrategy = dcaLogEntry.SellStrategies.FirstOrDefault(x => x.Name.Contains(" GAIN", StringComparison.InvariantCultureIgnoreCase));
|
||||||
if (gainStrategy != null)
|
// if (gainStrategy != null)
|
||||||
{
|
// {
|
||||||
// Use the gain percentage value as it is accurate to what can be achieved with the order book!
|
// // Use the gain percentage value as it is accurate to what can be achieved with the order book!
|
||||||
profitPercentage = gainStrategy.CurrentValue;
|
// profitPercentage = gainStrategy.CurrentValue;
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
|
|
||||||
// Render the row
|
// Render the row
|
||||||
|
|
||||||
|
if (!sellStrategyText.Contains("PENDING-BUY"))
|
||||||
|
{
|
||||||
|
|
||||||
<tr @(lostValue ? "class=errorRow" : "") >
|
<tr @(lostValue ? "class=errorRow" : "") >
|
||||||
|
|
||||||
<!-- Market -->
|
<!-- Market -->
|
||||||
|
@ -204,8 +212,8 @@
|
||||||
<!-- Target/Profit -->
|
<!-- Target/Profit -->
|
||||||
@if (!@lostValue)
|
@if (!@lostValue)
|
||||||
{
|
{
|
||||||
@if (!sellStrategyText.Contains("WATCHMODE"))
|
//@if (!sellStrategyText.Contains("WATCHMODE"))
|
||||||
{
|
//{
|
||||||
@if (sellStrategyText.Contains("CROSSED"))
|
@if (sellStrategyText.Contains("CROSSED"))
|
||||||
// if leverage, recalculate profit target
|
// if leverage, recalculate profit target
|
||||||
{
|
{
|
||||||
|
@ -219,17 +227,31 @@
|
||||||
leverage = leverageText.Remove(leverageText.IndexOf(".0)"), leverageText.Length - leverageText.IndexOf(".0)"));
|
leverage = leverageText.Remove(leverageText.IndexOf(".0)"), leverageText.Length - leverageText.IndexOf(".0)"));
|
||||||
leverageValue = double.Parse(leverage);
|
leverageValue = double.Parse(leverage);
|
||||||
}
|
}
|
||||||
profitPercentage = profitPercentage * leverageValue;
|
//profitPercentage = profitPercentage * leverageValue;
|
||||||
double TargetGain = leverageValue * dcaLogEntry.TargetGainValue.Value;
|
|
||||||
<td>@TargetGain.ToString("#,#0.00", new System.Globalization.CultureInfo("en-US"))%
|
@if ( !(sellStrategyText.Contains("WATCHMODE")) && !(sellStrategyText.Contains("PENDING")))
|
||||||
<br>
|
{
|
||||||
<div class="text-autocolor">@profitPercentage.ToString("#,#0.00", new System.Globalization.CultureInfo("en-US"))%</div>
|
double TargetGain = leverageValue * dcaLogEntry.TargetGainValue.Value;
|
||||||
</td>
|
<td>@TargetGain.ToString("#,#0.00", new System.Globalization.CultureInfo("en-US"))%
|
||||||
}
|
<br>
|
||||||
|
<div class="text-autocolor">@profitPercentage.ToString("#,#0.00", new System.Globalization.CultureInfo("en-US"))%</div>
|
||||||
|
</td>
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
<td>
|
||||||
|
<div class="text-left">None</div>
|
||||||
|
<br>
|
||||||
|
<div class="text-autocolor">@profitPercentage.ToString("#,#0.00", new System.Globalization.CultureInfo("en-US"))%</div>
|
||||||
|
</td>
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
<td class="text-left">No Value!</td>
|
<td class="text-left">Lost Value!</td>
|
||||||
}
|
}
|
||||||
<!-- Bag details -->
|
<!-- Bag details -->
|
||||||
<td class="text-right"><a href="@Html.Raw(Model.PTMagicConfiguration.GeneralSettings.Monitor.RootUrl)_get/BagDetails/?m=@dcaLogEntry.Market" data-remote="false" data-toggle="modal" data-target="#dca-chart"><i class="fa fa-plus-circle"></i></a></td>
|
<td class="text-right"><a href="@Html.Raw(Model.PTMagicConfiguration.GeneralSettings.Monitor.RootUrl)_get/BagDetails/?m=@dcaLogEntry.Market" data-remote="false" data-toggle="modal" data-target="#dca-chart"><i class="fa fa-plus-circle"></i></a></td>
|
||||||
|
@ -240,6 +262,9 @@
|
||||||
Model.TotalBagCost = Model.TotalBagCost + dcaLogEntry.TotalCost;
|
Model.TotalBagCost = Model.TotalBagCost + dcaLogEntry.TotalCost;
|
||||||
Model.TotalBagGain = Model.TotalBagGain + bagGain;
|
Model.TotalBagGain = Model.TotalBagGain + bagGain;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
<td>Totals:</td>
|
<td>Totals:</td>
|
||||||
<td></td>
|
<td></td>
|
||||||
|
|
|
@ -10,7 +10,7 @@ namespace Monitor
|
||||||
public class Program
|
public class Program
|
||||||
{
|
{
|
||||||
// Main entry point
|
// Main entry point
|
||||||
[SecurityPermission(SecurityAction.Demand, Flags = SecurityPermissionFlag.ControlAppDomain)]
|
//[SecurityPermission(SecurityAction.Demand, Flags = SecurityPermissionFlag.ControlAppDomain)]
|
||||||
public static void Main(string[] args)
|
public static void Main(string[] args)
|
||||||
{
|
{
|
||||||
// Register a global exception handler
|
// Register a global exception handler
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
<Project Sdk="Microsoft.NET.Sdk">
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<TargetFramework>netcoreapp3.1</TargetFramework>
|
<TargetFramework>netcoreapp7.0</TargetFramework>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
|
|
|
@ -6,7 +6,7 @@ using Core.Helper;
|
||||||
using Microsoft.Extensions.DependencyInjection;
|
using Microsoft.Extensions.DependencyInjection;
|
||||||
|
|
||||||
|
|
||||||
[assembly: AssemblyVersion("2.5.12")]
|
[assembly: AssemblyVersion("2.6.1")]
|
||||||
[assembly: AssemblyProduct("PT Magic")]
|
[assembly: AssemblyProduct("PT Magic")]
|
||||||
|
|
||||||
namespace PTMagic
|
namespace PTMagic
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
# Profit Trailer Magic
|
# Profit Trailer Magic
|
||||||
|
|
||||||
[Go here](https://github.com/PTMagicians/PTMagic/releases) to download the latest version.
|
[Visit the wiki](https://github.com/PTMagicians/PT-Magic/wiki) to learn about this project.
|
||||||
|
|
||||||
[Visit the wiki](https://github.com/PTMagicians/PT-Magic/wiki) for instructions, and to learn more about this project.
|
[Go here](https://github.com/PTMagicians/PTMagic/releases) to download the latest version.
|
||||||
|
|
Loading…
Reference in New Issue