Пример #1
0
 public override void Init(admin_zeegzagContext db)
 {
     ExchangeId = 0;
     CreatePuller("volumer", 60 * 10, 120, OnVoluming, false);
     //CreatePuller("clear-history",60, 120 + (60*5), OnClearHistory, false);
     CreatePuller("arbitrage", 60, 120, OnCalculateArbitrage, false);
 }
Пример #2
0
        /// <inheritdoc />
        public void Execute(admin_zeegzagContext db)
        {
            var alias      = ";" + _currencyShort + ";";
            var currencyId = CachingService.CurrencyIdByName(_currencyShort,
                                                             () => db.CurrencyT.FirstOrDefault(c => c.ShortName == _currencyShort || c.Alias.Contains(alias))?.Id);

            if (!currencyId.HasValue)
            {
                if (_isActive.GetValueOrDefault(true))
                {
                    //add new coin (since we do not call savechanges() immediately, we do not have id yet. So txfee will be updated on next turn)
                    db.CurrencyT.Add(new CurrencyT()
                    {
                        Name      = _currencyLong ?? _currencyShort,
                        ShortName = _currencyShort,
                    });
                    DatabaseService.EnqueueBroadcast(437907950, $"New coin is added to ZeegZag: {_currencyShort}",
                                                     new InlineKeyboardMarkup(new InlineKeyboardButton[] { new InlineKeyboardUrlButton("Advertise here", "https://www.zeegzag.com"), }));
                }
            }
            else
            {
                //update txfee
                var borsaCurrency = db.BorsaCurrencyT
                                    .Where(bc => bc.BorsaId == _exchangeId && bc.ToCurrencyId == currencyId).ToList();
                foreach (var bc in borsaCurrency)
                {
                    bc.TxFee = _txFee;
                    if (_isActive.HasValue)
                    {
                        bc.Disabled = !_isActive.Value;
                    }
                }
            }
        }
Пример #3
0
        /// <inheritdoc />
        public override void Init(admin_zeegzagContext db)
        {
            GetExchangeId(db);
            RegisterRateLimit(12);

            CreatePuller(PULLER_CURRENCY, 60 * 60, 0, OnPullingCurrencies); //pull new currencies every 6 hours
            CreatePuller(PULLER_MARKETS, 60 * 60, 45, OnPullingMarkets);    //pull markets every hour
            CreatePuller(PULLER_PRICE, 60, 90, OnPullingPrices);            //pull prices every minute
        }
Пример #4
0
        public void Execute(admin_zeegzagContext db)
        {
            var bc = db.BorsaCurrencyT.Find(_bcId);

            bc.BuyArbitrageVolume  = Maximize(_buyArbitrageVolume);
            bc.BuyArbitrageWeight  = Maximize(_buyArbitrageWeight);
            bc.SellArbitrageVolume = Maximize(_sellArbitrageVolume);
            bc.SellArbitrageWeight = Maximize(_sellArbitrageWeight);
            bc.BuyPrice            = Maximize(_buyPrice);
            bc.SellPrice           = Maximize(_sellPrice);
        }
Пример #5
0
 public void Execute(admin_zeegzagContext db)
 {
     if (disableMode)
     {
         //disabling all remaining entities
         foreach (var bc in _prices.Where(p => p.AutoGenerated != true))
         {
             bc.Disabled = true;
         }
     }
     else
     {
         //adding or updating entities
         var fromAlias     = ";" + _from + ";";
         var toAlias       = ";" + _to + ";";
         var borsaCurrency = _prices.FirstOrDefault(bc =>
                                                    (bc.FromCurrency.ShortName == _from || (bc.FromCurrency.Alias?.Contains(fromAlias) ?? false)) &&
                                                    (bc.ToCurrency.ShortName == _to || (bc.ToCurrency.Alias?.Contains(toAlias) ?? false)));
         if (borsaCurrency == null)
         {
             if (_isActive)
             {
                 var fromCur = db.CurrencyT.FirstOrDefault(c => c.ShortName == _from || c.Alias.Contains(fromAlias));
                 var toCur   = db.CurrencyT.FirstOrDefault(c => c.ShortName == _to || c.Alias.Contains(toAlias));
                 if (fromCur != null && toCur != null)
                 {
                     //add new
                     borsaCurrency = db.BorsaCurrencyT.Add(new BorsaCurrencyT
                     {
                         FromCurrencyId   = fromCur.Id,
                         ToCurrencyId     = toCur.Id,
                         BorsaId          = _exchangeId,
                         Price            = 0,
                         FromCurrencyName = _from,
                         ToCurrencyName   = _to
                     }).Entity;
                 }
             }
         }
         else
         {
             borsaCurrency.Disabled         = !_isActive;
             borsaCurrency.AutoGenerated    = false;
             borsaCurrency.FromCurrencyName = _from;
             borsaCurrency.ToCurrencyName   = _to;
         }
         _prices.Remove(borsaCurrency);
     }
 }
Пример #6
0
        /// <summary>
        /// Must be called from exchange service from Init() method with its api name to get id and create if not exists
        /// </summary>
        /// <param name="db">Database context</param>
        /// <param name="name">Name of exhange service</param>
        protected void GetExchangeId(admin_zeegzagContext db)
        {
            var borsa = db.BorsaT.FirstOrDefault(b => b.Name == Name);

            if (borsa == null)
            {
                borsa = db.BorsaT.Add(new BorsaT()
                {
                    Name     = Name,
                    ApiName  = Name,
                    IsActive = true,
                }).Entity;
                db.SaveChanges();
            }
            _exchangeId = borsa.Id;
        }
Пример #7
0
        public void Execute(admin_zeegzagContext db)
        {
            var usdtId = CachingService.CurrencyIdByName("USDT",
                                                         () => db.CurrencyT.FirstOrDefault(c => c.ShortName == "USDT")?.Id);

            if (UsdConverters == null)
            {
                UsdConverters = db.BorsaCurrencyT
                                .Where(bc =>
                                       bc.FromCurrencyId == usdtId &&
                                       (bc.ToCurrency.ShortName == "BTC" || bc.ToCurrency.ShortName == "ETH"))
                                .ToList()
                                .ToLookup(bc => bc.BorsaId, bc => bc);
            }

            var borsaId = _borsaCurrency.BorsaId;
            var fromId  = _borsaCurrency.FromCurrencyId;
            var toId    = _borsaCurrency.ToCurrencyId;

            //if has its own usd converter from this market
            if (db.BorsaCurrencyT.Any(bc => bc.BorsaId == borsaId && bc.FromCurrencyId == usdtId && bc.ToCurrencyId == toId && bc.AutoGenerated != true))
            {
                return;
            }


            var converter = UsdConverters[_borsaCurrency.BorsaId].FirstOrDefault(bc => bc.ToCurrencyId == fromId); //USD-BTC  ==  BTC-MCO     //From-To   == From-To

            if (converter == null)
            {
                return;
            }


            var rate  = converter.Price;
            var price = _borsaCurrency.Price * rate;

            BorsaCurrencyT generated;
            var            key = _borsaCurrency.BorsaId + "-" + _borsaCurrency.ToCurrencyId;

            if (Cache.ContainsKey(key))
            {
                generated = Cache[key];
            }
            else
            {
                generated = db.BorsaCurrencyT.FirstOrDefault(bc => bc.BorsaId == borsaId &&
                                                             bc.FromCurrencyId == usdtId &&
                                                             bc.ToCurrencyId == toId);
                if (generated == null)
                {
                    generated = new BorsaCurrencyT()
                    {
                        BorsaId        = _borsaCurrency.BorsaId,
                        FromCurrencyId = usdtId.Value,
                        ToCurrencyId   = toId,
                        AutoGenerated  = true,
                    };
                    try
                    {
                        db.BorsaCurrencyT.Add(generated);
                    }
                    catch (Exception e)
                    {
                        Console.WriteLine("Error on add: " + e);
                    }
                    Cache[key] = generated;
                }
                else
                {
                    if (generated.LastUpdate.HasValue)
                    {
                        db.HistoryT.Add(new HistoryT()
                        {
                            BorsaCurrencyId = generated.Id,
                            EntryDate       = generated.LastUpdate.Value,
                            Price           = generated.Price,
                        });
                    }
                }
            }

            generated.Price      = price;
            generated.LastUpdate = DateTime.Now;
        }
Пример #8
0
 /// <summary>
 /// Initiates the exchange service
 /// </summary>
 public abstract void Init(admin_zeegzagContext db);
Пример #9
0
        public void Execute(admin_zeegzagContext db)
        {
            var bc = db.BorsaCurrencyT.Find(_bcId);

            //save history

            if (!dontUpdateDate)
            {
                if (bc.LastUpdate.HasValue)
                {
                    db.HistoryT.Add(new HistoryT()
                    {
                        BorsaCurrencyId = bc.Id,
                        EntryDate       = bc.LastUpdate.Value,
                        Price           = bc.Price,
                        High24Hour      = bc.High24Hour,
                        Low24Hour       = bc.Low24Hour,
                        Open24Hour      = bc.Open24Hour,
                        Close24Hour     = bc.Close24Hour,
                        Volume24Hour    = bc.Volume24Hour,
                        Volume24HourTo  = bc.Volume24HourTo,
                        Volume          = bc.Volume,
                        VolumePeriod    = bc.VolumePeriod,
                        Open            = bc.Open,
                        Close           = bc.Close,
                        High            = bc.High,
                        Low             = bc.Low,
                    });
                }

                bc.LastUpdate = DateTime.Now;
            }

            if (updatePrice)
            {
                bc.Price = _price;
            }
            if (updateVolume)
            {
                bc.Volume       = _volume;
                bc.VolumePeriod = _volumePeriod;
            }
            if (updateVolume24)
            {
                bc.Volume24Hour   = _volume24;
                bc.Volume24HourTo = _volume24To;
            }
            if (updatePriceData)
            {
                bc.Open  = _open;
                bc.High  = _high;
                bc.Low   = _low;
                bc.Close = _close;
            }
            if (updatePrice24Data)
            {
                bc.Open24Hour  = _open24;
                bc.High24Hour  = _high24;
                bc.Low24Hour   = _low24;
                bc.Close24Hour = _close24;
            }
            if (updateHealth)
            {
                bc.CanDeposit  = _canDeposit;
                bc.CanWithdraw = _canWithdraw;
            }
        }