private ExecutionReport OrderToTrade(Order order)
        {
            var id         = order.Id;
            var execTime   = order.Timestamp;
            var execPrice  = order.Price;
            var execVolume = order.ExecutedAmount;
            var tradeType  = BitfinexModelConverter.ConvertTradeType(order.Side);
            var status     = ConvertExecutionStatus(order);
            var instr      = _modelConverter.ExchangeSymbolToLykkeInstrument(order.Symbol);

            return(new ExecutionReport(instr, execTime, execPrice, execVolume, tradeType, id, status)
            {
                ExecType = ExecType.Trade,
                Success = true,
                FailureType = OrderStatusUpdateFailureType.None
            });
        }
        public override async Task <ExecutionReport> AddOrderAndWaitExecution(TradingSignal signal, TranslatedSignalTableEntity translatedSignal, TimeSpan timeout)
        {
            var symbol    = _modelConverter.LykkeSymbolToExchangeSymbol(signal.Instrument.Name);
            var volume    = signal.Volume;
            var orderType = _modelConverter.ConvertOrderType(signal.OrderType);
            var side      = _modelConverter.ConvertTradeType(signal.TradeType);
            var price     = signal.Price == 0 ? 1 : signal.Price ?? 1;
            var cts       = new CancellationTokenSource(timeout);

            var response = await _exchangeApi.AddOrder(symbol, volume, price, side, orderType, cts.Token);

            if (response is Error error)
            {
                throw new ApiException(error.Message);
            }

            var trade = OrderToTrade((Order)response);

            return(trade);
        }