Beispiel #1
0
        /// <summary>
        /// для Открытого! ордера посчитать его профит в валюте депозита
        /// </summary>
        /// <param name="order">собственно ордер</param>
        /// <param name="quotes">словарь котировок - могут понадобиться 1..2 котировки</param>
        /// <param name="accountCurrency">валюта депозита</param>
        public float?CalculateProfitInDepoCurrency(MarketOrder order, Dictionary <string, QuoteData> quotes, string accountCurrency)
        {
            var curDepo = accountCurrency;

            if (string.IsNullOrEmpty(curDepo))
            {
                return(null);
            }

            // посчитать профит в контрвалюте
            QuoteData quote;

            if (!quotes.TryGetValue(order.Symbol, out quote))
            {
                return(null);
            }
            var profitInCounter = order.CalculateProfit(quote);

            // пересчет в валюту депо
            bool inverseRate, pairsAreEqual;
            var  smbCounterDepo = FindSymbol(order.Symbol, false,
                                             curDepo, out inverseRate, out pairsAreEqual);

            if (pairsAreEqual)
            {
                return(profitInCounter);
            }

            if (!quotes.TryGetValue(smbCounterDepo, out quote))
            {
                return(null);
            }
            var price = ((profitInCounter > 0 && inverseRate) || (profitInCounter < 0 && !inverseRate)) ?
                        quote.ask : quote.bid;

            return(inverseRate ? profitInCounter / price : profitInCounter *price);
        }