Пример #1
0
        public static List <AccountStats> AddAcountStats(List <TradeRecord> trades, int accountNumber, int leverage)
        {
            var dailyNavs        = unitOfWork.DailyNAVRepository.GetAll().Where(x => x.AccountNumber == accountNumber).FirstOrDefault();
            var AccountStatsList = new List <AccountStats>();

            for (int i = 1; i <= 44; i++)
            {
                AccountStats accountStats = new AccountStats();
                accountStats.AccountId  = i.ToString();
                accountStats.Balance    = MathCalculations.GenerateRandomNo(6);
                accountStats.BestPL     = CalculateBestPLForTimeline(i, trades);
                accountStats.CreatedBy  = MathCalculations.GenerateRandomNo(2);
                accountStats.Leverage   = leverage;
                accountStats.CreatedOn  = DateTime.UtcNow.ToString();
                accountStats.DD         = dailyNavs == null ? 0 : CalculateDDForTimeline(i, dailyNavs);
                accountStats.NAV        = dailyNavs == null ? 0 : CalculateNavForTimeline(i, dailyNavs); //Math.Round(dailyNavs.NAVByDate[dailyNavs.NAVByDate.Count - 1].NAV, 2);
                accountStats.ROI        = dailyNavs == null ? 0 : CalculateROIForTimeline(i, dailyNavs, trades);
                accountStats.SharpRatio = dailyNavs == null ? 0 : CalculateSharpRatioForTimeline(i, dailyNavs);
                accountStats.Status     = true;
                accountStats.TimeLineId = i;
                //accountStats.UpdatedBy = MathCalculations.GenerateRandomNo(2);
                //accountStats.UpdatedOn = GenerateRandomDate();
                accountStats.WINRate = CalculateWINForTimeline(i, trades);
                accountStats.WorstPL = CalculateWorstPLForTimeline(i, trades);

                //_unitOfWork.AccountStatsRepository.Add(accountStats);
                AccountStatsList.Add(accountStats);
            }

            return(AccountStatsList);
        }
Пример #2
0
        public List <AccountStats> AddDummyAcountStats(string name)
        {
            var AccountStatsList = new List <AccountStats>();

            for (int i = 1; i <= 45; i++)
            {
                AccountStats accountStats = new AccountStats();

                accountStats.AccountId       = i.ToString();
                accountStats.StatringBalance = MathCalculations.GenerateRandomNo(6);
                accountStats.BestPL          = MathCalculations.GenerateRandomNo(4).ToString();
                accountStats.CreatedBy       = name;
                accountStats.Leverage        = i;
                accountStats.CreatedOn       = GenerateRandomDate();
                accountStats.DD         = MathCalculations.GenerateRandomNo(3);
                accountStats.NAV        = MathCalculations.GenerateRandomNo(3);
                accountStats.ROI        = MathCalculations.GenerateRandomNo(3);
                accountStats.SharpRatio = MathCalculations.GenerateRandomNo(6);
                accountStats.Status     = true;
                //accountStats.DD =  MathCalculations.GenerateRandomNo(2);
                accountStats.TimeLineId = i;
                accountStats.UpdatedBy  = MathCalculations.GenerateRandomNo(2);
                accountStats.UpdatedOn  = GenerateRandomDate();
                accountStats.WINRate    = MathCalculations.GenerateRandomNo(3);
                accountStats.WorstPL    = MathCalculations.GenerateRandomNo(2).ToString();

                //_unitOfWork.AccountStatsRepository.Add(accountStats);
                AccountStatsList.Add(accountStats);
            }

            return(AccountStatsList);
        }
Пример #3
0
        public async Task <bool> CreateAccountStats(AppUser user)
        {
            try
            {
                AccountStats accountStats = new AccountStats
                {
                    UserId            = Guid.Parse(user.Id),
                    TotalPoints       = 0,
                    TotalHours        = 0,
                    TotalFlights      = 0,
                    FavouriteRoute    = Guid.Empty,
                    FavouriteAircraft = Guid.Empty,
                    LastRouteId       = Guid.Empty,
                    LastAircraftId    = Guid.Empty
                };

                var result = await _context.AccountStats.AddAsync(accountStats);

                if (result != null)
                {
                    int saveResult = await _context.SaveChangesAsync();

                    return(true);
                }
                else
                {
                    return(false);
                }
            }
            catch (Exception ex)
            {
                return(false);
            }
        }
Пример #4
0
 public AccountStatsModel ToAccountDailyStatsModel(AccountStats dailyStats)
 {
     if (dailyStats == null)
     {
         return(new AccountStatsModel());
     }
     return(new AccountStatsModel
     {
         AccountStatsId = dailyStats.Id.ToString(),
         AccountId = dailyStats.AccountId.ToString(),
         TimeLineId = dailyStats.TimeLineId.Encrypt(),
         AvgTrade = dailyStats.AvgTrade,
         ROI = dailyStats.ROI,
         WINRate = dailyStats.WINRate,
         DD = dailyStats.DD,
         Leverage = dailyStats.Leverage,
         SharpRatio = dailyStats.SharpRatio,
         StatringBalance = dailyStats.StatringBalance,
         Deposit = dailyStats.Deposit,
         Withdrawn = dailyStats.Withdrawn,
         ProfitLoss = dailyStats.ProfitLoss,
         NAV = dailyStats.NAV,
         BestPL = dailyStats.BestPL,
         WorstPL = dailyStats.WorstPL,
         CreatedBy = dailyStats.CreatedBy,
         CreatedOn = dailyStats.CreatedOn.ToString(),
         UpdatedBy = dailyStats.UpdatedBy,
         UpdatedOn = dailyStats.UpdatedOn.ToString(),
         Status = dailyStats.Status
     });
 }
Пример #5
0
        public static List <AccountStats> AddAcountStats(List <TradeRecord> trades, int accountNumber, int leverage, ObjectId datasourceId)
        {
            //try
            //{
            var dailyNavs        = unitOfWork.DailyEquityRepository.GetAll().Where(x => x.AccountNumber == accountNumber).FirstOrDefault();
            var AccountStatsList = new List <AccountStats>();
            var datasource       = _eLTService.getDatasourceById(datasourceId);

            foreach (TimeLineEnum timeline in Enum.GetValues(typeof(TimeLineEnum)))
            {
                if ((int)timeline == 45)
                {
                }
                AccountStats accountStats = new AccountStats();
                accountStats.AccountId       = timeline;
                accountStats.StatringBalance = AccountStatsCalculations.GetStartingBalanceByTimeline((int)timeline, dailyNavs, trades);
                accountStats.Deposit         = AccountStatsCalculations.GetDepositsByTimeline((int)timeline, dailyNavs, trades);
                accountStats.Withdrawn       = AccountStatsCalculations.GetWithdrawnByTimeline((int)timeline, dailyNavs, trades);
                accountStats.ProfitLoss      = AccountStatsCalculations.GetProfitLossByTimeline((int)timeline, dailyNavs, trades);
                accountStats.BestPL          = AccountStatsCalculations.CalculateBestPLForTimeline((int)timeline, trades);
                accountStats.CreatedBy       = accountNumber;
                accountStats.Leverage        = leverage;
                accountStats.CreatedOn       = DateTime.UtcNow.ToString();
                accountStats.DD         = dailyNavs == null ? 0 : AccountStatsCalculations.CalculateDDForTimeline((int)timeline, dailyNavs, trades);
                accountStats.NAV        = dailyNavs == null ? 0 : AccountStatsCalculations.CalculateNavForTimeline((int)timeline, dailyNavs); //Math.Round(dailyNavs.NAVByDate[dailyNavs.NAVByDate.Count - 1].NAV, 2);
                accountStats.ROI        = dailyNavs == null ? 0 : AccountStatsCalculations.CalculateROIForTimeline((int)timeline, dailyNavs, trades);
                accountStats.SharpRatio = dailyNavs == null ? 0 : AccountStatsCalculations.CalculateSharpRatioForTimeline((int)timeline, dailyNavs, datasourceId, datasource, trades);
                accountStats.AvgTrade   = dailyNavs == null ? 0 : AccountStatsCalculations.CalculateAvgTradesForTimeline((int)timeline, trades);
                accountStats.Status     = true;
                accountStats.TimeLineId = (int)timeline;
                //accountStats.UpdatedBy = MathCalculations.GenerateRandomNo(2);
                //accountStats.UpdatedOn = GenerateRandomDate();
                accountStats.WINRate = AccountStatsCalculations.CalculateWINForTimeline((int)timeline, trades);
                accountStats.WorstPL = AccountStatsCalculations.CalculateWorstPLForTimeline((int)timeline, trades);
                //_unitOfWork.AccountStatsRepository.Add(accountStats);
                AccountStatsList.Add(accountStats);
            }

            return(AccountStatsList);
            //}
            //catch (Exception ex)
            //{
            //    throw;
            //}
        }
Пример #6
0
        void ProcessIncomingDataStream(OpenApiMessagesFactory msgFactory, byte[] rawData)
        {
            var _msg = msgFactory.GetMessage(rawData);

#if TRACE_DATA_INCOMING
            if (isDebugIsOn)
            {
                //if (_msg.PayloadType == (int)OpenApiLib.ProtoOAPayloadType.OA_SPOT_EVENT)
                //{
                //    Console.Write(".");
                //}
                //else
                {
                    Console.WriteLine("ProcessIncomingDataStream() received: " + OpenApiMessagesPresentation.ToString(_msg));
                }
            }
#endif

            if (!_msg.HasPayload)
            {
                return;
            }

            var lastLastHeartBeatReceived = lastHeartBeatReceived;
            lastHeartBeatReceived = DateTime.UtcNow;

            switch (_msg.PayloadType)
            {
            case (int)OpenApiLib.ProtoPayloadType.PING_RES:
            {
                var payload = msgFactory.GetPingResponse(rawData);
                if (payload.HasTimestamp)
                {
                    ServerTime = new DateTime((long)payload.Timestamp);
                    Console.WriteLine("[time] " + Server.Time.ToShortTimeString());
                    //Server.Time = DateTime.FromFileTimeUtc();
                }
                break;
            }

            case (int)OpenApiLib.ProtoPayloadType.HEARTBEAT_EVENT:
                //var _payload_msg = msgFactory.GetHeartbeatEvent(rawData);
                var timeBetween = (lastHeartBeatReceived - lastLastHeartBeatReceived).TotalSeconds;
                Console.WriteLine($"<3 ({timeBetween.ToString("N1")}s)");
                break;

            case (int)OpenApiLib.ProtoOAPayloadType.OA_EXECUTION_EVENT:
            {
                var msg          = "";
                var _payload_msg = msgFactory.GetExecutionEvent(rawData);

                if (_payload_msg.HasReasonCode)
                {
                    var executionType = _payload_msg.ExecutionType.ToString().Replace("OA_ORDER_", "");
                    var reason        = _payload_msg.HasReasonCode ? $"({_payload_msg.ReasonCode})" : "";
                    msg += $"*** [EXECUTION: {executionType} {reason}] *** ";
                }

                if (_payload_msg.HasOrder)
                {
                    orderId = _payload_msg.Order.OrderId;
                    var slPrice    = _payload_msg.Order.HasStopLossPrice ? " sl:" + _payload_msg.Order.StopLossPrice : "";
                    var tpPrice    = _payload_msg.Order.HasTakeProfitPrice ? " tp:" + _payload_msg.Order.TakeProfitPrice : "";
                    var limitPrice = _payload_msg.Order.HasLimitPrice ? " limit:" + _payload_msg.Order.LimitPrice : "";
                    var stopPrice  = _payload_msg.Order.HasStopPrice ? " stop:" + _payload_msg.Order.StopPrice : "";
                    msg += $"[ORDER {orderId}] {_payload_msg.Order.TradeSide} {_payload_msg.Order.RequestedVolume} {_payload_msg.Order.SymbolName} {limitPrice}{stopPrice} {slPrice}{tpPrice}";
                }
                else if (_payload_msg.HasPosition)
                {
                    positionId = _payload_msg.Position.PositionId;
                    var p = _payload_msg.Position;
                    msg += $"[POSITION {positionId}] {p.TradeSide} {p.Volume} {p.SymbolName} @ {p.EntryPrice}";
                }
                else
                {
                }
                Console.WriteLine(msg);
            }
            break;

            case (int)OpenApiLib.ProtoOAPayloadType.OA_AUTH_RES:
                //var payload = msgFactory.GetAuthorizationResponse(rawData);
                IsAuthorized = true;
                Console.WriteLine("[authorized]");
                break;

            case (int)OpenApiLib.ProtoOAPayloadType.OA_SPOT_EVENT:
            {
                if (rawData.Length > 40)
                {
                    Console.WriteLine("================= GOT LONG SPOT EVENT: " + rawData.Length + " ===================");
                }
                var payload = msgFactory.GetSpotEvent(rawData);

                WriteUnknownFields(_msg.PayloadType, payload);

                //var timestamp = timestampField.VarintList[0];
                //var time = new DateTime(1970, 1, 1) + TimeSpan.FromMilliseconds(timestamp);
                var time = new DateTime(1970, 1, 1) + TimeSpan.FromMilliseconds(payload.Timestamp);

                if (payload.TrendbarCount > 0 || payload.TrendbarList.Count > 0)
                {
                    foreach (var bar in payload.TrendbarList)
                    {
                        Console.WriteLine($"*********************** TRENDBAR: {bar.Period} o:{bar.Open} h:{bar.High} l:{bar.Low} c:{bar.Close} [v:{bar.Volume}]");
                        if (bar.Period == ProtoOATrendbarPeriod.H1)
                        {
                            AccountStats.Increment(StatEventType.H1Bar);
                        }
                        else if (bar.Period == ProtoOATrendbarPeriod.H1)
                        {
                            AccountStats.Increment(StatEventType.H1Bar);
                        }
                        else
                        {
                            AccountStats.Increment(StatEventType.Other);
                        }
                        throw new Exception("***** got a trendbar!  Celebrate!");
                    }
                }
                var tick = new SymbolTick
                {
                    Symbol = payload.SymbolName,
                    Ask    = payload.HasAskPrice ? payload.AskPrice : double.NaN,
                    Bid    = payload.HasBidPrice ? payload.BidPrice : double.NaN,
                    Time   = time
                };
                if (payload.HasAskPrice || payload.HasBidPrice)
                {
                    AccountStats.Increment(StatEventType.Tick);
#if DEBUG
                    //if (AccountStats.Totals.Ticks % 100 == 0)
                    //{
                    //    Debug.WriteLine($"[stats] {AccountStats.Totals.Ticks} ticks received");
                    //}
#endif
                }

                var symbol = (ISymbolInternal)GetSymbol(payload.SymbolName);

                symbol.OnTick(tick);
                break;
            }

            case (int)OpenApiLib.ProtoOAPayloadType.OA_SUBSCRIBE_FOR_SPOTS_RES:
            {
                var payload = msgFactory.GetSubscribeForSpotsResponse(rawData);

                uint?subId = payload.HasSubscriptionId ? (uint?)payload.SubscriptionId : null;
#if TRACE_SUBSCRIPTIONS
                Console.WriteLine($"[SUBSCRIBED] {subId}");
#endif

#if GET_SUBS_AFTER_SUB
                SendGetSpotSubscriptionReq(subId);
                SendGetAllSpotSubscriptionsReq();
#endif

                WriteUnknownFields(_msg.PayloadType, payload);
                break;
            }

            case (int)OpenApiLib.ProtoOAPayloadType.OA_UNSUBSCRIBE_FROM_SPOTS_RES:
            {
                var payload = msgFactory.GetUnsubscribeFromSpotsResponse(rawData);

                //uint? subId = payload. ? (uint?)payload.SubscriptionId : null;
                Debug.WriteLine($"[UNSUBSCRIBED]");

#if GET_SUBS_AFTER_SUB
                SendGetAllSpotSubscriptionsReq();
#endif

                WriteUnknownFields(_msg.PayloadType, payload);

                break;
            }

            case (int)OpenApiLib.ProtoOAPayloadType.OA_GET_ALL_SPOT_SUBSCRIPTIONS_RES:
            {
#if TRACE_SUBSCRIPTIONS
                Debug.WriteLine($"--- GET_ALL_SPOT_SUBSCRIPTIONS_RES: ---");
                var payload = msgFactory.GetGetAllSpotSubscriptionsResponse(rawData);
                foreach (var x in payload.SpotSubscriptionsList)
                {
                    foreach (var y in x.SubscribedSymbolsList)
                    {
                        Debug.Write($" - subscription {x.SubscriptionId}: {y.SymbolName} periods: ");
                        foreach (var z in y.PeriodList)
                        {
                            Debug.Write($" {z.ToString()}");
                        }
                        Debug.WriteLine();
                    }
                }
                Debug.WriteLine($"--------------------------------------- ");
#endif
            }
            break;

            case (int)OpenApiLib.ProtoOAPayloadType.OA_GET_SPOT_SUBSCRIPTION_RES:
            {
#if TRACE_SUBSCRIPTIONS
                var payload = msgFactory.GetGetSpotSubscriptionResponse(rawData);
                Debug.WriteLine($"--- GET_SPOT_SUBSCRIPTION_RES for subscription {payload.SpotSubscription.SubscriptionId}: --- ");
                foreach (var y in payload.SpotSubscription.SubscribedSymbolsList)
                {
                    Debug.Write($" - {y.SymbolName} periods: ");
                    foreach (var z in y.PeriodList)
                    {
                        Debug.Write($"{z.ToString()} ");
                    }
                    Debug.WriteLine();
                }
                Debug.WriteLine($"------------------------------------------------------ ");
#endif
            }
            break;

            case (int)OpenApiLib.ProtoOAPayloadType.OA_SUBSCRIBE_FOR_TRADING_EVENTS_RES:
            {
                var payload = msgFactory.GetSubscribeForTradingEventsResponse(rawData);
                Console.WriteLine("[TRADE EVENTS] SUBSCRIBED");
            }
            break;

            default:
                Console.WriteLine("UNHANDLED MESSAGE: " + _msg.PayloadType);
                break;
            }
            ;
        }
        public void Arrange()
        {
            _accountStats = new AccountStats
            {
                AccountId         = 10,
                OrganisationCount = 3,
                PayeSchemeCount   = 4,
                TeamMemberCount   = 8
            };

            _testTask = new AccountTask
            {
                Type          = "Test",
                ItemsDueCount = 2
            };

            _tasks = new List <AccountTask>
            {
                _testTask
            };

            _mediator = new Mock <IMediator>();
            _mediator.Setup(m => m.SendAsync(It.Is <GetEmployerAccountByHashedIdQuery>(q => q.HashedAccountId == HashedAccountId)))
            .ReturnsAsync(new GetEmployerAccountByHashedIdResponse
            {
                Account = new Account
                {
                    HashedId = HashedAccountId,
                    Id       = AccountId,
                    Name     = "Account 1"
                }
            });

            _mediator.Setup(x => x.SendAsync(It.IsAny <GetAccountTasksQuery>()))
            .ReturnsAsync(new GetAccountTasksResponse
            {
                Tasks = _tasks
            });

            _mediator.Setup(m => m.SendAsync(It.Is <GetUserAccountRoleQuery>(q => q.ExternalUserId == UserId)))
            .ReturnsAsync(new GetUserAccountRoleResponse
            {
                UserRole = Role.Owner
            });

            _mediator.Setup(m => m.SendAsync(It.Is <GetAccountEmployerAgreementsRequest>(q => q.HashedAccountId == HashedAccountId)))
            .ReturnsAsync(new GetAccountEmployerAgreementsResponse
            {
                EmployerAgreements = new List <EmployerAgreementStatusDto>
                {
                    new EmployerAgreementStatusDto
                    {
                        Pending = new PendingEmployerAgreementDetailsDto {
                            Id = 123
                        }
                    },
                    new EmployerAgreementStatusDto
                    {
                        Pending = new PendingEmployerAgreementDetailsDto {
                            Id = 124
                        }
                    },
                    new EmployerAgreementStatusDto
                    {
                        Pending = new PendingEmployerAgreementDetailsDto {
                            Id = 125
                        }
                    },
                    new EmployerAgreementStatusDto
                    {
                        Pending = new PendingEmployerAgreementDetailsDto {
                            Id = 126
                        }
                    },
                    new EmployerAgreementStatusDto
                    {
                        Signed = new SignedEmployerAgreementDetailsDto {
                            Id = 111
                        }
                    },
                    new EmployerAgreementStatusDto
                    {
                        Signed = new SignedEmployerAgreementDetailsDto {
                            Id = 112
                        }
                    },
                    new EmployerAgreementStatusDto
                    {
                        Signed = new SignedEmployerAgreementDetailsDto {
                            Id = 113
                        }
                    }
                }
            });

            _mediator.Setup(x => x.SendAsync(It.IsAny <GetTeamMemberQuery>()))
            .ReturnsAsync(new GetTeamMemberResponse {
                User = new MembershipView {
                    FirstName = "Bob"
                }
            });

            _mediator.Setup(x => x.SendAsync(It.IsAny <GetAccountStatsQuery>()))
            .ReturnsAsync(new GetAccountStatsResponse {
                Stats = _accountStats
            });

            _currentDateTime = new Mock <ICurrentDateTime>();

            _accountApiClient = new Mock <IAccountApiClient>();

            _accountApiClient.Setup(c => c.GetAccount(HashedAccountId)).ReturnsAsync(new AccountDetailViewModel
            {
                ApprenticeshipEmployerType = "Levy"
            });

            _mapper = new Mock <IMapper>();

            _orchestrator = new EmployerTeamOrchestrator(_mediator.Object, _currentDateTime.Object, _accountApiClient.Object, _mapper.Object);
        }
Пример #8
0
    public void LoadCb(string data)
    {
        var dataJson = SimpleJSON.JSON.Parse(data);

        if (dataJson["error"] != null)
            Debug.Log(dataJson["error"]);
        else
        {
            Debug.Log(dataJson["account"]["PlayerName"].Value);

            _playerName = dataJson["account"]["PlayerName"].Value;
            _playerLevel = int.Parse(dataJson["account"]["Level"].Value);
            _softCurrency = int.Parse(dataJson["account"]["SoftCurrency"].Value);
            _hardCurrency = int.Parse(dataJson["account"]["HardCurrency"].Value);
            _maxStamina = int.Parse(dataJson["account"]["Stamina"].Value);
            _currentStamina = 0;// int.Parse(d["CurrentStamina"].ToString());
            _currentExp = 0;//int.Parse(dataJson["account"]["CurrentExp"].Value);
            _expToNextLevel = 0; //int.Parse(d["ExpToNextLevel"].ToString());
            _rechargeTime = 0;// float.Parse(d["floatTime"].ToString());

            _stats = new AccountStats(int.Parse(dataJson["account"]["LogDays"].Value),
                                        int.Parse(dataJson["account"]["TotalLogDays"].Value),
                                        dataJson["account"]["LastLogDay"] == null ? DateTime.Now : DateTime.Parse(dataJson["account"]["LastLogDay"].Value));

            _inventory.LoadInventory(_playerId);
        }
    }