Перед прочтением этой статьи — ВАЖНО следующее: основная цель данной статьи заключается в том, чтобы показать как просто можно создать торгового робота, который может торговать российскими акциями или зарубежными акциями. Важно понимать, что создавая бота, вы лично несете ответственность за принимаемые им решения, инвестиционные операции и связанные с ними риски. Я не несу ответственности за решения, которые вы можете принять после прочтения этого материала. И я не даю никаких инвестиционных рекомендаций или советов. Не забывайте, что боты способны принести большие убытки, поэтому используйте их с осторожностью. Программирование для меня это хобби и любимое дело. А так я сертифицированный системный архитектор. Поэтому прошу не особо ругать за код:‑) Как вы знаете, брокеров много))) но нам нужны те, у которых есть API — программный интерфейс через который наш торговый робот сможет отправлять заявки на покупку и продажу акций. В этой статье будем рассматривать Российских брокеров для торговли Российскими акциями, если вы захотите торговать иностранными акциями — то это тоже можно сделать через них же — через СПБ биржу. (код торгового робота не поменяется — поменяется только название тикера — торговой бумаги, которой вы будете торговать). Чтобы вас долго не мучать с выбором хорошего брокера для торгового бота, я приведу мои решения, которые сформировались после длительной практики по написанию торговых ботов, работающих в live режиме — прямо сейчас торгующих российскими акциями. Нужный и важный компонент в разработке торгового бота — это возможность тестирования вашей стратегии на истории, например используя простую библиотеку BackTrader. Итак приступим! ))) 1й вариант — если очень сильно хочется иметь робота, который может торговать практически через любого брокера — то есть очень хорошее решение использовать библиотеку QuikPy в связке с библиотекой BackTraderQuik — использование этих двух библиотек позволит вашему торговому роботу работать с любым брокером, у которого есть возможность предоставить вам торговый терминал Quik. А этот торговый терминал есть у большинства брокеров.  Если вам интересно, как это настроить и сделать, я могу рассказать в отдельной подробной статье, просто голосуйте за это! ))) Множество примеров по этой связке специально для вас выложил вот здесь. 2й вариант — он немного ограничивает в выборе брокеров, но даёт прекрасную возможность общаться с разработчиками API брокеров, и они!! заметьте быстро и эффективно исправляют косяки) и добавляют функционал — это большой плюс! Для брокера Финам — API еще в разработке ))) библиотеки FinamPy + BackTraderFinam   Для брокера Тинькофф — библиотека BackTraderTinkoff * Несколько примеров кода опубликовал в их репозитории — пример стратегии которая использует только API Тинькофф Для брокера Алор — библиотеки AlorPy и BackTraderAlor   ОФФТОПИК: Если кому интересно подключение к криптобирже — то я написал свою библиотеку backtrader_binance, она работает так же, т. е. один и тот же код, можно использовать для разных активов, вот про нее статья. Итак, выбираем последнего брокера — Алор. )) Если вам интересно увидеть как написать торгового робота для Финам или Тинькофф — как это настроить и сделать, я могу рассказать в отдельной подробной статье, просто голосуйте за это! ))) Устанавливаем последнюю версию Python 3.11; Устанавливаем среду разработки PyCharm Community 2023.1; Запускаем PyCharm Community; В нём создаем новый проект, давайте его назовём alor_trade_robot и укажем что создаем виртуальное окружение Virtualenv, с Python 3.11 => нажимаем "Create"; После того, как проект создался и в нём создалось виртуальное окружение, мы стали готовы к установке необходимых библиотек))) Кликаем внизу слева на "Terminal" для открытия терминала, в котором как раз и будем вводить команды установки библиотек;   Устанавливаем необходимые библиотеки: В терминале вводим команды для подключения к брокеру Алор по API: git clone https://github.com/WISEPLAT/AlorPy для интеграции API Алора с Backtrader: git clone https://github.com/WISEPLAT/BackTraderAlor  после этих манипуляций у нас появилось две папки AlorPy и BackTraderAlor Теперь необходимо установить библиотеку тестирования торговых стратегий Backtrader pip install git+https://github.com/WISEPLAT/backtrader.git P.S. Пожалуйста, используйте Backtrader из моего репозитория (так как вы можете размещать в нем свои коммиты). И наконец у нас есть некоторые зависимости, которые вам нужно так же установить pip install requests pytz websockets matplotlib   Чтобы было легче разобраться с этими библиотеками, есть множество примеров внутри этих папок AlorPy и BackTraderAlor. Нам нужны два файла 02 - Symbols.py и Strategy.py из папки BackTraderAlor\DataExamples Копируем их в корень нашего проекта. Также нам понадобится файл конфигурации, он находится в папке AlorPy\Config.py Его тоже копируем в корень проекта в папку my_config(её нужно создать), должно получиться так: Перед запуском примера 02 — Symbols.py, необходимо: 1) получить свой API ключ и вписать его в поле RefreshToken; 2) узнать свой UserName и вписать его в поле UserName; 3) узнать значение портфеля для Фондового рынка и вписать его в поле PortfolioStocks— через файл AlorPy\Examples\02 — Accounts.py — получаем это значение; 4) узнать значение портфеля для Срочного рынка и вписать его в поле PortfolioFutures— через файл AlorPy\Examples\02 — Accounts.py — получаем это значение; 5) узнать значение портфеля для Валютного рынка и вписать его в поле PortfolioFx— через файл AlorPy\Examples\02 — Accounts.py — получаем это значение. Напоминаю, что всё это прописываем в файле my_config\Config.py И как все эти значения получить, так же прописано в этом же файле. Остальные подсчета можно заполнить по необходимости, заполненного будет уже достаточно для торговли на основном счете на фондовом рынке. Такой конфиг примерно получится: 1) Открыть счет в Алор (можно сделать удаленно!); 2) Для получения тестового логина/пароля демо счета оставить заявку в Telegram на https://t.me/AlorOpenAPI; 3) Зарегистрироваться на https://alor.dev/login; 4) Выбрать «Токены для доступа к API». В файле 02 — Symbols.py мы должны подключить свой конфиг файл my_config\Config.py для этого открываем его и правим одну строку: меняем AlorPy.Config на my_config.Config станет так: Отключите LiveBars режим, установив LiveBars=False Теперь запускаем пример для проверки подключения... Должно получиться так: Как мы видим — тест удался — бары пришли. Теперь можно приступать к созданию первого торгового робота!! Для создания торгового робота обычно придерживаются некоторой структуры кода, можно сказать шаблона, по которому код работает с торговой стратегией и с данными с рынка по тикеру/тикерам и после отработки выводится некоторый результат. Как мы видим, нам осталось реализовать пункты: «обработка этих данных стратегией»; «выставление заявок на покупку/продажу»; возврат результатов из стратегии; вывод результатов. Остальные пункты сделаны в этом примере — код достаточно интуитивный, но я всё равно приведу его здесь, ещё раз, отключив лишнее — комментируя — специально не удаляя, чтобы вам легче было сравнить. Итак основной файл для запуска торговой стратегии называется 02 — Symbols.py, вот его код: Внесенные в него изменения: поменял таймфрейм на M15; оставил применение торговой системы/стратегии ко всем тикерам; и дату старта получения баров установил на datetime(2021, 10, 4). Теперь основной файл стратегии Strategy.py, вот его код: Внесенные изменения в него: в функции def next(self): - закомментил синхронность получения баров - т.к. для моей стратегии это не нужно. Делаем контрольный запуск, чтобы удостовериться, что все работает и ничего не сломали: Видим, что пришли 15-минутные бары и все ОК. Теперь можно приступать к самому интересному - написанию торговой стратегии для робота! Все будем тестировать на истории - делать backtesting для нашей торговой стратегии.  1) устанавливаем, сколько денег у нас на счету и размер комиссии 2) результат работы торговой стратегии возвращаем в главный файл и выводим на экран пункты 1) и 2) добавляем в файл 02 - Symbols.py 3) если вы захотите включить live режим работы вашей торговой стратегии, то это делается следующими четырьмя строчками ‑!!! но не рекомендую этого делать, т.к. все заявки на покупку и продажу сразу начнут попадать на биржу и будут пытаться выполняться так, как у вас написано в коде!! - если вы пробегаетесь по истории - то и скрипт будет пытаться выставить в рынок по "старой" цене... а текущая цена далеко уже не та... БУДЬТЕ ЗДЕСЬ ВНИМАТЕЛЬНЫ! Для live режима — не пробегайтесь по истории. Этот код не добавляем! Просто для инфо, как включить live режим. Класс торговой системы имеет несколько основных методов: init - итак понятно - здесь инициализируем вспомогательные переменные и индикаторы для потоков данных; start - здесь однократно вспомогательным переменным присваиваем значения; next - вызывается каждый раз при приходе нового бара по тикеру; notify_order - вызывается, когда происходит покупка или продажа; notify_trade - вызывается когда меняется статус позиции; notify_data - вызывается когда меняется статус прихода бара на live режим. Вы можете по желанию расширять/добавлять новые методы/функционал. 4) В init добавляем: 5) В start добавляем: 6) В next добавляем: 7) добавляем функцию notify_trade: 8) добавляем функцию notify_order: пункты 4), 5), 6), 7) и 8) добавляем в файл стратегии Strategy.py В принципе описание кода достаточно интуитивно показывает смысл стратегии, что мы всегда покупаем и продаем через 5 баров. Итак, код файла 02 - Symbols.py: Итак, код файла Strategy.py Теперь давайте запустим эту стратегию и посмотрим результат! Стоимость портфеля: 1 294 456.74 Свободные средства: 45 568 288.40 ЧТО??? Сразу скажу, что это не грааль — и в коде есть небольшая ошибка, которая приводит к таким ошеломляющим результатам))) Кому интересно, заснял видео с разоблачением такой сверх доходности, доступно по ссылке. Поэтому создание этой стратегии есть по шагам в видео, доступно по ссылке Напоминаю, что цель данной статьи была показать — насколько легко теперь вы можете создавать своих собственных торговых роботов. Ни каких финансовых консультаций или рекомендаций не даю — просто пишем код для торгового бота. И без многих проверок — не запускайте торгового робота в live режиме... Итак, просто пишите код торгового робота, тестируете его на истории, включаете Live режим, и запускаете в работу) Как мне видится, получилось довольно интересно:‑) И жду ваших коммитов / фиксов / идей!  P. S. Это код выложил на GitHub по этой ссылке. Не забудьте свой конфиг файл положить в my_config\Config.py Всем хорошего дня! Спасибо за уделенное время! Если считаете полезным такие статьи то жду вашей позитивной оценки))