01.08.2027 273 материалов

Что на самом деле интересного в AI-трейдинге на старом Mac Mini за $343

Разработчик запустил семь AI-стратегий на б/у Mac Mini и выяснил, что главные проблемы — не в алгоритмах, а в планировщике задач и файле состояния. Это всё на виртуальных деньгах, но уроки вполне реальные.

Что на самом деле интересного в AI-трейдинге на старом Mac Mini за $343

Заголовок звучит как реклама криптофонда, а на деле это инженерный эксперимент: можно ли вообще запустить «исследовательский отдел» на дешёвом компьютере и не умереть от сюрпризов в продакшене.


Сначала — про ожидания. Статья на dev.to с провокационным заголовком про «AI-трейдинговую компанию на Mac Mini» на поверку оказывается записками инженера, который три месяца назад решил проверить: а смогут ли несколько AI-агентов вести исследовательскую работу по финансовым рынкам целиком сами, без человека за спиной?

Отвечаю сразу на главный вопрос: нет, это не история о том, как кто-то разбогател на ИИ. Торговля ведётся на виртуальных деньгах (так называемые paper money — симуляция без реального капитла). С мая результат составил +4,47%, максимальная просадка — 5,3%. Для реальных денег это ничтожные цифры. Для эксперимента по автоматизации — вполне себе сигнал, что система хотя бы не рушится.

И именно в этом главная ценность публикации. Автор не про деньги, а про инженерию.

Железо: б/у Mac Mini за 343 доллара

Самое забавное, что компьютер тут вообще не главный герой. Автор купил подержанный Mac Mini за $343 и поставил на него Python — больше ничего. Никаких GPU-ферм, никаких облачных инстансов за тысячи долларов в месяц. Просто маленькая коробка под столом, которая крутит скрипты.

Это важный контекст для тех, кто думает, что для работы с ИИ обязательно нужно железо на десятки тысяч. Для исследовательских задач, где не нужно в реальном времени обучать огромные модели, хватает и скромного компьютера. Фактически вся «магия» происходит в облаке — брокерские API, публикация результатов, получение рыночных данных. Mac Mini тут просто координатор.

Ноль зависимостей — и почему это принципиально

Вот что действительно интересно: вся система написана на стандартной библиотеке Python плюс sqlite3. Никаких сторонних пакетов. Вообще. Ни pandas, ни requests, ни десятка других библиотек, которые обычно считают обязательными для работы с данными.

На первый взгляд это звучит как мазохизм. Pandas экономит часы работы, requests делает HTTP-запросы в одну строчку. Зачем отказываться?

Автор объясняет просто: он потерял достаточно вечеров на том, что сломалась установка какой-нибудь зависимости, и не хочет повторять. Если система должна работать без присмотра месяцами, то зависимость, которой нет в проекте — это зависимость, которая не сломается в 9:35 утра во вторник.

Это мудрость, которая выходит далеко за пределы трейдинга. Сколько раз вы обновляли pip и получали каскад несовместимостей? Сколько раз ваш cron-скрипт падал, потому что в виртуальное окружение не активировалось? Отказ от внешних зависимостей — это не луддизм, а осознанный инженерный выбор для систем, которые должны быть максимально предсказуемыми.

Планировщик: launchd вместо cron и Docker

Автор использует встроенный macOS-планировщик launchd — каждая задача (открытие рынка, запуск стратегий, получение данных, публикация) оформлена как отдельный агент. Не cron, не Docker-контейнеры, а нативная система операционки.

Из этого опыта — два важных предупреждения для всех, кто запускает фоновые задачи на Mac:

Первое: Mac может уйти в сон и молча убить ваше расписание. Автор потерял сигнал, потому что компьютер задремал в нужный момент, и нигде не было ни ошибки, ни уведомления. Решение — специальная задача caffeinate, которая не даёт машине заснуть. Выглядит странно в списке агентов, но работает.

Второе: встроенный таймер StartCalendarInterval привязан к часам на стене, а не к завершению предыдущей задачи. Если одна задача выполняется дольше, чем интервал до следующей, вы получаете два экземпляра одной задачи, работающих одновременно и конфликтующих из-за общих файлов. Это классическая ловушка, о которой забывают до первого раза.

Семь стратегий — семь отдельных счетов

Решение, которое автор называет лучшим в системе: каждая из семи торговых стратегий работает на отдельном брокерском счёте. Не семь алгоритмов на одном счёте, а семь независимых «карманов».

Логика прозрачна. Если всё смешать в одном счёте, то убыточная стратегия может годами прятаться внутри прибыльного месяца. Разделённые счета показывают реальную картину: какая стратегия зарабатывает, а какая нет. Автор уже выключил одну — выяснилось, что её «преимущество» было артефактом перебора параметров, а не реальным рыночным паттерном.

Минус — сложнее учёт. Но для эксперимента, где цель — понять, что работает, а что нет, это единственный честный подход.

Самый полезный баг: когда ничего не падает

Одна стратегия достигла порога остановки и должна была ликвидировать позиции. У брокера она их закрыла. А вот записать это в свой собственный файл состояния — забыла. Возврат из функции произошёл раньше, чем данные обновились на диске.

Два дня система искренне считала, что владеет тремя позициями, которых на самом деле не было. Никаких ошибок в логах. Никаких крашей. Все последующие задачи читали файл, который был тихо неправильным.

Автор нашёл это, только сравнив локальное состояние с данными брокера — и теперь такая проверка запускается по расписанию.

Это, пожалуй, самый универсальный урок из всей статьи. Он вообще не про трейдинг. В любой системе, где есть «аварийный путь» (stop path), нужно убедиться, что он доводит запись состояния до конца. Ранний выход из функции при обработке ошибки — классическое место, где прячутся такие баги. «Счастливый» путь тестируют всегда, а вот ветка ошибок часто забывают.

Измеряйте, а не моделируйте

Автор предполагал, что его сделки исполняются с проскальзыванием в 5–10 базисных пунктов (оптимистично). Потом взял 125 реальных ордеров и сравнил каждую сделку с ценой закрытия сессии. Медиана оказалась -5,9 бп на рыночных входах, причём 43% сделок исполнились лучше, чем цена закрытия. Оценка была хуже реальности.

Важная оговорка: аудит нужно разделять по типам ордеров. Стопы и лимитки срабатывают, когда рынок идёт против вас — в этом их смысл. Если смешать их с рыночными входами, картина искажается.

Автор приводит ещё один пример — из опыта со своим сайтом. Неделями был уверен, что проблема в трафике. Оказалось, что посетители доходят до финального шага, но упираются в системное предупреждение безопасности macOS, а инструкции на странице просто перестали работать на текущей версии системы.

В обоих случаях было сильное убеждение и ноль измерений. И в обоих случаях реальность оказалась другой.

Честная оценка: что это на самом деле

Давайте трезво посмотрим на результат. Система работает три месяца на виртуальных деньгах и показала +4,47%. Это интересно как инженерный эксперимент, но абсолютно ничего не говорит о том, заработает ли она реальные деньги. Paper trading не учитывает проскальзывание ликвидности, задержки исполнения, психологию и десятки других факторов. Любой, кто строил торговые системы, скажет: симуляция и реальность — это разные виды спорта.

Но если отбросить финансовую составляющую, перед нами отличный пример прагматичного инженерного подхода. Минимум зависимостей, чёткая изоляция компонентов, непрерывное измерение вместо моделирования, внимание к граничным случаям. Эти принципы работают одинаково хорошо — строите ли вы торгового бота, систему мониторинга серверов или автоматизацию для умного дома.

И, что приятно, автор не продаёт курсов и не обещает лёгких денег. Он честно публикует всё, что делает, и приглашает задавать вопросы. В эпоху, когда каждый второй блогер обещает заработать на ИИ-трейдинге, это освежает.