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); }