public async Task <OrderResponse> Lancer() { while (ContinuerDeBoucler) { var cotation = await pair.DerniereCotation(); DernierOrdre = ChopperDernierOrdre(); if (DernierOrdre != null) { DernierOrdre = await pair.EtatOrdre(DernierOrdre.Id.ToString()); } if (DernierOrdre != null && DernierOrdre.Status != OrderStatus.Done && DernierOrdre.Side == OrderSide.Buy && ((DernierOrdre.Price - cotation.Price) > 0 || ((cotation.Price - DernierOrdre.Price)) > (cotation.Price * PourcentageAvantAnnulationAchat / 100))) { await pair.AnnulerOrdreOuvert(DernierOrdre.Id.ToString()); DernierOrdre = null; } if (DernierOrdre == null || (DernierOrdre.Side == OrderSide.Sell && DernierOrdre.Status == OrderStatus.Done)) { var compte = await pair.AvoirDuCompteFiat(); var derniereCotation = await pair.DerniereCotation(); var equivalentCryptoDuMontant = (montantFiatOrdre / derniereCotation.Price); if (compte.Available < equivalentCryptoDuMontant) { montantFiatOrdre = compte.Available; } LoggerAH.Debug(nameof(montantFiatOrdre) + ": " + montantFiatOrdre + " " + pair.NomFiat); var limiteAchat = derniereCotation.Price - (derniereCotation.Price * (pourcentageBaisseAvantAchat / 100)); var ordre = await pair.Acheter(Math.Round(equivalentCryptoDuMontant, tailleMinimum), Math.Round(limiteAchat, tailleMinimum)); SauvegarderOrdre(ordre); // return ordre; } if (DernierOrdre != null && DernierOrdre.Side == OrderSide.Buy && DernierOrdre.Status == OrderStatus.Done) { var compte = await pair.AvoirDuCompteCrypto(); var derniereCotation = await pair.DerniereCotation(); var equivalentCryptoDuMontant = (montantFiatOrdre / derniereCotation.Price); if (compte.Available < equivalentCryptoDuMontant) { montantFiatOrdre = compte.Available; } var limiteVente = derniereCotation.Price + (derniereCotation.Price * pourcentageHausseAvantVente / 100); var ordre = await pair.Vendre(Math.Round(equivalentCryptoDuMontant, tailleMinimum), Math.Round(limiteVente, tailleMinimum)); SauvegarderOrdre(ordre); // return ordre; } //var dureeAttente = DateTime.Now.Subtract(dernierOrdre.CreatedAt.ToLocalTime()); //if (dureeAttente > TimeSpan.FromMinutes(20) && statusOrdre.Side == OrderSide.Buy && (statusOrdre.Status == OrderStatus.Open || statusOrdre.Status == OrderStatus.Pending)) // si ordre d'achat prend trop de temps, renouveler //{ // await pair.AnnulerOrdreOuvert(dernierOrdre.Id.ToString()); // dernierOrdre = null; //} await Task.Delay(MillisecondsDelay); } return(DernierOrdre); }