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); }
/// <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; } } } }
/// <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 }
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); }
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); } }
/// <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; }
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; }
/// <summary> /// Initiates the exchange service /// </summary> public abstract void Init(admin_zeegzagContext db);
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; } }