コード例 #1
0
        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);
        }
コード例 #2
0
        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);
        }