示例#1
0
 public TradingContext(IExchangeCode exchange, string symbol, ITradingStrategy strategy, IEnumerable <ICandle> candles)
 {
     _exchange = exchange;
     _symbol   = symbol;
     _strategy = strategy;
     _candles  = candles;
 }
示例#2
0
 public Task <Trade> GetLastTrade(IExchangeCode exchangeCode, string symbol)
 {
     return(WithConnection((connection, transaction) =>
     {
         return _tradesManager.GetLast(exchangeCode.Code, symbol, connection, transaction);
     }));
 }
        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);
            });
        }
        public Task <Strategy> Get(IExchangeCode exchangeCode, string symbol, IDbConnection connection, IDbTransaction transaction = null)
        {
            string query = @"select
								*
							from
								Strategies str
							join
								PairConfigs pcfg
							on
								str.id = pcfg.strategyId
							where
								str.isDeleted = false
							and
								pcfg.exchangeCode = @exchangeCode
							and
								pcfg.symbol = @symbol;"                                ;

            return(connection.QueryFirstOrDefaultAsync <Strategy>(query,
                                                                  new
            {
                exchangeCode = exchangeCode.Code,
                symbol = symbol
            }, transaction));
        }