Роботи / Агенти і боти

«Ситий хомʼяк»: щоденний огляд ринку картинкою для крипто-спільноти, який збирає AI-агент

Що було

Крипто-клуб хотів щодня давати спільноті короткий зріз ринку: не текст, а одну картинку, яку читати і з телефона, і з компʼютера. Склад фіксований: капіталізація, домінація BTC і USDT, індекс страху і жадності, індекс альтсезону і сім рядків: BTC, ETH, SOL, BNB, S&P 500, золото, нафта WTI. Збирати це руками щоранку нікому, а помилятися в цифрах не можна.

Що зробили

Два скрипти на Python: один забирає цифри з безкоштовного API TradingView і рахує добові зміни від учорашнього прогону, другий збирає HTML і знімає його headless Chrome у PNG 2160 на 3664. Індекси з CryptoRank, який не пускає автоматичні запити, агент знімає з екрана через браузер. Усе це запускає автозадача щоранку: агент перевіряє попередження скриптів і віддає картинку з коротким текстом, що виросло і що впало.

Що отримав клієнт

47 плашок за 47 днів, жодного пропущеного дня. Числа звіряли з CoinGecko і Yahoo Finance; одну помилку (золото показувало плюс замість мінуса) спіймали на другий день, після цього поле зміни для металу і нафти розібрали окремо. Захисту від повторного запуску за день у скрипті поки нема, це відома дірка, правка чекає рішення.

ЗамовникКрипто-клуб «Ситий хомʼяк», спільнота в Telegram
Моя рольФормат і дизайн плашки, скрипти збору і рендеру, щоденна автозадача, перевірка цифр
СтатусПрацює щодня, плашка виходить о 08:00 за Києвом
Результат47 плашок за 47 днів, жодного пропуску
Відхилено: перша бойова плашка. Верхній ряд показав +0,01%, 0,00% і -0,01%: скрипт порівняв з базою від налагоджувального прогону за двадцять хвилин до того, а не з учорашньою
Відхилено: перша бойова плашка. Верхній ряд показав +0,01%, 0,00% і -0,01%: скрипт порівняв з базою від налагоджувального прогону за двадцять хвилин до того, а не з учорашньою
Прийнято: свіжа плашка. Добові зміни верхнього ряду рахуються від учорашнього прогону, монети за чесними 24 годинами, золото на споті
Прийнято: свіжа плашка. Добові зміни верхнього ряду рахуються від учорашнього прогону, монети за чесними 24 годинами, золото на споті

Завдання

Крипто-клуб «Ситий хомʼяк» хотів щодня давати спільноті зріз ринку однією картинкою, бо картинку в Telegram відкривають і з телефона, і з компʼютера. Склад плашки зафіксували на старті і не міняємо без окремого рішення: капіталізація ринку, домінація BTC і USDT, індекс страху і жадності, індекс альтсезону, і сім рядків праворуч: BTC, ETH, SOL, BNB, S&P 500, золото, нафта WTI. Збирати це руками щоранку нікому, а помилятися в цифрах не можна: їх читають люди, які торгують.

Навіщо і яка ідея

Ідея: не сервіс і не бот, а щоденна автозадача з агентом. Цифри беруть скрипти, картинку малює браузер, а агент робить те, що скриптам не під силу: знімає індекси з сайту, який не пускає автоматичні запити, дивиться на попередження скриптів і пише коротку підпись, що виросло і що впало. Формат вертикальний, темне тло, блакитний акцент, у шапці логотип клубу.

Головне рішення по дорозі: звідки брати добові відсотки. У TradingView поле change для крипти рахується від півночі UTC, а не за добу: у перший день по BTC воно давало +0,43%, тоді як доба була -2,09%. Для монет узяли поле чесних 24 годин (звірено з CoinGecko: -2,09% проти -2,08%). У капіталізації і домінацій такого поля нема, тому скрипт сам кладе сьогоднішні значення у файл стану і завтра порівнює з ними. Із золотом і нафтою спочатку перейшли на фʼючерси, бо спот брехав зі знаком, потім вирішили давати тільки спотові котирування і повернули золото на спот. З нафтою так не вийшло: публічного спот-ринку WTI нема, і «ціна нафти» з новин це фронт-фʼючерс. Нафта лишилася фʼючерсом.

Хід роботи

Етап Що відбувалося
День 1 Скрипти збору і рендеру, логотип клубу в шапку, перший бойовий прогін. Верхній ряд показав +0,01% / 0,00% / -0,01%: база для порівняння була від налагоджувального прогону того ж ранку. У підписі до картинки це сказано прямо, інше число не підставляли
День 2 Відсотки верхнього ряду стали справжніми самі: база від учорашнього прогону. Віджети CryptoRank переїхали, числа зняли з повного скриншота. Того ж дня спіймали золото: +1,06% на плашці проти -0,82% за реальну добу. Перехід на фʼючерс
День 3 Розбір, звідки беруться золото і нафта і чому їхні відсотки іншої природи: у фʼючерсів зміна від закриття попередньої сесії, а не за 24 години
День 4 Золото повернуто на спот за правилом «тільки спотові котирування». Перебрано сім спотових символів нафти: шість не існують у цьому API, єдиний робочий висить повз ринок на 3,4%. Нафта лишилася фʼючерсом
День 5 Автозадача пропустила слот, плашку зібрали руками, потім автозадача таки стартувала і зібрала другу за добу. Файл стану вже містив ранкові числа, справжні добові відсотки витягли з ранкового HTML
Далі щодня Прогони штатні, попереджень скриптів нуль. Віджети CryptoRank зʼїжджають ще чотири рази, числа щоразу з повного скриншота
Через шість тижнів Після переходу на зимовий час запуск перенесено з 09:00 на 08:00 за Києвом

Чим робили

Скрипт збору забирає значення з безкоштовного scanner API TradingView без ключа: CRYPTOCAP:TOTAL, BTC.D і USDT.D для верхнього ряду, CRYPTO:BTCUSD і решта монет, SP:SPX, TVC:GOLD, NYMEX:CL1!. Три спроби на символ; якщо джерело не відповіло, скрипт пише попередження, а не мовчить. Індекси страху і жадності й альтсезону з cryptorank.io: Cloudflare віддає curl 403, тому агент відкриває сайт у Chrome, знімає числа з екрана і передає їх скрипту параметрами.

Скрипт рендеру збирає HTML з даними і знімає його headless Chrome: вертикальний формат 2160 на 3664 при подвійному масштабі, темне тло, блакитний акцент, обидві шкали заповнюються за годинниковою стрілкою, у Solana і BNB офіційні контури логотипів. Логотип клубу скрипт сам обрізає від підкладки і вписує в шапку, дата в шапці підставляється сама.

Автозадача щоранку: агент знімає індекси, запускає обидва скрипти, перевіряє попередження і віддає картинку з коротким текстом. Сервер не потрібен, усе крутиться на одній машині.

Результат

47 плашок за 47 днів, по одній на день, без пропусків. Кожна 2160 на 3664, близько 470 КБ, читається з телефона. Після правки по золоту і виходу на чесні 24 години числа звіряли з незалежними джерелами: BTC +0,78% у нас проти +0,88% у CoinGecko, ETH +1,91 проти +1,93, SOL +2,86 проти +2,90, BNB +1,87 проти +1,87.

Чого не робили і чому. Захисту від повторного запуску за день у скрипті досі нема: він перезаписує файл стану при кожному запуску, і другий прогін за добу обнулив би відсотки верхнього ряду. Дірка відома, один раз спрацювала, обхід описаний, правка чекає рішення. Домінація BTC у нас і в шапці CryptoRank різна, у трьох перевірках на 2,3-2,5 пункту: це різні методики, не помилка, плашка тримається TradingView і джерела не змішує. S&P 500 вранці за Києвом показує вчорашнє закриття, бо біржа США ще закрита, а у вихідні S&P, золото і нафта повторюють пʼятничне закриття.

Помилки і що винесли

Перший бойовий прогін збрехав у верхньому ряду.База у файлі стану була від налагоджувального прогону за двадцять хвилин до того, і скрипт чесно підписав «24h», бо перевірки на вік бази в ньому нема. Інше число замість неї не підставляли, у підписі до картинки сказали прямо.
Золото показувало плюс замість мінуса.Поле change у спотового золота на TradingView рахується не за добу: +1,06% на плашці проти -0,82% за реальну добу за Yahoo. Те саме у всіх трьох спотових символів золота, тобто справа в класі інструмента. Для металу і нафти поле зміни розібрали окремо.
У нафти нема споту.Сім спотових символів перебрано, шість не існують, єдиний робочий висить повз ринок на 3,4%: Yahoo за CL=F дав рівно фʼючерсну ціну. Нафта лишилася фʼючерсом, і це треба памʼятати при читанні плашки.
Повторний запуск за день обнуляє відсотки.Скрипт перезаписує файл стану при кожному запуску. Коли автозадача зібрала другу плашку за добу, справжні відсотки витягли з ранкового HTML. Правило на сьогодні: за день не пересобирати, патчити дані руками.
Віджети CryptoRank переїжджають.Область зуму з інструкції промахувалася пʼять разів: туди потрапляв то блок розблокувань токенів, то картки проєктів. Надійніше знімати повний скриншот сторінки і читати числа з нього.
Два джерела дають різну домінацію BTC.CryptoRank і TradingView різняться на 2,3-2,5 пункту, і це не помилка, а різні набори монет. Плашка тримається одного джерела і не змішує.

Інструменти

Python 3TradingView scanner APICryptoRankheadless ChromeHTML і CSSChrome MCPАвтозадача за розкладомClaude Code