コード例 #1
0
ファイル: BaseController.cs プロジェクト: LykkeCity/LykkePay
        protected double CalculateValue(double value, int accuracy, AprRequest request, bool isPluse)
        {
            var origValue = value;
            var spread    = value * (Merchant.DeltaSpread / 100);

            value = isPluse ? (value + spread) : (value - spread);
            double lpFee  = value * (Merchant.LpMarkupPercent < 0 ? PayApiSettings.LpMarkup.Percent / 100 : Merchant.LpMarkupPercent / 100);
            double lpPips = Math.Pow(10, -1 * accuracy) * (Merchant.LpMarkupPips < 0 ? PayApiSettings.LpMarkup.Pips : Merchant.LpMarkupPips);

            var delta = spread + lpFee + lpPips;

            if (request != null)
            {
                var fee  = value * (request.Percent / 100);
                var pips = Math.Pow(10, -1 * accuracy) * request.Pips;

                delta += fee + pips;
            }

            var result = origValue + (isPluse ? delta : -delta);

            var powRound = Math.Pow(10, -1 * accuracy) * (isPluse ? 0.49 : 0.5);

            result += isPluse ? powRound : -powRound;
            var res  = Math.Round(result, accuracy);
            int mult = (int)Math.Pow(10, accuracy);


            res = Math.Ceiling(res * mult) / mult;

            if (res < 0)
            {
                res = 0;
            }

            return(res);
        }
コード例 #2
0
ファイル: BaseController.cs プロジェクト: LykkeCity/LykkePay
        protected async Task <AssertPairRateWithSession> GetRatesWithSession(string assertPair, AprRequest arpRequest)
        {
            var result = await GetRate(assertPair);

            var post = result as StatusCodeResult;

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

            var rate = (AssertPairRateWithSession)result;

            if (rate == null || arpRequest == null)
            {
                return(rate);
            }
            rate.Bid = CalculateValue(rate.Bid, rate.Accuracy, arpRequest, false);
            rate.Ask = CalculateValue(rate.Ask, rate.Accuracy, arpRequest, true);
            return(rate);
        }