Exemplo n.º 1
0
        public OperationResult UpdateManagerBalance(NewTradeEvent tradeEvent)
        {
            return(InvokeOperations.InvokeOperation(() =>
            {
                var manager = context.ManagersAccounts.FirstOrDefault(x => x.Id == tradeEvent.ManagerAccountId);
                if (manager == null)
                {
                    return;
                }

                manager.Balance = tradeEvent.Balance;
                context.SaveChanges();
            }));
        }
Exemplo n.º 2
0
        public List <string> ValidateNewTrade(ApplicationUser user, NewTradeEvent tradeEvent)
        {
            var result = new List <string>();

            var mangerAccount = context.ManagersAccounts
                                .FirstOrDefault(x => x.Id == tradeEvent.ManagerAccountId &&
                                                x.BrokerTradeServer.Broker.UserId == user.Id);

            if (mangerAccount == null)
            {
                result.Add("Manager account does not exist");
            }

            return(result);
        }
Exemplo n.º 3
0
        public IActionResult NewTrade([FromBody] NewTradeEvent tradeEvent)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ErrorResult.GetResult(ModelState)));
            }

            var errors = brokerValidator.ValidateNewTrade(CurrentUser, tradeEvent);

            if (errors.Any())
            {
                return(BadRequest(ErrorResult.GetResult(errors, ErrorCodes.ValidationError)));
            }

            tradesService.SaveNewTrade(tradeEvent);
            trustManagementService.UpdateManagerBalance(tradeEvent);

            return(Ok());
        }
Exemplo n.º 4
0
        private void LoadNextData()
        {
            if (_queue.Count == 0)
            {
                return;
            }

            SortedDictionary <long, rowQshData> data = _queue.Dequeue();

            foreach (KeyValuePair <long, rowQshData> rowdata in data)
            {
                if (rowdata.Value.depth.Count > 0)
                {
                    foreach (var dep in rowdata.Value.depth)
                    {
                        NewMarketDepthEvent?.Invoke(dep);
                    }
                }

                if (rowdata.Value.trade.Count > 0)
                {
//Для каждого типа бумаги надо отправлять евент trade отдельно
//иначе они перемешиваются в ConnectorCandles
//Так как там проверки делаются по первому попавшемуся трейду и последнему трейду в списке отправленных
//_activSeries[i].Security.Name == trades[0].SecurityNameCode
// tradesList[count - 1].SecurityNameCode != SecurityName
//Со стаканом такой проблемы нет, т.к. они посылаются по одному

                    _alltrades.AddRange(rowdata.Value.trade);
                    NewTradeEvent?.Invoke(_alltrades);

                    //для каждого трейда проверить исполнение ордеров
                    CheckOrders(rowdata.Value.trade);
                }

                //if another info

                //Чтобы успеть нарисовать, тут так же можно регулировать скорость отрисовки
                // Thread.Sleep(1);
            }
        }
Exemplo n.º 5
0
        public OperationResult SaveNewTrade(NewTradeEvent tradeEvent)
        {
            return(InvokeOperations.InvokeOperation(() =>
            {
                var manager = context.ManagersAccounts
                              .Include(x => x.BrokerTradeServer)
                              .First(x => x.Id == tradeEvent.ManagerAccountId);
                var type = manager.BrokerTradeServer.Type;
                var count = 0;

                switch (type)
                {
                case BrokerTradeServerType.MetaTrader4:
                    var mt4Orders = (IEnumerable <IMetaTrader4Order>)tradeEvent.Trades;
                    foreach (var mt4Order in mt4Orders.Where(x => (x.Direction == TradeDirectionType.Buy || x.Direction == TradeDirectionType.Sell) && x.DateClose?.Year > 2000))
                    {
                        context.Add(new ManagersAccountsTrades
                        {
                            Id = Guid.NewGuid(),
                            ManagerAccountId = tradeEvent.ManagerAccountId,
                            Ticket = mt4Order.Ticket,
                            Symbol = mt4Order.Symbol,
                            Volume = mt4Order.Volume,
                            Profit = mt4Order.Profit,
                            Direction = mt4Order.Direction,
                            DateOpen = mt4Order.DateOpen,
                            DateClose = mt4Order.DateClose,
                            PriceOpen = mt4Order.PriceOpen,
                            PriceClose = mt4Order.PriceClose
                        });
                        count++;
                    }
                    break;

                case BrokerTradeServerType.MetaTrader5:
                    var mt5Orders = (IEnumerable <IMetaTrader5Order>)tradeEvent.Trades;
                    foreach (var mt5Order in mt5Orders.Where(x => x.Direction == TradeDirectionType.Buy || x.Direction == TradeDirectionType.Sell))
                    {
                        context.Add(new ManagersAccountsTrades
                        {
                            Id = Guid.NewGuid(),
                            ManagerAccountId = tradeEvent.ManagerAccountId,
                            Ticket = mt5Order.Ticket,
                            Symbol = mt5Order.Symbol,
                            Volume = mt5Order.Volume,
                            Profit = mt5Order.Profit,
                            Direction = mt5Order.Direction,
                            Date = mt5Order.Date,
                            Price = mt5Order.Price,
                            Entry = mt5Order.Entry
                        });
                        count++;
                    }
                    break;

                default:
                    throw new NotSupportedException();
                }

                manager.OrdersCount += count;

                context.SaveChanges();
            }));
        }