Hello world для LLM/GPT кодирования стратегий
Скрипт запуска торгового инструмента, например CNURUBF через API Т-Инвестиций
Пример программы hello world для алготрейдера на выступлении на Т-Двор.
Не является индивидуальной инвестиционной рекомендацией.
ПО предоставляется 'как есть', без каких-либо гарантий. Разработчик не отвечает за ущерб, прямой или косвенный, возникший при использовании этого кода.
Токен
Токен получаем в разделе настроек.
Выбираем счет и указываем полный доступ.
Сохраняем в файле проекта .env заменив им слово ТОКЕН.
INVEST_TOKEN=ТОКЕН
Установка
- Python 3.9+
pip install -r requirements.txt
Создаем торговую стратегию через LLM / Gpt модели
Промпт для chat.deepseek.com
Создай код на python для стратегии: при RSI < 30 – покупай, RSI > 70 – продавай, стоп-лосс 2%, тейк-профит 4%
Напиши функцию work в классе Strategy.
Текущая история лежит в self.minutes длинной self.history_count минут.
Функция открыть позицию - position_open.
Функция закрыть позицию - position_close.
Функция получения наличия или отсутствия позиции - position_get
Ниже код класса:
ниже код из класса Strategy, файл: strategies/hello_world_t_dvor2025.py
Результат сохранен в strategies/hello_world_t_dvor2025_llmresult.py
Реализация торговой стратегии на Python
Стратегия
- Покупать (лонг) при RSI < 30
- Продавать (шорт) при RSI > 70
- Стоп-лосс: 2% от цены входа
- Тейк-профит: 4% от цены входа
Код реализации
class Strategy:
def __init__(self, client):
self.name = "Hello World T-dvor2025"
self.client = client
self.minutes = []
self.history_count = 30
self.position = {"avg_price": 0, "lots": 0}
# ... (остальные методы класса остаются без изменений)
def work(self):
# Параметры стратегии
period = 14 # период RSI
stop_loss_pct = 0.02 # 2%
take_profit_pct = 0.04 # 4%
# Проверяем достаточность истории
if len(self.minutes) < period + 1:
return
# Вытаскиваем цены закрытия
closes = [float(m["price"]) for m in self.minutes]
# Вычисляем изменения
gains = []
losses = []
for i in range(1, period + 1):
change = closes[-i] - closes[-i - 1]
if change > 0:
gains.append(change)
losses.append(0)
else:
gains.append(0)
losses.append(abs(change))
# Средние приросты и потери
avg_gain = sum(gains) / period
avg_loss = sum(losses) / period
if avg_loss == 0:
rsi = 100
else:
rs = avg_gain / avg_loss
rsi = 100 - (100 / (1 + rs))
current_price = closes[-1]
pos = self.position_get()
# Логика входа
if pos["lots"] == 0 and rsi < 30:
price_q = decimal_to_quotation(Decimal(current_price))
asyncio.create_task(self.position_open('long', price_q, 1))
return
# Логика выхода по стоп-лосс, тейк-профит или RSI
if pos["lots"] > 0:
entry_price = pos["avg_price"]
# стоп-лосс
if current_price <= entry_price * (1 - stop_loss_pct):
asyncio.create_task(self.position_close())
return
# тейк-профит
if current_price >= entry_price * (1 + take_profit_pct):
asyncio.create_task(self.position_close())
return
# перекупленность
if rsi > 70:
asyncio.create_task(self.position_close())
return
Запуск
Скрипт выведет доступные счета для текущего токена
Запуск торговли 1 лотом фонда VTBR ~100р. на аккаунте 123456789 из списка
- python main.py --account 123456789
Запуск торговли 1 лотом акциями PIKK ~560р. на аккаунте 123456789 из списка
- python main.py --account 123456789 --figi BBG004S68BH6