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);
 }
Example #2
0
        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);
        }
Example #3
0
 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);
 }
Example #4
0
 private void AddDictionnaire(Monnaie mbase, Monnaie quote, ValeurEchange ve)
 {
     BaseEtQuoteToVe.Add(mbase, quote, ve);
     Pairs.Add(ve);
     MonnaieTradable.Add(mbase);
     MonnaieTradable.Add(quote);
 }
Example #5
0
 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);
 }
Example #6
0
        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);
                }
            });
        }
Example #7
0
        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;
 }
Example #10
0
        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);
        }
Example #11
0
 public SimpleMarketTrade(ValeurEchange pair, OrderType action, Richesse objetRichesse) : base(pair, action, objetRichesse)
 {
 }
Example #12
0
 internal Trade(ValeurEchange pair, OrderType action, Richesse objetRichesse)
 {
     this.pair          = pair;
     this.action        = action;
     this.objetRichesse = objetRichesse;
 }