public TradingContext(IExchangeCode exchange, string symbol, ITradingStrategy strategy, IEnumerable <ICandle> candles) { _exchange = exchange; _symbol = symbol; _strategy = strategy; _candles = candles; }
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)); }