private static Richesse TrouveProchaineEtape(Monnaie monnaieInitiale, Monnaie monnaiePivot, ValeurEchange valeurEchangeInitiale, ValeurEchange valeurEchangeFinale, ref int i, ref int j) { Richesse etapeSensNaturelle = valeurEchangeInitiale.GetRichesseToTrade(monnaieInitiale, i); Richesse etapeSensInverse = valeurEchangeInitiale.RichesseAvantTrade(valeurEchangeFinale.GetRichesseToTrade(monnaiePivot, j)); if (etapeSensNaturelle < etapeSensInverse) { ++i; return(etapeSensNaturelle); } ++j; return(etapeSensInverse); }
private TradeCirculaire CalculTradeCirculaireEnPartantDe(Monnaie m, ValeurEchange veInitiale, ValeurEchange ve12, ValeurEchange ve23, ValeurEchange ve31, Func <Richesse, ValeurEchange, ValeurEchange, ValeurEchange, TradeCirculaire> constructeurDepuisEtape) { TradeCirculaire tmp = null; TradeCirculaire bestTrade = constructeurDepuisEtape(new Richesse(0, m), ve12, ve23, ve31); int i = 0; while (tmp == null || tmp.Gain > bestTrade.Gain) { if (tmp != null) { bestTrade = tmp; } Richesse etape = veInitiale.GetRichesseToTrade(m, i++); tmp = constructeurDepuisEtape(etape, ve12, ve23, ve31); } return(bestTrade); }