예제 #1
0
        protected void Page_Load(object sender, EventArgs e)
        {
            userRepository = DependencyResolver.Current.GetService<IUserRepository>();
            Response.ContentType = "text/plain";
            int accountId;
            if (Request["accountId"] == null || !int.TryParse(Request["accountId"], out accountId))
            {
                Logger.Error("Не корректно задан парамер accountId");
                Response.BinaryWrite(GetErrorAvatar());
                return;
            }

            if (!avatarSize.Contains(Request["size"].ToLower()))
            {
                Logger.Error("Не корректно задан парамер size");
                Response.BinaryWrite(GetErrorAvatar());
                return;
            }

            var user = userRepository.GetAccountOwner(accountId);
            if (user == null)
            {
                Logger.Error("Не найден пользователь-владелец счёта " + accountId);
                Response.BinaryWrite(GetErrorAvatar());
                return;
            }

            dataSource = TradeSharpAccountStatistics.Instance.proxy;

            var userInfo = dataSource.GetUsersBriefInfo(new List<int> { user.ID }).FirstOrDefault();
            if (userInfo == null)
            {
                Logger.Error("Не удалось получить подробную информацию о пользователе " + user.Login);
                Response.BinaryWrite(GetErrorAvatar());
                return;
            }

            byte[] avatar;
            switch (Request["size"].ToLower())
            {
                case  "big":
                    avatar = dataSource.ReadFiles(new List<string> { userInfo.AvatarBigFileName }).FirstOrDefault();
                    break;
                case "small":
                    avatar = dataSource.ReadFiles(new List<string> { userInfo.AvatarSmallFileName }).FirstOrDefault();
                    break;
                default:
                    avatar = dataSource.ReadFiles(new List<string> { userInfo.AvatarBigFileName }).FirstOrDefault();
                    break;
            }
            if (avatar == null)
            {
                Logger.Error("Не удалось получить файл");
                Response.BinaryWrite(GetErrorAvatar());
                return;
            }

            Response.BinaryWrite(avatar);
        }
예제 #2
0
 public UserInfoExCache(IAccountStatistics source, string cachePath = "\\files")
 {
     dataSource = source;
     path = ExecutablePath.ExecPath + cachePath;
     try
     {
         if (!Directory.Exists(path))
             Directory.CreateDirectory(path);
     }
     catch (Exception ex)
     {
         Logger.Info(string.Format("UserInfoExCache: error creating directory {0}", path), ex);
         throw;
     }
 }
 private TradeSharpAccountStatistics(IAccountStatistics proxyOrStub = null)
 {
     if (proxyOrStub != null)
     {
         proxy = proxyOrStub;
         return;
     }
     try
     {
         proxy = ProxyBuilder.Instance.GetImplementer <IAccountStatistics>();
     }
     catch (Exception ex)
     {
         Logger.Error("TradeSharpAccountStatistics ctor", ex);
     }
 }
 private TradeSharpAccountStatistics(IAccountStatistics proxyOrStub = null)
 {
     if (proxyOrStub != null)
     {
         proxy = proxyOrStub;
         return;
     }
     try
     {
         proxy = ProxyBuilder.Instance.GetImplementer<IAccountStatistics>();
     }
     catch (Exception ex)
     {
         Logger.Error("TradeSharpAccountStatistics ctor", ex);
     }
 }
예제 #5
0
 public UserInfoExCache(IAccountStatistics source, string cachePath = "\\files")
 {
     dataSource = source;
     path       = ExecutablePath.ExecPath + cachePath;
     try
     {
         if (!Directory.Exists(path))
         {
             Directory.CreateDirectory(path);
         }
     }
     catch (Exception ex)
     {
         Logger.Info(string.Format("UserInfoExCache: error creating directory {0}", path), ex);
         throw;
     }
 }
예제 #6
0
        private static AccountEfficiency GeneratePortfolioAccountEfficiency(TopPortfolio portfolio, IAccountStatistics proxy)
        {
            var portfolioEfficiency = new AccountEfficiency();
            var efficiencies = new List<AccountEfficiency>();

            // detect beginning
            DateTime? beginDate = null;
            foreach (var performerStat in portfolio.Managers)
            {
                var efficiency = proxy.GetAccountEfficiencyShort(performerStat.Account, false, false);
                efficiencies.Add(efficiency);
                var firstDate = efficiency.listProfit1000.Min(e => e.time);
                if (!beginDate.HasValue)
                    beginDate = firstDate;
                else
                    if (firstDate < beginDate.Value)
                        beginDate = firstDate;
            }
            if (!beginDate.HasValue)
                return null;

            // pofit1000 calc
            portfolioEfficiency.listProfit1000 = new List<EquityOnTime>();
            portfolioEfficiency.listEquity = new List<EquityOnTime>();
            for (var date = beginDate.Value; date < DateTime.Now; date = date.AddDays(1))
            {
                float equity = 0;
                foreach (var efficiency in efficiencies)
                {
                    var equityOnTime = efficiency.listProfit1000.Find(e => e.time == date);
                    if (equityOnTime.time == default(DateTime))
                        continue;
                    equity += equityOnTime.equity;
                }
                equity /= efficiencies.Count;
                portfolioEfficiency.listProfit1000.Add(new EquityOnTime(equity, date));
            }
            if (!AccountModel.Instance.AccountId.HasValue || portfolioEfficiency.listProfit1000.Count == 0)
                return null;

            // pofit calc
            var stat = proxy.GetPerformerByAccountId(AccountModel.Instance.AccountId.Value);
            // пусть performerStat.Equity соответствует последней точке на кривой доходности на 1000
            var profitFactor = stat.Equity / portfolioEfficiency.listProfit1000.Last().equity;
            foreach (var equityOnTime in portfolioEfficiency.listProfit1000)
            {
                portfolioEfficiency.listEquity.Add(new EquityOnTime(equityOnTime.equity * profitFactor, equityOnTime.time));
            }

            // stats calc
            portfolioEfficiency.listTransaction = new List<BalanceChange>();
            portfolioEfficiency.InitialBalance = portfolioEfficiency.listEquity[0].equity;
            portfolioEfficiency.StartDate = portfolioEfficiency.listEquity[0].time;
            new EfficiencyCalculator().CalculateProfitCoeffs(portfolioEfficiency);

            return portfolioEfficiency;
        }
예제 #7
0
        private static AccountEfficiency GeneratePortfolioAccountEfficiency(TopPortfolio portfolio, IAccountStatistics proxy)
        {
            var portfolioEfficiency = new AccountEfficiency();
            var efficiencies        = new List <AccountEfficiency>();

            // detect beginning
            DateTime?beginDate = null;

            foreach (var performerStat in portfolio.Managers)
            {
                var efficiency = proxy.GetAccountEfficiencyShort(performerStat.Account, false, false);
                efficiencies.Add(efficiency);
                var firstDate = efficiency.listProfit1000.Min(e => e.time);
                if (!beginDate.HasValue)
                {
                    beginDate = firstDate;
                }
                else
                if (firstDate < beginDate.Value)
                {
                    beginDate = firstDate;
                }
            }
            if (!beginDate.HasValue)
            {
                return(null);
            }

            // pofit1000 calc
            portfolioEfficiency.listProfit1000 = new List <EquityOnTime>();
            portfolioEfficiency.listEquity     = new List <EquityOnTime>();
            for (var date = beginDate.Value; date < DateTime.Now; date = date.AddDays(1))
            {
                float equity = 0;
                foreach (var efficiency in efficiencies)
                {
                    var equityOnTime = efficiency.listProfit1000.Find(e => e.time == date);
                    if (equityOnTime.time == default(DateTime))
                    {
                        continue;
                    }
                    equity += equityOnTime.equity;
                }
                equity /= efficiencies.Count;
                portfolioEfficiency.listProfit1000.Add(new EquityOnTime(equity, date));
            }
            if (!AccountModel.Instance.AccountId.HasValue || portfolioEfficiency.listProfit1000.Count == 0)
            {
                return(null);
            }

            // pofit calc
            var stat = proxy.GetPerformerByAccountId(AccountModel.Instance.AccountId.Value);
            // пусть performerStat.Equity соответствует последней точке на кривой доходности на 1000
            var profitFactor = stat.Equity / portfolioEfficiency.listProfit1000.Last().equity;

            foreach (var equityOnTime in portfolioEfficiency.listProfit1000)
            {
                portfolioEfficiency.listEquity.Add(new EquityOnTime(equityOnTime.equity * profitFactor, equityOnTime.time));
            }

            // stats calc
            portfolioEfficiency.listTransaction = new List <BalanceChange>();
            portfolioEfficiency.InitialBalance  = portfolioEfficiency.listEquity[0].equity;
            portfolioEfficiency.StartDate       = portfolioEfficiency.listEquity[0].time;
            new EfficiencyCalculator().CalculateProfitCoeffs(portfolioEfficiency);

            return(portfolioEfficiency);
        }
 public static void Initialize(IAccountStatistics proxyOrStub)
 {
     instance = new TradeSharpAccountStatistics(proxyOrStub);
 }
 public static void Initialize(IAccountStatistics proxyOrStub)
 {
     instance = new TradeSharpAccountStatistics(proxyOrStub);
 }
예제 #10
0
        protected void Page_Load(object sender, EventArgs e)
        {
            userRepository       = DependencyResolver.Current.GetService <IUserRepository>();
            Response.ContentType = "text/plain";
            int accountId;

            if (Request["accountId"] == null || !int.TryParse(Request["accountId"], out accountId))
            {
                Logger.Error("Не корректно задан парамер accountId");
                Response.BinaryWrite(GetErrorAvatar());
                return;
            }

            if (!avatarSize.Contains(Request["size"].ToLower()))
            {
                Logger.Error("Не корректно задан парамер size");
                Response.BinaryWrite(GetErrorAvatar());
                return;
            }

            var user = userRepository.GetAccountOwner(accountId);

            if (user == null)
            {
                Logger.Error("Не найден пользователь-владелец счёта " + accountId);
                Response.BinaryWrite(GetErrorAvatar());
                return;
            }

            dataSource = TradeSharpAccountStatistics.Instance.proxy;

            var userInfo = dataSource.GetUsersBriefInfo(new List <int> {
                user.ID
            }).FirstOrDefault();

            if (userInfo == null)
            {
                Logger.Error("Не удалось получить подробную информацию о пользователе " + user.Login);
                Response.BinaryWrite(GetErrorAvatar());
                return;
            }

            byte[] avatar;
            switch (Request["size"].ToLower())
            {
            case  "big":
                avatar = dataSource.ReadFiles(new List <string> {
                    userInfo.AvatarBigFileName
                }).FirstOrDefault();
                break;

            case "small":
                avatar = dataSource.ReadFiles(new List <string> {
                    userInfo.AvatarSmallFileName
                }).FirstOrDefault();
                break;

            default:
                avatar = dataSource.ReadFiles(new List <string> {
                    userInfo.AvatarBigFileName
                }).FirstOrDefault();
                break;
            }
            if (avatar == null)
            {
                Logger.Error("Не удалось получить файл");
                Response.BinaryWrite(GetErrorAvatar());
                return;
            }

            Response.BinaryWrite(avatar);
        }