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);
                }
            }
        }
示例#2
0
        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));
            }
        }