Представьте, что вы даете нейросети $100 и говорите: "У тебя полгода. Торгуй акциями с малой капитализацией и покажи максимальную прибыль". Звучит как очередной инфоцыганский развод. Но один энтузиаст под ником LuckyOne7777 решил проверить это на практике, запустив живой эксперимент с реальными деньгами.
Результат за первый месяц? ChatGPT не просто не слил депозит, а показал доходность в +25.3%, в то время как рынок (S&P 500) вырос всего на +2.1%.
В этой статье мы проведем технический разбор этого эксперимента:
Это кейc показывает, как LLM можно использовать (хотя бы попробовать) для решения сложных аналитических задач, и как с помощью простого Python-кода можно построить для этого всю необходимую обвязку.
[!WARNING] Важно: Данная статья является разбором эксперимента и ни в коем случае не является финансовой рекомендацией. Торговля акциями, особенно с малой капитализацией, сопряжена с высокими рисками.
Автор поставил перед ChatGPT (модель GPT-4o) простую, но амбициозную цель:
Для реализации была создана простая экосистема с использованием библиотек pandas
, yfinance
и matplotlib
.
Качество ответа от LLM напрямую зависит от качества запроса. В этом эксперименте промпты эволюционировали, но изначально были заложены ключевые принципы.
Вот как выглядел самый первый запрос, который задал тон всему эксперименту:
You are a professional-grade portfolio strategist. I have exactly $100 and I want you to build the strongest possible stock portfolio using only full-share positions in U.S.-listed micro-cap stocks (market cap under $300M). Your objective is to generate maximum return from today (6-27-25) to 6 months from now (12-27-25). This is your timeframe, you may not make any decisions after the end date. Under these constraints, whether via short-term catalysts or long-term holds is your call. I will update you daily on where each stock is at and ask if you would like to change anything. You have full control over position sizing, risk management, stop-loss placement, and order types. You may concentrate or diversify at will. Your decisions must be based on deep, verifiable research that you believe will be positive for the account. You will be going up against another AI portfolio strategist under the exact same rules, whoever has the most money wins. Now, use deep research and create your portfolio.
Ключевые элементы, которые сделали этот промпт эффективным:
You are a professional-grade portfolio strategist.
— это сразу задает нужный контекст и уровень экспертизы.generate maximum return
.You have full control over position sizing, risk management, stop-loss placement...
Your decisions must be based on deep, verifiable research...
— это заставляет модель не просто гадать, а искать и анализировать данные.You will be going up against another AI...
— элемент соревнования, хоть и был позже убран, мог изначально стимулировать модель на более агрессивные и продуманные действия.Со временем промпты стандартизировались. Для еженедельного "глубокого исследования" использовался такой шаблон:
You are a professional grade portfolio analyst. Use deep research to reevalute your portfolio. You can check current holdings and/or find new stocks. Remember, you have complete control as long as it is a micro cap (buy, sell, etc.). you can buy anything as long as you have the capital avaible (right now you have X in cash). Here was the thesis for the current portfolio: (insert last thesis summary). Remember your only goal is alpha. At the bottom, please write a short summary so I can have a thesis review for next week.
Здесь ключевым дополнением является передача предыдущего тезиса (insert last thesis summary
). Это обеспечивает преемственность стратегии, что критически важно, так как автор эксперимента был вынужден менять чаты в ChatGPT из-за падения производительности, о чем он пишет в Q&A.
[!TIP] Экспертный совет: Передача контекста и истории решений в новых запросах — это фундаментальный прием для поддержания долгосрочной стратегии при работе с LLM. Без этого модель будет склонна к "потере памяти" и хаотичным, несвязанным действиям.
Анализируя еженедельные отчеты, можно проследить, как менялась "мысль" ИИ-стратега.
ИИ сформировал концентрированный портфель из трех акций, балансируя между биотехом и AI/технологиями.
Тезис: "Баланс между биотех-катализаторами и AI-акцией роста с активным управлением рисками".
ChatGPT продает CSAI
и на вырученные деньги покупает Azitra, Inc. (AZTR)
.
MANUAL SELL - Rotated into AZTR
).Тезис: "Усиление ставки на биотех-катализаторы. Принятие более высокого риска ради экспоненциальной доходности".
На оставшиеся деньги ИИ покупает Inspira Technologies (IINN)
.
Тезис: "Добавление в портфель компании с реальной, а не спекулятивной выручкой. Лучшее соотношение риск/доходность по сравнению с другими кандидатами".
Ключевое решение недели — зафиксировать прибыль по одной из успешных позиций и переложиться в новую идею.
Тезис: "Обеспечение прибыли от CADL
и ее реинвестирование в ACTU
с более высоким потенциалом краткосрочного роста. Портфель остается диверсифицированным между коммерческими историями (ABEO, IINN) и клиническими катализаторами (ACTU, AZTR)".
Этот краткий обзор показывает, что ИИ действовал не хаотично. Он формировал тезисы, следовал им и корректировал портфель на основе новой информации, демонстрируя вполне осмысленное поведение, похожее на действия человека-аналитика.
Успех эксперимента был бы невозможен без автоматизации. Автор написал несколько Python-скриптов для сбора данных, ведения логов и визуализации. Давайте разберем два ключевых файла: Trading_Script.py
и Generate_Graph.py
.
[!INFO] Весь исходный код доступен в репозитории проекта на GitHub: Scripts and CSV Files.
Trading_Script.py
: Движок портфеляЭтот скрипт — сердце всей системы. Он выполняет несколько ключевых функций:
Давайте рассмотрим ключевые фрагменты кода.
process_portfolio
Эта функция итерируется по акциям в портфеле, получает свежие данные с помощью yfinance
и обновляет их статус.
def process_portfolio(portfolio, starting_cash):
results = []
total_value = 0
total_pnl = 0
cash = starting_cash
for _, stock in portfolio.iterrows():
ticker = stock["ticker"]
shares = int(stock["shares"])
cost = stock["buy_price"]
stop = stock["stop_loss"]
data = yf.Ticker(ticker).history(period="1d")
# ... (обработка случая, если нет данных)
else:
price = round(data["Close"].iloc[-1], 2)
value = round(price * shares, 2)
pnl = round((price - cost) * shares, 2)
if price <= stop:
action = "SELL - Stop Loss Triggered"
cash += value
log_sell(ticker, shares, price, cost, pnl, action) # Важный момент!
else:
action = "HOLD"
total_value += value
total_pnl += pnl
# ... (формирование строки для записи в CSV)
# ... (добавление итоговой строки TOTAL и сохранение в CSV)
Анализ:
if price <= stop:
— это краеугольный камень управления рисками. Она без эмоций закрывает убыточную позицию, что часто является сложным для трейдера-человека.log_manual_buy
) и продаж (log_manual_sell
) вынесены отдельно. Это позволяет автору легко исполнять "приказы" от ChatGPT, просто вызывая нужную функцию с параметрами.daily_results
Эта функция готовит ежедневную "сводку" для ChatGPT.
def daily_results(chatgpt_portfolio, cash):
# ... (получение актуальных цен для акций в портфеле и доп. тикеров)
# ... (расчет метрик Sharpe и Sortino Ratios)
# ... (расчет доходности S&P 500 для сравнения)
# Вывод финальной сводки в консоль
print(f"Total Sharpe Ratio over {n_days} days: {sharpe_total:.4f}")
print(f"Total Sortino Ratio over {n_days} days: {sortino_total:.4f}")
print(f"Latest ChatGPT Equity: ${final_equity:.2f}")
print(f"$100 Invested in the S&P 500: ${spx_value:.2f}")
print(f"today's portfolio: {chatgpt_portfolio}")
print(f"cash balance: {cash}")
print("""Here are is your update for today. You can make any changes you see fit (if necessary),
but you may not use deep research.
You can however use the Internet and check current prices for potenial buys.""")
Анализ:
but you may not use deep research
четко следует правилам эксперимента, разделяя ежедневные "чек-ины" от еженедельных стратегических сессий.Generate_Graph.py
: Визуализация успехаЭтот скрипт отвечает за создание того самого графика, который мы видели в начале. Он использует matplotlib
для построения простого, но наглядного сравнения динамики портфеля ChatGPT и S&P 500.
import pandas as pd
import matplotlib.pyplot as plt
import yfinance as yf
# === Загрузка и подготовка данных портфеля ChatGPT ===
chatgpt_df = pd.read_csv("Scripts and CSV files/chatgpt_portfolio_update.csv")
chatgpt_totals = chatgpt_df[chatgpt_df['Ticker'] == 'TOTAL'].copy()
# ... (добавление стартовой точки в $100)
# === Загрузка и нормализация данных S&P 500 ===
sp500 = yf.download("^SPX", start=start_date, end=end_date + pd.Timedelta(days=1), progress=False)
# ... (нормализация к $100)
sp500_scaling_factor = 100 / sp500_27_price
sp500["SPX Value ($100 Invested)"] = sp500["Close"] * sp500_scaling_factor
# === Построение графика ===
plt.figure(figsize=(10, 6))
plt.style.use("seaborn-v0_8-whitegrid")
plt.plot(chatgpt_totals['Date'], chatgpt_totals["Total Equity"], label="ChatGPT ($100 Invested)", marker="o", color="blue", linewidth=2)
plt.plot(sp500['Date'], sp500["SPX Value ($100 Invested)"], label="S&P 500 ($100 Invested)", marker="o", color="orange", linestyle='--', linewidth=2)
# ... (добавление текстовых аннотаций и заголовков)
plt.title("ChatGPT's Micro Cap Portfolio vs. S&P 500")
plt.show()
Вся информация о состоянии портфеля и сделках хранится в двух CSV-файлах:
chatgpt_portfolio_update.csv
: Ежедневный срез по каждой позиции и по портфелю в целом.chatgpt_trade_log.csv
: Лог всех совершенных сделок (покупка/продажа).Изучение этих файлов позволяет увидеть картину без прикрас. Например, в chatgpt_trade_log.csv
мы видим четкие причины каждой сделки, будь то ротация или сокращение позиции.
Эти данные — основа прозрачности всего эксперимента. Любой желающий может скачать их и провести собственный анализ.
Эксперимент LuckyOne7777 еще не закончен, но уже первые недели дали несколько инсайтов.
LLM — это мощный аналитический инструмент. Способность ChatGPT быстро анализировать большие объемы неструктурированной информации (отчеты, новости) и выделять ключевые катализаторы — это его главное преимущество. Как отмечает автор в Q&A, "реальный альфа прячется в сносках, неясных документах и ранних клинических данных — файлах, которые LLM может разобрать за секунды".
Промпт-инжиниринг решает. Качество стратегии ИИ напрямую зависело от четкости поставленной задачи, ограничений и предоставленного контекста. Продуманные промпты, задающие роль и требующие обоснования, превратили языковую модель в узконаправленного "специалиста".
Гибридный подход — ключ к успеху. Эксперимент не был полностью автономным. Человек выполнял роль "оператора": запускал скрипты, передавал данные, исполнял сделки и, что самое важное, обеспечивал преемственность стратегии при смене чатов. Это показывает, что на текущем этапе развития технологий наиболее эффективной является синергия человека и машины, где ИИ выступает в роли штурмана-аналитика, а человек — в роли пилота.
Прозрачность и автоматизация на Python. Использование простых Python-скриптов и открытых логов делает эксперимент верифицируемым и воспроизводимым. Любой со знанием базового Python может построить аналогичную систему, что демократизирует доступ к подобным исследованиям.
Ваша поддержка — это энергия для новых статей и проектов. Спасибо, что читаете!
Сможет ли ChatGPT-трейдер удержать и приумножить свой результат в течение оставшихся месяцев? Это открытый вопрос. Рынок переменчив, и успешный старт совсем не гарантирует удачный финал. Но этот кейс — прозрачный пример практического применения LLM в финансовом анализе. Он доказывает, что мы вышли за рамки простых "генераторов текста" и вступаем в эру, где ИИ становится реальным рабочим инструментом для решения сложных задач.