private static TradePivot MeilleurEchangeDepuis(Richesse dispo, ValeurEchange veEURO, ValeurEchange veUSD, Monnaie monnaiePivot) { Monnaie monnaieInitiale = dispo.Monnaie; // EURO ou USD var newTradePivot = monnaieInitiale == EURO ? TradePivot.newTradeEurUsd : TradePivot.newTradeUsdEur; ValeurEchange valeurEchangeInitiale = monnaieInitiale == EURO ? veEURO : veUSD; ValeurEchange valeurEchangeFinale = monnaieInitiale == EURO ? veUSD : veEURO; TradePivot tmp = null; Richesse richesseToTrade = new Richesse(0, monnaieInitiale); Richesse etape; TradePivot bestTrade = newTradePivot(richesseToTrade, veEURO, veUSD); int i = 0, j = 0; while (tmp == null || tmp.GainFee > bestTrade.GainFee) { if (tmp != null) { bestTrade = tmp; } etape = TrouveProchaineEtape(monnaieInitiale, monnaiePivot, valeurEchangeInitiale, valeurEchangeFinale, ref i, ref j); richesseToTrade = etape < dispo ? etape : dispo; tmp = newTradePivot(richesseToTrade, veEURO, veUSD); } if (bestTrade.GainFee.Quantite > 0) { return(bestTrade); } return(null); }
internal TreeSet <TradePivot> TrouveMeilleurEchangeEURUSD(Richesse dispoEuro, Richesse dispoUSD) { TreeSet <TradePivot> ret = new TreeSet <TradePivot>(); foreach (Monnaie monnaiePivot in MonnaieTradableEURUSD) { if (BaseEtQuoteToVe.TryGetValue(EURO, monnaiePivot, out ValeurEchange veEURO) && BaseEtQuoteToVe.TryGetValue(USD, monnaiePivot, out ValeurEchange veUSD)) { TradePivot bestTrade = MeilleurEchangeDepuis(dispoEuro, veEURO, veUSD, monnaiePivot); if (bestTrade == null) { bestTrade = MeilleurEchangeDepuis(dispoUSD, veEURO, veUSD, monnaiePivot); } if (bestTrade != null) { ret.Add(bestTrade); } } } return(ret); }