internal TradeEurUsd(Richesse richesseEurToTrade, ValeurEchange veEURO, ValeurEchange veUSD) : base(veEURO, veUSD) { Investissement = richesseEurToTrade; EtapePivot = veEURO.RichesseApresTrade(richesseEurToTrade); richesseUsdApresTrade = veUSD.RichesseApresTrade(EtapePivot); ApresTrade = Portefeuille.ConvertUsdEnEuro(richesseUsdApresTrade); }
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 TradeCirculaire(ValeurEchange m1m2, Richesse etapeM2, ValeurEchange m2m3, ValeurEchange m3m1) : base(3) { Investissement = m1m2.RichesseAvantTrade(etapeM2); EtapeM2 = Investissement.Quantite > 0 ? etapeM2 : new Richesse(0, etapeM2.Monnaie); EtapeM3 = m2m3.RichesseApresTrade(EtapeM2); ApresTrade = m3m1.RichesseApresTrade(EtapeM3); }
private void AddDictionnaire(Monnaie mbase, Monnaie quote, ValeurEchange ve) { BaseEtQuoteToVe.Add(mbase, quote, ve); Pairs.Add(ve); MonnaieTradable.Add(mbase); MonnaieTradable.Add(quote); }
internal TradeCirculaire(Richesse richesseInitialeM1, ValeurEchange m1m2, ValeurEchange m2m3, ValeurEchange m3m1) : base(3) { Investissement = richesseInitialeM1; EtapeM2 = m1m2.RichesseApresTrade(richesseInitialeM1); EtapeM3 = m2m3.RichesseApresTrade(EtapeM2); ApresTrade = m3m1.RichesseApresTrade(EtapeM3); }
internal Site() { BaseEtQuoteToVe = new InterchangableBiKeyDictionnary <Monnaie, ValeurEchange>(); var requeteMonnaies = client.GetActiveAssets(); var listeMonnaies = (JsonObject)requeteMonnaies["result"]; foreach (string key in listeMonnaies.Names) { new Monnaie(key, (JsonObject)listeMonnaies[key]); } var requeteValeursEchanges = client.GetAssetPairs(); var valeursEchanges = (JsonObject)requeteValeursEchanges["result"]; var exceptions = new ConcurrentQueue <Exception>(); Parallel.ForEach(valeursEchanges.Names.Cast <string>(), (key) =>//foreach (string key in valeursEchanges.Names) { try { if (!key.Contains(".d")) { var valeurEchange = (JsonObject)valeursEchanges[key]; Monnaie monnaieDeBase = GetMonnaie((string)valeurEchange["base"]); Monnaie monnaieDeQuote = GetMonnaie((string)valeurEchange["quote"]); Monnaie feeVolumeMonnaie = GetMonnaie((string)valeurEchange["fee_volume_currency"]); var ve = new ValeurEchange(key, monnaieDeBase, monnaieDeQuote, feeVolumeMonnaie, valeurEchange); if (!ve.FeesMaker.IsEmpty) { AddDictionnaire(monnaieDeBase, monnaieDeQuote, ve); } } } catch (Exception ex) { exceptions.Enqueue(ex); } }); if (exceptions.Count > 0) { throw new AggregateException(exceptions); } Parallel.ForEach(MonnaieTradable, (monnaie) => { if (BaseEtQuoteToVe.ContainsKeys(monnaie, EURO) && BaseEtQuoteToVe.ContainsKeys(monnaie, USD)) { MonnaieTradableEURUSD.Add(monnaie); } }); }
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); }
internal void MetAJour(string idName, ValeurEchange ve) { //TODO : affiner les frais var json = Site.client.GetOrderBook(idName); var jsonResult = (JsonObject)((JsonObject)json["result"])[idName]; var jsonAsks = (JsonArray)jsonResult["asks"]; var jsonBids = (JsonArray)jsonResult["bids"]; PositionsAchatBase.Clear(); PositionsVenteBase.Clear(); foreach (JsonArray jsonAsk in jsonAsks) { PositionsAchatBase.Add(new PositionAchatBase(jsonAsk, monnaieDeBase, monnaieDeQuote)); } foreach (JsonArray jsonBid in jsonBids) { PositionsVenteBase.Add(new PositionVenteBase(jsonBid, monnaieDeBase, monnaieDeQuote)); } }
internal TradePivot(ValeurEchange veEURO, ValeurEchange veUSD) : base(2) { this.veEuro = veEURO; this.veUSD = veUSD; monnaiePivot = veEURO.MonnaieDeQuote == Monnaie.EURO ? veEURO.MonnaieDeBase : veEURO.MonnaieDeQuote; }
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); }
public SimpleMarketTrade(ValeurEchange pair, OrderType action, Richesse objetRichesse) : base(pair, action, objetRichesse) { }
internal Trade(ValeurEchange pair, OrderType action, Richesse objetRichesse) { this.pair = pair; this.action = action; this.objetRichesse = objetRichesse; }