Exemple #1
0
        public async Task <ValidationResult> ValidateLimitOrderAsync(string assetPairId, decimal price, decimal volume)
        {
            if (price <= 0)
            {
                return(new ValidationResult
                {
                    Code = HftApiErrorCode.InvalidField,
                    Message = HftApiErrorMessages.LessThanZero(nameof(price)),
                    FieldName = nameof(price)
                });
            }

            if (volume <= 0)
            {
                return(new ValidationResult
                {
                    Code = HftApiErrorCode.InvalidField,
                    Message = HftApiErrorMessages.LessThanZero(nameof(volume)),
                    FieldName = nameof(volume)
                });
            }

            var assetPair = await _assetsService.GetAssetPairByIdAsync(assetPairId);

            if (assetPair == null)
            {
                return(new ValidationResult
                {
                    Code = HftApiErrorCode.ItemNotFound,
                    Message = HftApiErrorMessages.AssetPairNotFound,
                    FieldName = nameof(assetPairId)
                });
            }

            if (volume < assetPair.MinVolume)
            {
                return(new ValidationResult
                {
                    Code = HftApiErrorCode.InvalidField,
                    Message = HftApiErrorMessages.MustBeGreaterThan(nameof(volume), assetPair.MinVolume.ToString(CultureInfo.InvariantCulture)),
                    FieldName = nameof(volume)
                });
            }

            return(null);
        }
        public async Task <ValidationResult> ValidateTradesRequestAsync(string assetPairId, int?offset, int?take)
        {
            var assetPairResult = await ValidateAssetPairAsync(assetPairId);

            if (assetPairResult != null)
            {
                return(assetPairResult);
            }

            if (offset.HasValue && offset < 0)
            {
                return(new ValidationResult
                {
                    Code = HftApiErrorCode.InvalidField,
                    Message = HftApiErrorMessages.LessThanZero(nameof(offset)),
                    FieldName = nameof(offset)
                });
            }

            if (take.HasValue && take < 0)
            {
                return(new ValidationResult
                {
                    Code = HftApiErrorCode.InvalidField,
                    Message = HftApiErrorMessages.LessThanZero(nameof(take)),
                    FieldName = nameof(take)
                });
            }

            if (take.HasValue && take > Constants.MaxPageSize)
            {
                return(new ValidationResult
                {
                    Code = HftApiErrorCode.InvalidField,
                    Message = HftApiErrorMessages.TooBig(nameof(take), take.Value.ToString(), Constants.MaxPageSize.ToString()),
                    FieldName = nameof(take)
                });
            }

            return(null);
        }
        public async Task <ValidationResult> ValidateWithdrawalRequestAsync(string assetId, decimal volume)
        {
            if (volume <= 0)
            {
                return(new ValidationResult
                {
                    Code = HftApiErrorCode.InvalidField,
                    Message = HftApiErrorMessages.LessThanZero(nameof(volume)),
                    FieldName = nameof(volume)
                });
            }

            var assetResult = await ValidateAssetAsync(assetId);

            if (assetResult != null)
            {
                return(assetResult);
            }

            return(null);
        }
        public async Task <ValidationResult> ValidateLimitOrderAsync(string walletId, string assetPairId, OrderAction side, decimal price, decimal volume)
        {
            if (price <= 0)
            {
                return(new ValidationResult
                {
                    Code = HftApiErrorCode.InvalidField,
                    Message = HftApiErrorMessages.LessThanZero(nameof(price)),
                    FieldName = nameof(price)
                });
            }

            if (volume <= 0)
            {
                return(new ValidationResult
                {
                    Code = HftApiErrorCode.InvalidField,
                    Message = HftApiErrorMessages.LessThanZero(nameof(volume)),
                    FieldName = nameof(volume)
                });
            }

            var assetPair = await _assetsService.GetAssetPairByIdAsync(assetPairId);

            if (assetPair == null)
            {
                return(new ValidationResult
                {
                    Code = HftApiErrorCode.ItemNotFound,
                    Message = HftApiErrorMessages.AssetPairNotFound,
                    FieldName = nameof(assetPairId)
                });
            }

            if (volume < assetPair.MinVolume)
            {
                return(new ValidationResult
                {
                    Code = HftApiErrorCode.InvalidField,
                    Message = HftApiErrorMessages.MustBeGreaterThan(nameof(volume), assetPair.MinVolume.ToString(CultureInfo.InvariantCulture)),
                    FieldName = nameof(volume)
                });
            }

            decimal totalVolume;
            string  asset;

            if (side == OrderAction.Buy)
            {
                asset       = assetPair.QuoteAssetId;
                totalVolume = price * volume;
            }
            else
            {
                asset       = assetPair.BaseAssetId;
                totalVolume = volume;
            }

            var balances = await _balanceService.GetBalancesAsync(walletId);

            var assetBalance = balances.FirstOrDefault(x => x.AssetId == asset);

            if (assetBalance == null || assetBalance.Available - assetBalance.Reserved < totalVolume)
            {
                return(new ValidationResult
                {
                    Code = HftApiErrorCode.MeNotEnoughFunds,
                    Message = "Not enough funds",
                    FieldName = nameof(volume)
                });
            }

            return(null);
        }