Knocks/BackEnd/Knoks.Core/Logic/Managers/KnokPriceLogic.cs

92 lines
3.2 KiB
C#

using Knoks.Core.Entities;
using Knoks.Core.Entities.Args;
using Knoks.Core.Logic.Interfaces;
using System;
using System.Collections.Generic;
using System.Linq;
namespace Knoks.Core.Logic.Managers
{
public class KnokPriceLogic : IKnokPriceLogic
{
public decimal CalculateExpectancy(decimal probabilityOfWinning, decimal avarageWin, decimal avarageLoss)
{
return (probabilityOfWinning * avarageWin) + ((1m - probabilityOfWinning) * avarageLoss);
}
public decimal CalculateObjectivePrice(decimal expectancy, decimal paidPercent, decimal objectiveWeight, int multiplier)
{
return expectancy * paidPercent * objectiveWeight * multiplier;
}
//TODO - remove this from the logic to settings
public int RankPayoff(UserRank value)
{
if (value == UserRank.Jedi)
{
return 50;
}
else if (value == UserRank.Knight)
{
return 30;
}
else if (value == UserRank.Master)
{
return 40;
}
else if (value == UserRank.Ranger)
{
return 20;
}
else if (value == UserRank.Padawan)
{
return 10;
}
else
return 0;
}
public decimal CalcAnalysisPrice(string header, string description, IEnumerable<AnalysisTag> tags, decimal analysisMultiplier)
{
var analysisPrice = 0m;
if (!string.IsNullOrEmpty(header))
analysisPrice++;
if (!string.IsNullOrEmpty(description))
analysisPrice++;
if (tags != null && tags.Count() > 0)
analysisPrice++;
return analysisPrice * analysisMultiplier;
}
public decimal CalculatePotentialProfitPrice(decimal potentialProfit, decimal potentialProfitMultiplier)
{
return potentialProfit * potentialProfitMultiplier / 100m;
}
public decimal CalculateProfitTimeRatioPrice(decimal potentialProfit, int duration, decimal profitTimeRatioMultiplier)
{
return potentialProfit / duration * profitTimeRatioMultiplier / 100m;
}
public decimal CalculateProfitLossRatioPrice(decimal potentialProfit, decimal entryFrom,decimal entryTo,decimal stopLoss, decimal profitLossRatioMultiplier)
{
var entryMid = (entryFrom + entryTo) / 2m;
var potentialLoss = (stopLoss - entryMid) / entryMid * -1m * 100m;
return potentialProfit / potentialLoss * profitLossRatioMultiplier / 100m;
}
public decimal CalculateSubjectivePrice(decimal faPrice, decimal taPrice, decimal potentialProfit, decimal ProfTimePrice, decimal ProfLossPrice)
{
return faPrice + taPrice + potentialProfit + ProfTimePrice + ProfLossPrice;
}
public decimal CalculatePotentialProfit(decimal entryFrom, decimal entryTo, decimal exitFrom, decimal exitTo)
{
var entryMid = (entryFrom + entryTo) / 2m;
var exitMid = (exitFrom + exitTo) / 2m;
return (exitMid - entryMid) / entryMid * 100m;
}
}
}