Advertisement
Guest User

Untitled

a guest
May 23rd, 2019
88
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Swift 4.15 KB | None | 0 0
  1.     // переменные
  2. var collapsedlastTapeDealID :UInt64 = 0 // ИД последней обработанной tapeDeal
  3. var lastTapeDealDeltaInvert :Float = 0 // дельта * -1 последней обработанной tapeDeal
  4. var lastTapedealOrderCount :Int = 0 // количество ордеров последней обработанной tapeDeal
  5. var collapsedTapeDealsArr :Array<TapeDealsItem> = []    // массив для вывода уже с агрегированных по прайсу биржи tapeDeal
  6.  
  7.  
  8.     // NEW TAPE DEAL update
  9.     func update() {  
  10.         // получаем все новые ид которые пришли включая последний обработанный
  11.         let tempdataArr = historyTrades.getTapeDealForCoinTolastID(coin: selectCoin, lastID: collapsedlastTapeDealID, real: isRealVolume)
  12.         // у меня массив отсортированн на 0 индексе новый на последнем старый элемент, по этому иду задом наперед по нему
  13.         for item in tempdataArr.reversed() {
  14.             // если у нас еще нет элементов или мы только переключили монету биржу и очистили массив вывода
  15.             if collapsedTapeDealsArr.count == 0 {
  16.                 // сохраняем временные данные по последней сделке
  17.                 collapsedlastTapeDealID = item.id   // ид
  18.                 lastTapeDealDeltaInvert = item.amount * -1  // инвертированную дельту, чтоб потом ее вычитать если будет апдейт с таким же ИД
  19.                 lastTapedealOrderCount = item.count // количество ордеров
  20.                 // добавляем в массив вывода
  21.                 collapsedTapeDealsArr.append(item)
  22.             } else {
  23.                 // если элементы есть
  24.                 // проверяем не является ли ИД который пришел текущим ИД
  25.                 if collapsedlastTapeDealID == item.id {
  26.                     // если это обновление удаляем старую разнцу
  27.                     collapsedTapeDealsArr[0].amount += lastTapeDealDeltaInvert
  28.                     collapsedTapeDealsArr[0].count -= lastTapedealOrderCount
  29.                     // добавляем новую
  30.                     collapsedTapeDealsArr[0].amount += item.amount
  31.                     collapsedTapeDealsArr[0].count += item.count
  32.                     // сохраняем временные данные по последней сделке
  33.                     collapsedlastTapeDealID = item.id
  34.                     lastTapeDealDeltaInvert = item.amount * -1
  35.                     lastTapedealOrderCount = item.count
  36.                 } else {
  37.                     // если пришедший ИД не является текущим
  38.                     // сохраняем временные данные по последней сделке
  39.                     collapsedlastTapeDealID = item.id
  40.                     lastTapeDealDeltaInvert = item.amount * -1
  41.                     lastTapedealOrderCount = item.count
  42.                     // проверяем можно ли его по прайсу добавить к текущему если цена по выбранной бирже совпадает
  43.                     if collapsedTapeDealsArr[0].exchangePrice(selectExchange: selectExchange) == item.exchangePrice(selectExchange: selectExchange) {
  44.                         // добавляем к текущему
  45.                         collapsedTapeDealsArr[0].amount += item.amount
  46.                         collapsedTapeDealsArr[0].count += item.count
  47.                     } else {
  48.                         // если прайс изменился создаем новую в начале массива, у тебя возможно там порядок будет дргой
  49.                         collapsedTapeDealsArr.insert(item, at: 0)
  50.                     }
  51.                 }
  52.             }
  53.         }
  54.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement