Beispiel #1
0
        public static ExchangeTriangulation[] GetTriangulationsForExchange(Exchange exchange)
        {
            var cycleFinder = new CycleFinder(exchange);
            var cycles      = cycleFinder.GetCycles();

            // From each cycle now generate the triangulation object!
            var triads = new List <ExchangeTriangulation>();

            foreach (var cycle in cycles)
            {
                var triad = new ExchangeTriangulation();

                for (int i = 0; i < cycle.Count; i++)
                {
                    // Get the trade pair representing currency[i] -> currency[i+1]
                    var fromCurrency = cycle[i];
                    var toCurrency   = cycle[(i + 1) % cycle.Count];

                    // Check if this is a forward edge.
                    try
                    {
                        var forwardPair = exchange.ExchangeTradePairs.SingleOrDefault(x => x.TradePair.FromCurrency.Id == fromCurrency.Id && x.TradePair.ToCurrency.Id == toCurrency.Id);
                        if (forwardPair != null)
                        {
                            triad.Edges.Add(new ExchangeTriangulationEdge()
                            {
                                IsReversed = false, CurrentPrice = new TradePairPrice()
                                {
                                    ExchangeTradePair = forwardPair
                                }
                            });
                        }
                        else
                        {
                            var backwardPaid = exchange.ExchangeTradePairs.Single(x => x.TradePair.FromCurrency.Id == toCurrency.Id && x.TradePair.ToCurrency.Id == fromCurrency.Id);
                            triad.Edges.Add(new ExchangeTriangulationEdge()
                            {
                                IsReversed = true, CurrentPrice = new TradePairPrice()
                                {
                                    ExchangeTradePair = backwardPaid
                                }
                            });
                        }
                    }
                    catch (Exception ex)
                    {
                        Console.ReadLine();
                    }
                }


                triads.Add(triad);
            }

            // return the triads.
            return(triads.ToArray());
        }
Beispiel #2
0
 internal TriangulationOpportunity(ExchangeTriangulation triangulation)
 {
     this.triangulation           = triangulation;
     this.initialEdge             = this.triangulation.Edges[0];
     this.OpportunityBaseCurrency = initialEdge.IsReversed ? initialEdge.CurrentPrice.TradePair.ToCurrency : initialEdge.CurrentPrice.TradePair.FromCurrency;
 }