public TriplePairInfoHistoryItem(TriplePairArbitrageInfo info)
 {
     Disbalance    = info.Disbalance;
     Direction     = info.Direction;
     AltBasePrice  = info.AltBasePrice;
     AtlUsdtPrice  = info.AltUsdtPrice;
     BaseUsdtPrice = info.BaseUsdtPrice;
     Amount        = info.Amount;
     Profit        = info.Profit;
     Fee           = info.Fee;
     Time          = info.LastUpdate;
     UsdtBalance   = info.UsdtBalance;
     Earned        = info.LastEarned;
 }
        public async void Update(TriplePairArbitrageInfo info, IStaticArbitrageUpdateListener listener)
        {
            info.NextOverdueMs          = 6000;
            info.StartUpdateMs          = timer.ElapsedMilliseconds;
            info.ObtainingData          = true;
            info.ObtainDataSuccessCount = 0;
            info.ObtainDataCount        = 0;

            Task task = Task.Factory.StartNew(() => {
                if (info.AltBase.UpdateOrderBook())
                {
                    info.ObtainDataSuccessCount++;
                }
                info.ObtainDataCount++;
                if (info.AltUsdt.UpdateOrderBook())
                {
                    info.ObtainDataSuccessCount++;
                }
                info.ObtainDataCount++;
                if (info.BaseUsdt.UpdateOrderBook())
                {
                    info.ObtainDataSuccessCount++;
                }
                info.ObtainDataCount++;
            });

            await task;

            if (info.ObtainDataCount == info.Count)
            {
                info.IsActual      = info.ObtainDataSuccessCount == info.Count;
                info.IsUpdating    = true;
                info.ObtainingData = false;
                info.UpdateTimeMs  = (int)(timer.ElapsedMilliseconds - info.StartUpdateMs);
                if (listener != null)
                {
                    listener.OnUpdateInfo(info, true);
                }
            }
            info.LastUpdate = DateTime.UtcNow;
        }