public static TradeAccount ToTradeAccount(this TradeAccounts t) { return(new TradeAccount { Id = t.Id, Login = t.Login }); }
private static OperationResult <string> GetTradeHistory(TradeAccounts account) { return(InvokeOperations.InvokeOperation(() => { Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("en-US"); var csv = new StringBuilder($"\"Login\";\"Ticket\";\"Symbol\";\"Price\";\"Profit\";\"Volume\";\"Date\";\"Direction\";\"Entry\";{Environment.NewLine}"); foreach (var trade in account.Trades.OrderBy(x => x.Date)) { csv.AppendLine($"\"{account.Login}\";" + $"\"{trade.Ticket}\";" + $"\"{trade.Symbol}\";" + $"\"{trade.Price}\";" + $"\"{trade.Profit}\";" + $"\"{trade.Volume}\";" + $"\"{trade.Date:yyyy-MM-dd HH:mm:ss}\";" + $"\"{trade.Direction}\";" + $"\"{trade.Entry}\";"); } return csv.ToString(); })); }
public OperationResult TradeAccountsCreated(List <AccountCreated> accounts) { return(InvokeOperations.InvokeOperation(() => { foreach (var accountData in accounts) { var participant = context.Participants.FirstOrDefault(x => x.Id == accountData.ParticipantId); if (participant == null) { continue; } var tournament = context.Tournaments.FirstOrDefault(x => x.IsEnabled); if (tournament == null) { continue; } var account = new TradeAccounts { Id = Guid.NewGuid(), TournamentId = tournament.Id, Login = accountData.Login, Password = accountData.Password, OrdersCount = 0, StartBalance = accountData.StartBalance, ParticipantId = accountData.ParticipantId, TotalProfit = 0, TotalProfitInPercent = 0, TradeServerId = accountData.TradeServerId }; context.Add(account); context.SaveChanges(); } })); }
public void RecalculateChart(TradeAccounts account, int pointsCount = 30, ChartType type = ChartType.ByProfit) { var result = new List <decimal> { 0 }; var startBalance = account.StartBalance; var profits = account.Trades .Where(x => x.Entry != TradeEntry.In) .OrderBy(x => x.Date) .Select(x => x.Profit) .ToList(); var statistic = new List <decimal>(); var balances = new List <decimal>(); statistic.Add(0m); balances.Add(startBalance); for (var i = 0; i < profits.Count; i++) { statistic.Add((balances[i] + profits[i]) / startBalance * 100m - 100m); balances.Add(balances[i] + profits[i]); } var list = new List <List <decimal> >(); var step = statistic.Count <= pointsCount ? 1 : statistic.Count % pointsCount >= pointsCount / 3 ? statistic.Count / pointsCount + 1 : statistic.Count / pointsCount; var count = 0; do { list.Add(statistic.Skip(count).Take(step).ToList()); count += step; } while (count < statistic.Count); if (!list.Any() || !list.First().Any()) { return; } switch (type) { case ChartType.ByProfit: result = list .Select(x => Math.Round(x.Average(y => y), 2)) .ToList(); break; } if (profits.Count > pointsCount) { result.Add(account.TotalProfitInPercent); } context.RemoveRange(account.Charts.Where(x => x.Type == type)); var index = 0; foreach (var chart in result) { context.Add(new Charts { Id = Guid.NewGuid(), Type = type, Index = index, TradeAccountId = account.Id, Value = chart }); index++; } context.SaveChanges(); }