private async Task <Fee> GetFee(string brokerId, string assetPair) { var tradingFee = await GetTradingFeeAsync(brokerId, assetPair); var settings = await GetFeesSettingsAsync(brokerId); if (tradingFee == null) { _logger.LogWarning("TradingFee from Exchange.Fees is null. The fee is set to 0. " + "BrokerId={@BrokerId}; AssetPair={@AssetPair}", brokerId, assetPair); return(NoFee()); } if (settings == null) { _logger.LogWarning("Settings is null. The fee is set to 0." + "BrokerId={@BrokerId}", brokerId); return(NoFee()); } if (settings.FeeWalletId == 0) { _logger.LogWarning("FeeWalletId is 0. The fee is set to 0. BrokerId={@BrokerId}", brokerId); return(NoFee()); } if (tradingFee.Levels == null || tradingFee.Levels.Count == 0) { _logger.LogWarning("TradingFee from Exchange.Fees has no levels. The fee is set to 0. " + "BrokerId={@BrokerId}; AssetPair={@AssetPair}", brokerId, assetPair); return(NoFee()); } var feeAccountId = settings.FeeAccountId; var feeWalletId = settings.FeeWalletId; // TODO: take first level as we don't have 30 days volume yet var level = tradingFee.Levels.OrderBy(x => x.Volume).First(); var size = level.TakerFee / 100; var feeType = size == 0 ? (int)FeeType.NoFee : (int)FeeType.ClientFee; var result = new Fee { Size = size.ToString(CultureInfo.InvariantCulture), SizeType = (int)FeeSizeType.Percentage, TargetAccountId = (ulong)feeAccountId, TargetWalletId = (ulong?)feeWalletId, Type = feeType }; return(result); }
private async Task <Fee> GetFeeAsync(string brokerId, string asset, RequestType requestType) { var cashOperationsFee = await GetCashOperationsFeeAsync(brokerId, asset); var settings = await GetFeesSettingsAsync(brokerId); if (cashOperationsFee == null) { _logger.LogWarning("CashOperationsFee from Exchange.Fees is null. The fee is set to 0. " + "BrokerId={@BrokerId}; Asset={@Asset}", brokerId, asset); return(NoFee()); } if (settings == null) { _logger.LogWarning("Settings is null. The fee is set to 0." + "BrokerId={@BrokerId}", brokerId); return(NoFee()); } if (settings.FeeWalletId == 0) { _logger.LogWarning("FeeWalletId is 0. The fee is set to 0. BrokerId={@BrokerId}", brokerId); return(NoFee()); } decimal value = 0; var feeType = CashOperationsFeeTypeModel.Absolute; switch (requestType) { case RequestType.CashIn: value = cashOperationsFee.CashInValue; feeType = cashOperationsFee.CashInFeeType; break; case RequestType.CashOut: value = cashOperationsFee.CashOutValue; feeType = cashOperationsFee.CashOutFeeType; break; case RequestType.Transfer: value = cashOperationsFee.CashTransferValue; feeType = cashOperationsFee.CashTransferFeeType; break; } var result = new Fee { Size = Map(value, feeType).ToString(CultureInfo.InvariantCulture), SizeType = (int)Map(feeType), TargetAccountId = (ulong)settings.FeeAccountId, TargetWalletId = (ulong)settings.FeeWalletId, Type = (int)Map(value) }; return(result); }