示例#1
0
        /// <summary>
        /// Choose the best fiat value for this trade
        /// </summary>
        /// <param name="trade">Trade</param>
        /// <param name="provider">Provider</param>
        /// <param name="date">date</param>
        /// <returns>Decimal value</returns>
        public static decimal ChooseFiatValueForTrade(this Trade trade, FiatProviderBase provider, DateTime date)
        {
            // Check same as provider

            if (trade.From.Coin == provider.Coin)
            {
                trade.Fees = trade.SumarizeFees(trade.From.Coin == provider.Coin ? trade.To.Coin : trade.From.Coin);
                return(trade.From.Value);
            }
            else if (trade.To.Coin == provider.Coin)
            {
                trade.Fees = trade.SumarizeFees(trade.From.Coin == provider.Coin ? trade.To.Coin : trade.From.Coin);
                return(trade.To.Value);
            }
            else if (trade.From.Coin == ECoin.USD)
            {
                trade.Fees = trade.SumarizeFees(trade.From.Coin == provider.Coin ? trade.To.Coin : trade.From.Coin);
                return(trade.From.Value * provider.GetFiatPrice(null, ECoin.USD, date));
            }
            else if (trade.To.Coin == ECoin.USD)
            {
                trade.Fees = trade.SumarizeFees(trade.From.Coin == provider.Coin ? trade.To.Coin : trade.From.Coin);
                return(trade.To.Value * provider.GetFiatPrice(null, ECoin.USD, date));
            }

            // Check BTC first

            foreach (var market in AvailableMarkets)
            {
                if (!trade.FromOrToIs(market))
                {
                    continue;
                }

                var price = provider.GetFiatPrice(trade.Exchange, market, date);

                price     *= (trade.From.Coin == market ? trade.From.Value : trade.To.Value);
                trade.Fees = trade.SumarizeFees(trade.From.Coin == market ? trade.To.Coin : trade.From.Coin);

                return(price);
            }

            throw new ArgumentException("Market not found");
        }
示例#2
0
        /// <summary>
        /// Compute fiat values
        /// </summary>
        /// <param name="trades">Trades</param>
        /// <param name="provider">Provider</param>
        public static void ComputeFiatValues(this IEnumerable <Trade> trades, FiatProviderBase provider)
        {
            foreach (var trade in trades)
            {
                if (!trade.FiatCostWithoutFees.HasValue)
                {
                    trade.FiatCostWithoutFees = trade.ChooseFiatValueForTrade(provider, trade.Date);
                }

                if (!trade.FiatFees.HasValue)
                {
                    trade.FiatFees = 0;

                    foreach (var fee in trade.Fees)
                    {
                        trade.FiatFees += trade.ChooseFiatPriceForFee(provider, fee);
                    }
                }
            }
        }
示例#3
0
 /// <summary>
 /// Choose the best price for this trade
 /// </summary>
 /// <param name="provider">Provider</param>
 /// <param name="fee">Trade</param>
 /// <param name="trade">Trade</param>
 /// <returns>Decimal value</returns>
 public static decimal ChooseFiatPriceForFee(this Trade trade, FiatProviderBase provider, Quantity fee)
 {
     return(provider.GetFiatPrice(trade.Exchange, fee.Coin, trade.Date) * fee.Value);
 }