Ejemplo n.º 1
0
        public static double Convert(this ProtoOAAsset symbolQuoteAsset, IEnumerable <Tuple <ProtoOAAsset, ProtoOAAsset, double> > conversionAssets)
        {
            _ = conversionAssets ?? throw new ArgumentNullException(nameof(conversionAssets));

            if (!conversionAssets.Any())
            {
                throw new ArgumentOutOfRangeException(nameof(conversionAssets), conversionAssets, $"The {nameof(conversionAssets)} is empty");
            }
            if (conversionAssets.Any(asset => asset.Item3 is 0))
            {
                throw new ArgumentOutOfRangeException(nameof(conversionAssets), conversionAssets, $"Some of the '{nameof(conversionAssets)}' price values or zero");
            }

            double result = 1;

            var asset = symbolQuoteAsset;

            foreach (var(baseAsset, quoteAsset, price) in conversionAssets)
            {
                if (asset.AssetId == baseAsset.AssetId)
                {
                    result *= price;

                    asset = quoteAsset;
                }
                else
                {
                    result /= price;

                    asset = baseAsset;
                }
            }

            return(result);
        }
Ejemplo n.º 2
0
        public static double GetTickValue(this ProtoOASymbol symbol, ProtoOAAsset symbolQuoteAsset, ProtoOAAsset accountDepositAsset, IEnumerable <Tuple <ProtoOAAsset, ProtoOAAsset, double> > conversionAssets)
        {
            _ = symbol ?? throw new ArgumentNullException(nameof(symbol));
            _ = symbolQuoteAsset ?? throw new ArgumentNullException(nameof(symbolQuoteAsset));
            _ = accountDepositAsset ?? throw new ArgumentNullException(nameof(accountDepositAsset));

            double tickValue;

            var symbolTickSize = symbol.GetTickSize();

            if (symbolQuoteAsset.AssetId == accountDepositAsset.AssetId)
            {
                tickValue = symbolTickSize;
            }
            else
            {
                tickValue = symbolTickSize * Convert(symbolQuoteAsset, conversionAssets);
            }

            return(tickValue);
        }