Все говорили, что для торгового бота нужны навороченный ИИ и дата-центр.
Это ложь, которая мешает новичкам даже начать.
Вот правда: прибыльный погодный бот для Polymarket — это проект на выходные, и к концу этой статьи у вас будет полный пайплайн.
Погода — полная противоположность 5-минутным BTC.
Окна BTC — это подбрасывание монетки, которое невозможно предсказать, а гонка скорости принадлежит ботам, расположенным в том же дата-центре.
Температура реально предсказуема, разрешается за часы, так что скорость ничего не значит, а данные бесплатны.
Это последний рынок, где соло-разработчик с дешёвым VPS всё ещё выигрывает за счёт мозгов, а не железа.
Вся машина состоит из шести шагов.
Найди рынки, получи прогнозы, исправь смещение, преврати в вероятности, найди преимущество в 8%, определи размер и соверши сделку.
Вот и всё.
Позволь мне передать тебе каждый элемент.
Я создал сотни ботов, и те, что приносят прибыль, всегда такие простые, а не переусложнённые, как многие думают.
Вот мой публичный пример погодного бота: https://polymarket.com/profile/0xca75fbadcc238afd23c317e253a8b5c47b390a64?via=surfer
Всё ещё дорабатываю его и переживаю полосу неудач, которую пытаюсь исправить.
Но всё же он не сливает постоянно, как предыдущие версии.

Давай теперь построим тебе денежный принтер.
1. Концепция и идея
Прежде чем писать код, чётко представь картину, потому что это делает каждый шаг очевидным.
Polymarket выставляет ежедневные рынки температуры для городов по всему миру.
Каждый из них — это набор корзин.
Одна корзина разрешается как YES за доллар, остальные уходят в ноль.
Рынок разрешается по одной конкретной станции аэропорта, а не по городу, который ты видишь в своём погодном приложении.

Задача твоего бота проста для описания.
Выяснить реальную вероятность каждой корзины лучше, чем толпа, а затем купить те корзины, которые рынок недооценил.
Ты НЕ занимаешься прогнозированием погоды сам.
Модели стоимостью в миллиарды долларов уже сделали это часы назад.
Ты читаешь их прогноз, очищаешь его и сравниваешь с рыночной ценой.
Там, где твоя честная вероятность значительно выше цены, у тебя есть преимущество.
Всё ниже — это просто описание того, как вычислить этот разрыв и действовать на его основе, не обманывая себя.
Храни все настройки в конфигурационном файле, а не в коде, чтобы можно было настраивать без изменения логики.
Начальный баланс, максимальная сделка, минимальное преимущество, ценовые ограничения, доля Келли.
Всё это находится в одном месте, которое можно отредактировать за секунды.
2. Поиск рынков
Бот начинает со сканирования Polymarket на предмет активных рынков температуры, которые стоит торговать.
Не нужно торговать все подряд.
Нужен фильтр, который отсеивает мусор до того, как ты потратишь вызов прогноза или доллар.
Три фильтра делают большую часть работы:
> Порог объёма
Пропускай тонкие рынки с объёмом ниже нескольких тысяч.
У тонких книг широкие спреды и цены, которым нельзя доверять.

> Временное окно
Торгуй только рынки, разрешающиеся в промежутке от 2 до 72 часов.
До 2 часов преимущество уже учтено в цене.
После 72 часов прогноз слишком неопределённый, чтобы на него полагаться.
> Ограничение цены
Пропускай корзины, которые уже торгуются выше примерно 45 центов.
При такой цене рынок уже учёл большую часть преимущества, и твой потенциал роста мал.

Каждый выживший рынок указывает на город, дату и станцию разрешения.
Эта станция — всё, поэтому сохраняй точные координаты её аэропорта и код ИКАО, а не центр города.
Использование координат центра города может привести к ошибке в 3–8 градусов ещё до того, как бот начнёт думать.
Теперь у тебя есть чистый список торгуемых рынков, каждый привязан к точному месту, на которое должен быть нацелен прогноз.
3. Получение прогноза (код)
Теперь ты получаешь прогнозы для точной станции каждого рынка из более чем одного источника.
Одна модель — это мнение.
Три модели позволяют увидеть согласие и расхождение, что само по себе является информацией.
Твой якорь — ECMWF, мировой золотой стандарт, бесплатно через Open-Meteo, без ключа.
Для городов США на коротких горизонтах ты добавляешь модель с более высоким разрешением, которая читает данные реальных наблюдений.
Вот получение данных ECMWF:
1def get_ecmwf(lat, lon, unit):2url = (3"https://api.open-meteo.com/v1/forecast"4f"?latitude={lat}&longitude={lon}"5f"&daily=temperature_2m_max&temperature_unit={unit}"6"&forecast_days=7&models=ecmwf_ifs025"7"&bias_correction=true"8)9data = requests.get(url, timeout=(5, 8)).json()10return data["daily"]["temperature_2m_max"]
Этот флаг bias_correction=true важен — он бесплатно применяет первичную коррекцию ошибок на основе местоположения.
Для городов США в пределах примерно 48 часов предпочти модель с более высоким разрешением:
1def get_hrrr(lat, lon):2url = (3"https://api.open-meteo.com/v1/forecast"4f"?latitude={lat}&longitude={lon}"5"&daily=temperature_2m_max&temperature_unit=fahrenheit"6"&forecast_days=3&models=gfs_seamless"7)8return requests.get(url, timeout=(5, 8)).json()["daily"]["temperature_2m_max"]
Простое правило: высокое разрешение для коротких дистанций в США, ECMWF для всего остального.
Запрашивай каждый город в его собственных единицах: США в Фаренгейтах, остальные в Цельсиях, и всегда сравнивай в одном масштабе.
4. Исправление смещения (вот где деньги)
Это то, где победители отделяются от всех остальных.
Каждая модель систематически ошибается в одном и том же направлении.
GFS имеет холодное смещение, она занижает температуру, и величина этого отклонения зависит от города, времени суток и того, насколько далёк прогноз.

Если пропустить этот шаг, твоё преимущество часто оказывается просто обычной ошибкой модели.
Это не преимущество.
Это шум в костюме преимущества.
Поэтому, прежде чем вычислять хоть одну вероятность, ты корректируешь модель, используя её собственные прошлые ошибки.
Смещение определяется очень просто.
> смещение = прогзонус минус факт
Ты измеряешь его отдельно для каждого города, горизонта и времени суток, а затем сдвигаешь новые прогнозы на эту известную ошибку.
Самая простая работающая версия — это затухающее среднее недавних ошибок, чтобы более новые промахи учитывались больше.
Тебе НЕ нужна для этого нейронная сеть.
Простое затухающее среднее или небольшая регрессия дают 60–80% всех возможных улучшений.
Сначала запусти это.
Навороченная ML-коррекция смещения реальна, но это последние 20%, и она имеет значение только тогда, когда простая версия уже приносит прибыль.
Сначала исправь входные данные.
Скучная бесплатная модель с коррекцией побеждает навороченную модель с сырыми данными.
5. Превращение прогнозов в вероятности корзин
Теперь ты преобразуешь одно скорректированное значение прогноза в вероятность для каждой корзины.
Вот ошибка, которую совершают новички.
Они берут прогноз, помещают его в ту корзину, куда он попадает, и называют эту корзину 100%.
Но прогноз не точен.
Это центральная точка с известным разбросом ошибки вокруг неё.
Этот разброс — вся игра.
Скажем, твой скорректированный прогноз — 41°F, а типичная ошибка твоей модели для этого города составляет около 2 градусов.
Реальный максимум может легко оказаться на корзину выше или ниже.
Поэтому ты не ставишь на одну корзину 100%.
Ты распределяешь вероятность между корзиной прогноза И её соседями, взвешивая по тому, насколько вероятна каждая с учётом размера твоей ошибки.
Более узкая историческая ошибка означает большую вероятность, сосредоточенную в центральной корзине.
Более широкая ошибка распределяет её по соседям.
Именно поэтому знание своей реальной ошибки, своей сигмы, так важно.
Без неё ты гадаешь о своей собственной уверенности.
С ней ты превращаешь прогноз в честное распределение вероятностей, с которым можно сравнивать рынок.
Именно на этом распределении ты на самом деле торгуешь, корзина за корзиной.
6. Поиск преимущества и размера с помощью Келли
Теперь ты сравниваешь свою вероятность с рыночной ценой и действуешь только тогда, когда разрыв реален.
Сначала ожидаемая стоимость, твоё преимущество на доллар:
1def calc_ev(p, price):2if price <= 0 or price >= 1:3return 0.04return round(p * (1.0 / price - 1.0) - (1.0 - p), 4)
Если твоя модель говорит, что корзина имеет 80%, а торгуется по 14 центов:
0.80 * (1/0.14 - 1) - 0.20 = +4.94
Это огромное преимущество.
Но ты не срабатываешь на каждое положительное число — ты устанавливаешь минимум, торгуешь только когда EV превышает примерно 8%, чтобы пропускать слабые сигналы.
Затем Келли говорит тебе, сколько от твоего банкролла ставить:
1def calc_kelly(p, price, kelly_fraction=0.25):2b = 1.0 / price - 1.03f = (p * b - (1.0 - p)) / b4return min(max(0.0, f) * kelly_fraction, 1.0)
Два ограничителя, которые сохранят тебе жизнь.
> Используй дробный Келли — четверть от того, что говорит полный Келли
Полный Келли — это американские горки, дробь резко снижает дисперсию.
> Жёстко ограничивай каждую сделку максимальной ставкой из твоего конфига
Даже если Келли кричит ставить крупно, ограничение спасает тебя от одного плохого рынка.
Входи по ASK — реальной цене, которую ты платишь, и рассматривай BID как точку выхода, иначе твой бэктест тебя обманет.
7. Исполнение, стопы и логирование всего
Теперь бот действует, и, что не менее важно, записывает.
Основной цикл работает по расписанию, скажем, каждый час, и делает одно и то же по порядку для каждого рынка.
Получить свежие прогнозы из всех источников
Найти соответствующий рынок Polymarket и загрузить его запись
Сохранить текущий прогноз как снимок, потому что эта история — твоё будущее преимущество
Проверить стоп-лоссы по любой открытой позиции
Открыть новую позицию только если EV превышает твой минимум и цена подходит
https://x.com/0xSurferX/status/2078620667272896555
Твои стопы просты и механичны.
Закрывай, если цена упала на заданный процент от точки входа.
Закрывай, если прогноз сместился достаточно далеко от твоей корзины, что гипотеза умерла.
Между полными сканированиями запускай лёгкий проход каждые несколько минут только для наблюдения за стопами, без повторного сканирования каждого города.
И логируй абсолютно всё.
Каждый снимок прогноза, каждую увиденную рыночную цену, каждую сделку, каждое разрешение.
Один файл на рынок, дополняемый со временем.
Этот лог — не пустая работа.
Это сырой материал для последнего шага, который превращает статичного бота в того, кто становится умнее с каждой неделей.
8. Дайте ему калиброваться и становиться умнее
Вот что отличает бота, который гадает, от того, который ЗНАЕТ.
В первый день твой бот понятия не имеет, насколько точны его прогнозы для каждого города.
Поэтому он не должен полностью доверять себе.
Он должен торговать понемногу, логировать каждое разрешение и ждать.
Как только у него накопится достаточно разрешённых рынков для города, около 30, он сможет измерить свою истинную ошибку.
Ты берёшь каждый прогноз, который сделал для этого города, сравниваешь с тем, что произошло на самом деле, и вычисляешь среднее отклонение.
Эта средняя ошибка становится твоей сигмой — твоей реальной уверенностью — для этого конкретного города и источника.
И эта сигма напрямую возвращается в шаг четвёртый.
Лучшая сигма означает более честное распределение вероятностей по корзинам, что означает лучшее обнаружение преимущества, что означает лучший размер ставок.
Бот буквально улучшает себя по мере накопления разрешённых рынков.
Это та же дисциплина, которую я проповедую для каждого бота, который строю:
Логируй всё, рискуй поначалу мало
Позволь реальным разрешённым исходам измерить твою истинную точность
Увеличивай размер только тогда, когда данные подтвердили преимущество
Погодный бот, который доверяет себе на 90% в первый день, — это такая же катастрофа, как крипто-бот, запущенный на основе бэктеста с 10 000% доходности.
Оба доверились числу, которое не заслужили.
Ты не хочешь видеть такое, поверь мне:

Давай двигаться дальше.
9. Собираем всё вместе
Теперь подведём итог.
Остановись и посмотри, что ты построил:
Находи чистые рынки, привязанные к точной станции разрешения
Получай три источника прогнозов для этой станции
Корректируй известное смещение каждой модели
Превращай скорректированный прогноз в вероятности корзин, используя свою реальную ошибку
Торгуй только когда преимущество превышает 8%
Определяй размер с помощью дробного Келли и жёсткого ограничения
Исполняй, останавливай, логируй и калибруй, пока он не отточит себя сам
Никакой нейронной сети для старта не требуется, никакого дата-центра или серверов в том же помещении.
Только бесплатные прогнозы, честная математика и терпение, чтобы позволить ему доказать себя на реальных разрешениях.
Оставь его работать на две-три недели, прежде чем судить, потому что погодные рынки разрешаются ежедневно, и тебе нужно 50-100 разрешённых сделок, чтобы понять, что у тебя есть.
Я построил более 200 ботов, и именно такая форма реально приносит прибыль, пока навороченные штуки остаются незавершёнными.
Простой пайплайн, честная калибровка, скучная дисциплина.
Это всё, что тебе нужно.
Погода — последний честный рынок на Polymarket.
Построй шесть шагов в эти выходные, дай ему откалиброваться и войди, пока толпа не проснулась.
Полный разбор шага по коррекции смещения — следующий, не пропусти.
Выпускаю часть 2 в среду.
Также присоединяйся к моему маленькому tg-каналу, если хочешь связаться.
Присоединяйся здесь: https://t.me/+jCBHygDAJa9hMTJk

Здесь мы строим вместе, обсуждаем и исправляем проблемы.
Надеюсь, эта статья оказалась полезной, потому что в этом и есть весь смысл.
Удачи!





