Exemplo n.º 1
0
        protected override async Task ExecuteAsync(CancellationToken stoppingToken)
        {
            ExchangeConfig config = await _exchangeConfigProcessor.GetExchangeConfig(Exchange.Code);

            if (config == null)
            {
                _logger.LogError($"Config for {Exchange.Description} is not found");
                return;
            }

            List <Task> tasks = new List <Task>();

            if (config.IsEnabled)
            {
                foreach (var pair in config.Pairs)
                {
                    if (pair.IsEnabled)
                    {
                        Task t = Task.Run(() => DoWork(pair, stoppingToken));
                        tasks.Add(t);
                    }
                    else
                    {
                        _logger.LogInformation($"Pair '{pair.Symbol}' is disabled");
                    }
                }

                await Task.WhenAll(tasks.ToArray());
            }
            else
            {
                _logger.LogInformation($"Exchange '{ExchangeCode.Create(config.ExchangeCode).Description}' is disabled");
            }
        }
        public async Task StopLoss(Trade trade, PairConfig config)
        {
            await WithConnection(async (connection, transaction) =>
            {
                IExchangeCode exchangeCode = ExchangeCode.Create(trade.ExchangeCode);

                IEnumerable <Deal> deals = await _dealManager.GetOpenDeals(trade.ExchangeCode, trade.Symbol, connection, transaction);
                foreach (Deal deal in deals)
                {
                    deal.Orders = await _orderManager.GetOrdersByDealId(deal.Id, connection, transaction) as List <Order>;
                    if (deal.StopLoss.HasValue && trade.Price < deal.StopLoss.Value)
                    {
                        foreach (Order dealOrder in deal.Orders)
                        {
                            if (dealOrder.OrderStatusCode == OrderStatusCode.PENDING.Code || dealOrder.OrderStatusCode == OrderStatusCode.EXPIRED.Code || dealOrder.OrderStatusCode == OrderStatusCode.HOLD.Code)
                            {
                                await _orderManager.Delete(dealOrder.Id, connection, transaction);
                            }
                            else if (dealOrder.OrderStatusCode == OrderStatusCode.LISTED.Code)
                            {
                                dealOrder.OrderStatusCode = OrderStatusCode.CANCELED.Code;
                                dealOrder.Updated         = DateTime.UtcNow;
                                dealOrder.UpdateRequired  = true;

                                await _orderManager.Update(dealOrder, connection, transaction);

                                NatsClient client = _connector.Client;
                                await client.PubAsJsonAsync(_settings.Value.OrdersQueueName, new Notification <Order>()
                                {
                                    Code = ActionCode.UPDATED.Code, Payload = dealOrder
                                });
                            }
                        }

                        Order order            = new Order();
                        order.ExchangeCode     = trade.ExchangeCode;
                        order.Symbol           = trade.Symbol;
                        order.TradingModeCode  = TradingModeCode.AUTO;
                        order.FillPoliticsCode = FillPoliticsCode.GTC;
                        order.OrderStatusCode  = OrderStatusCode.PENDING;
                        order.DealId           = deal.Id;
                        order.OrderTypeCode    = OrderTypeCode.MKT;
                        order.OrderSideCode    = OrderSideCode.SELL;
                        order.Amount           = deal.Amount;

                        order.Id = await _orderManager.Create(order, connection, transaction);
                    }
                }

                return(Task.CompletedTask);
            });
        }
Exemplo n.º 3
0
        public static ExchangeConfigModel ToModel(this ExchangeConfig entity)
        {
            ExchangeConfigModel model = new ExchangeConfigModel();

            model.Id             = entity.Id;
            model.ExchangeCodeId = entity.ExchangeCode;
            model.ExchangeName   = ExchangeCode.Create(entity.ExchangeCode).Description;
            model.IsEnabled      = entity.IsEnabled;
            model.ApiKey         = entity.ApiKey;
            model.ApiSecret      = entity.ApiSecret;
            model.Pairs          = entity.Pairs;
            return(model);
        }
Exemplo n.º 4
0
        public async Task <IActionResult> AssignedPairs(int id)
        {
            IEnumerable <Asset> assets = await _assetProcessor.GetAll();

            IEnumerable <PairConfig> assignedPairs = await _pairConfigProcessor.GetAssigned(id);

            PairConfigsModel model = new PairConfigsModel();

            model.ExchangeCode = id;
            model.ExchangeName = ExchangeCode.Create(id).Description;
            model.Configs      = assignedPairs.ToList();
            model.AllAssets    = assets.Select(x => new SelectListItem(x.Name, x.Code)).ToList();

            return(View(model));
        }