private async void ContextApi_StreamingEventReceived(object sender, Tinkoff.Trading.OpenApi.Network.StreamingEventReceivedEventArgs e) { var response = (CandleResponse)e.Response; var payload = response.Payload; var close = (double)payload.Close; var serverTime = payload.Time; await _hubContext.Clients.All.SendAsync("Send", JsonConvert.SerializeObject(payload)); var orders = OperationsHistoryCache.operations.Where(x => x.operationStatus == Data.Enums.OperationStatus.Done && x.orderType == Data.Enums.OrderType.Buy && x.Status == Data.Enums.Status.Open ).ToArray(); foreach (var order in orders) { var stopLoss = order.StopLoss.Value; var takeProfit = order.TakeProfit.Value; var time = order.time; var expire = order.Expire; time = time.AddSeconds(expire.TotalSeconds); if (close <= stopLoss || close >= takeProfit || serverTime >= time) { await _service.PlaceMarketOrderAsync(order.figi, order.lots, OperationType.Sell, null, null); } } }
public async Task <IActionResult> PlaceMarketOrderAsync([FromBody] PlaceMarkerBody placeMarkerBody, string figi, int lots, int operationType) { try { var stopLoss = placeMarkerBody.stopLoss; var takeProfit = placeMarkerBody.takeProfit; var result = await _tinkoffService.PlaceMarketOrderAsync(figi, lots, (OperationType)operationType, stopLoss, takeProfit); return(this.Ok(result)); } catch (Exception e) { return(this.StatusCode(StatusCodes.Status400BadRequest, e.Message)); } }