Можно ли с помощью нейросети заработать на фондовом рынке больше, чем руками? Я поставил эксперимент и дал ИИ задачу: анализировать акции Сбербанка (SBER) и выдавать сигналы на основе прогноза. Результат — +20% прибыли за месяц на демо-счёте. В статье — полный разбор: какие инструменты я использовал, какой код написал, и как вы можете повторить всё это шаг за шагом.
SBER — ликвиден: высокий объём торгов, идеален для алгоритмических сделок.
Волатильность: движение цены даёт точки входа.
Популярность на Smart-Lab: кейс интересен широкой аудитории.
А нейросети, в отличие от людей, не устают, не поддаются эмоциям и умеют видеть закономерности, которые не видны глазом.
Источники:
moexalgo — данные с Мосбиржи
yfinance — данные с Yahoo Finance
from moexalgo import Ticker import pandas as pd sber = Ticker('SBER') data = sber.candles(date='2022-01-01', till='2024-12-31', period='D') data = pd.DataFrame(data)[['close', 'volume']] Введение
В трейдинге каждая секунда может иметь значение. Но стандартные инструменты часто не позволяют работать с данными высокого разрешения. В этой статье я поделюсь опытом создания кастомного решения для TSLab, которое сохраняет 1-секундные свечи с расширенными метриками (открытый интерес, количество продавцов/покупателей, лента сделок, лучшие бид/аск и др.). Покажу, как забрать эти данные из TSLab, передать их в Python для ML – анализа и т.д.
Задача
Трейдеры часто сталкиваются с ограничениями стандартных платформ: нельзя сохранить сверхмалые таймфреймы, добавить кастомные метрики или быстро переложить данные в Python для ML.
**Цель проекта** — создать инструмент, который:
— Сохраняет 1-секундные свечи с расширенными данными (открытый интерес, лента сделок…).
— Автоматически генерирует CSV-файлы для анализа.
— Позволяет строить интерактивные графики и обучать ML-модели.
**Главный герой** — ИИ-ассистент DeepSeek, который ускорил разработку в несколько раз и решил ключевые технические проблемы.
IMOEX_req = requests.get(
'https://iss.moex.com/iss/history/engines/stock/markets/index/securities/IMOEX.json?from=' + yesterdayDate + '&till=' + todayDate + '&interval=1').json()
data = [{k: r[i] for i, k in enumerate(IMOEX_req['history']['columns'])} for r in IMOEX_req['history']['data']]
frame = pd.DataFrame(data)Но, если день не закончен, значения дневной свечки по нему не приходят. import pylunar
import pandas as pd
import matplotlib.pyplot as plt
df = intraday_df.resample('D').agg({'Open': 'first', 'High': 'max', 'Low': 'min', 'Close': 'last'})
df = df.dropna()
Теперь в df содержатся дневки IMOEX.
*** Вычисляем процентное изменение цены за один день
df['pct'] = df['Close'].pct_change().shift(-1)
*** Изменение цены за один день
df['diff'] = df['Close'].diff().shift(-1)
Делаем стобец для хранения лунных дней
df['age'] = 0.0
mi = pylunar.MoonInfo((55,45,7),(37,36,56))
Здесь цифры (55,45,7),(37,36,56) — широта и долгота г.Москвы


import requests import pandas as pd import numpy as np import matplotlib.pyplot as plt
# URL для API MOEX, данные по ZCYC (zero coupon yield curve) url = "https://iss.moex.com/iss/engines/stock/zcyc/securities.json" # Запрос на получение данных response = requests.get(url) data = response.json() # Извлекаем данные из секции 'params' columns = data['params']['columns'] values = data['params']['data'] # Преобразуем в DataFrame df = pd.DataFrame(values, columns=columns) # Выбираем нужные столбцы: B1, B2, B3, T1, G1, ..., G9 df_selected = df[['tradedate', 'tradetime', 'B1', 'B2', 'B3', 'T1', 'G1', 'G2', 'G3', 'G4', 'G5', 'G6', 'G7', 'G8', 'G9']] # Извлекаем параметры для функции GT из df_selected beta0 = df_selected['B1'].values[0] beta1 = df_selected['B2'].values[0] beta2 = df_selected['B3'].values[0] tau = df_selected['T1'].values[0] g_values = df_selected[['G1', 'G2', 'G3', 'G4', 'G5', 'G6', 'G7', 'G8', 'G9']].values[0].tolist()