Как сделать торгового робота для Binance
В настоящее время я увлекаюсь написанием торговых роботов. Постепенно изучаю нейросети для их применения к анализу цен/объемов акций/фьючерсов.
Обычно я писал торговых роботов для работы с Брокерами и делал авто-торговлю Акциями или Фьючерсами, но вдруг возникла мысль.
— А что, если уже готовый код можно применять и на других активах. Например на крипто активах для Биткоина или Эфира или других?
Уже изучив много библиотек и примеров за долгое время написания своих торговых роботов, решил сделать небольшую библиотеку backtrader_binance для интеграции API Binance и библиотеки тестирования торговых стратегий Backtrader.
Вот с помощью backtrader_binance, сейчас и создадим алго-робота для торговли BTC и ETH.
Подготовка окружения
- Устанавливаем последнюю версию Python 3.11
- Устанавливаем среду разработки PyCharm Community 2023.1
- Запускаем PyCharm Community
- В нём создаем новый проект, давайте его назовём algo_trade_robot и укажем что создаем виртуальное окружение Virtualenv, с Python 3.11 => нажимаем «Create».

- После того, как проект создался и в нём создалось виртуальное окружение, мы стали готовы к установке необходимых библиотек))) Кликаем внизу слева на «Terminal» для открытия терминала, в котором как раз и будем вводить команды установки библиотек.

- Устанавливаем необходимые библиотеки Для установки библиотеки осуществляющей интеграцию Binance API с Backtrader вводим команду pip install backtrader_binance
Теперь необходимо установить библиотеку тестирования торговых стратегий Backtrader pip install git+https://github.com/WISEPLAT/backtrader.git P.S. Пожалуйста, используйте Backtrader из моего репозитория (так как вы можете размещать в нем свои коммиты). И наконец у нас есть некоторые зависимости, которые вам нужно так же установить pip install python-binance pandas matplotlib - Теперь нужно сделать копию всего репозитория в корень проекта, чтобы из него взять примеры кода торговых стратегий, делается это одной командой, так же через терминал. git clone https://github.com/WISEPLAT/backtrader_binance И теперь наш проект выглядит вот так

Создание конфигурации для торговой стратегии
Чтобы было легче разобраться как всё работает, я сделал для вас множество примеров в папках DataExamplesBinance_ru и StrategyExamplesBinance_ru.
Перед запуском примера, необходимо получить свой API ключ и Secret ключ, и прописать их в файле ConfigBinance\Config.py:
# content of ConfigBinance\Config.py class Config: BINANCE_API_KEY = "YOUR_API_KEY" BINANCE_API_SECRET = "YOUR_SECRET_KEY"
Как получить токен Binance API
- Зарегистрируйте свой аккаунт на Binance
- Перейдите в раздел «Управление API»
- Затем нажмите кнопку «Создать API» и выберите «Сгенерированный системой».
- В разделе «Ограничения API» включите «Включить спотовую и маржинальную торговлю».
- Скопируйте и вставьте в файл ConfigBinance\Config.py полученные «Ключ API» и «Секретный ключ»
Теперь можно запускать примеры из папок DataExamplesBinance_ru и StrategyExamplesBinance_ru.
Создание торгового робота для Binance
Для создания торгового робота обычно придерживаются некоторой структуры кода, можно сказать шаблона, по которому код работает с торговой стратегией и с данными с рынка по тикеру/тикерам и после отработки выводится некоторый результат.
импорт необходимых_библиотек класс Индикаторов класс Стратегии/Торговой системы # --- основной раздел --- подключение по API к бирже задание параметров запуска стратегии запуск стратегии получение данных по тикеру/тикерам по API обработка этих данных стратегией выставление заявок на покупку/продажу возврат результатов из стратегии вывод результатов
В примерах вы найдете несколько вариантов запуска стратегий, а вот примерно стандартная структура кода для торгового робота, файл «07 — Offline Backtest Indicators.py»:
import datetime as dt import backtrader as bt from backtrader_binance import BinanceStore from ConfigBinance.Config import Config # Файл конфигурации # видео по созданию этой стратегии # RuTube: https://rutube.ru/video/417e306e6b5d6351d74bd9cd4d6af051/ # YouTube: https://youtube.com/live/k82vabGva7s class UnderOver(bt.Indicator): lines = ('underover',) params = dict(data2=20) plotinfo = dict(plot=True) def __init__(self): self.l.underover = self.data < self.p.data2 # данные под data2 == 1 # Торговая система class RSIStrategy(bt.Strategy): """ Демонстрация live стратегии с индикаторами SMA, RSI """ params = ( # Параметры торговой системы ('coin_target', ''), ('timeframe', ''), ) def __init__(self): """Инициализация, добавление индикаторов для каждого тикера""" self.orders = <># Организовываем заявки в виде справочника, конкретно для этой стратегии один тикер - одна активная заявка for d in self.datas: # Пробегаемся по всем тикерам self.orders[d._name] = None # Заявки по тикеру пока нет # создаем индикаторы для каждого тикера self.sma1 = <> self.sma2 = <> self.sma3 = <> self.crossover = <> self.underover_sma = <> self.rsi = <> self.underover_rsi = <> for i in range(len(self.datas)): ticker = list(self.dnames.keys())[i] # key name is ticker name self.sma1[ticker] = bt.indicators.SMA(self.datas[i], period=9) # SMA1 indicator self.sma2[ticker] = bt.indicators.SMA(self.datas[i], period=30) # SMA2 indicator self.sma3[ticker] = bt.indicators.SMA(self.datas[i], period=60) # SMA3 indicator # signal 1 - пересечение быстрой SMA снизу вверх медленной SMA self.crossover[ticker] = bt.ind.CrossOver(self.sma1[ticker], self.sma2[ticker]) # crossover SMA1 and SMA2 # signal 2 - когда SMA3 находится ниже SMA2 self.underover_sma[ticker] = UnderOver(self.sma3[ticker].lines.sma, data2=self.sma2[ticker].lines.sma) self.rsi[ticker] = bt.indicators.RSI(self.datas[i], period=20) # RSI indicator # signal 3 - когда RSI находится ниже 30 self.underover_rsi[ticker] = UnderOver(self.rsi[ticker].lines.rsi, data2=30) def next(self): """Приход нового бара тикера""" for data in self.datas: # Пробегаемся по всем запрошенным барам всех тикеров ticker = data._name status = data._state # 0 - Live data, 1 - History data, 2 - None _interval = self.p.timeframe if status in [0, 1]: if status: _state = "False - History data" else: _state = "True - Live data" print('<> / <> [<>] - Open: <>, High: <>, Low: <>, Close: <>, Volume: <> - Live: <>'.format( bt.num2date(data.datetime[0]), data._name, _interval, # таймфрейм тикера data.open[0], data.high[0], data.low[0], data.close[0], data.volume[0], _state, )) print(f'\t - RSI =', self.rsi[ticker][0]) print(f"\t - crossover =", self.crossover[ticker].lines.crossover[0]) coin_target = self.p.coin_target print(f"\t - Free balance: ") # сигналы на вход signal1 = self.crossover[ticker].lines.crossover[0] # signal 1 - пересечение быстрой SMA снизу вверх медленной SMA signal2 = self.underover_sma[ticker] # signal 2 - когда SMA3 находится ниже SMA2 # сигналы на выход signal3 = self.underover_rsi[ticker] # signal 3 - когда RSI находится ниже 30 if not self.getposition(data): # Если позиции нет if signal1 == 1: if signal2 == 1: # buy free_money = self.broker.getcash() price = data.close[0] # по цене закрытия size = (free_money / price) * 0.25 # 25% от доступных средств print("-"*50) print(f"\t - buy size = at price = ") self.orders[data._name] = self.buy(data=data, exectype=bt.Order.Limit, price=price, size=size) print(f"\t - Выставлена заявка на покупку ") print("-" * 50) else: # Если позиция есть if signal3 == 1: # sell print("-" * 50) print(f"\t - Продаем по рынку . ") self.orders[data._name] = self.close() # Заявка на закрытие позиции по рыночной цене print("-" * 50) def notify_order(self, order): """Изменение статуса заявки""" order_data_name = order.data._name # Имя тикера из заявки print("*"*50) self.log(f'Заявка номер @ ') if order.status == bt.Order.Completed: # Если заявка полностью исполнена if order.isbuy(): # Заявка на покупку self.log(f'Покупка Цена: , Объём: , Комиссия: ') else: # Заявка на продажу self.log(f'Продажа Цена: , Объём: , Комиссия: ') self.orders[order_data_name] = None # Сбрасываем заявку на вход в позицию print("*" * 50) def notify_trade(self, trade): """Изменение статуса позиции""" if trade.isclosed: # Если позиция закрыта self.log(f'Прибыль по закрытой позиции Общая=, Без комиссии=') def log(self, txt, dt=None): """Вывод строки с датой на консоль""" dt = bt.num2date(self.datas[0].datetime[0]) if not dt else dt # Заданная дата или дата текущего бара print(f', ') # Выводим дату и время с заданным текстом на консоль if __name__ == '__main__': cerebro = bt.Cerebro(quicknotify=True) cerebro.broker.setcash(2000) # Устанавливаем сколько денег cerebro.broker.setcommission(commission=0.0015) # Установить комиссию- 0.15% . разделите на 100, чтобы удалить % coin_target = 'USDT' # базовый тикер, в котором будут осуществляться расчеты symbol = 'BTC' + coin_target # тикер, по которому будем получать данные в формате symbol2 = 'ETH' + coin_target # тикер, по которому будем получать данные в формате store = BinanceStore( api_key=Config.BINANCE_API_KEY, api_secret=Config.BINANCE_API_SECRET, coin_target=coin_target, testnet=False) # Хранилище Binance # # live подключение к Binance - для Offline закомментировать эти две строки # broker = store.getbroker() # cerebro.setbroker(broker) # ----------------------------------------------------------- # Внимание! - Теперь это Offline для тестирования стратегий # # ----------------------------------------------------------- # # Исторические 1-минутные бары за 10 часов + новые live бары / таймфрейм M1 # timeframe = "M1" # from_date = dt.datetime.utcnow() - dt.timedelta(minutes=60*10) # data = store.getdata(timeframe=bt.TimeFrame.Minutes, compression=1, dataname=symbol, start_date=from_date, LiveBars=False) # поставьте здесь True - если нужно получать live бары # # data2 = store.getdata(timeframe=bt.TimeFrame.Minutes, compression=1, dataname=symbol2, start_date=from_date, LiveBars=False) # поставьте здесь True - если нужно получать live бары # Исторические D1 бары за 365 дней + новые live бары / таймфрейм D1 timeframe = "D1" from_date = dt.datetime.utcnow() - dt.timedelta(days=365*3) data = store.getdata(timeframe=bt.TimeFrame.Days, compression=1, dataname=symbol, start_date=from_date, LiveBars=False) # поставьте здесь True - если нужно получать live бары data2 = store.getdata(timeframe=bt.TimeFrame.Days, compression=1, dataname=symbol2, start_date=from_date, LiveBars=False) # поставьте здесь True - если нужно получать live бары cerebro.adddata(data) # Добавляем данные cerebro.adddata(data2) # Добавляем данные cerebro.addstrategy(RSIStrategy, coin_target=coin_target, timeframe=timeframe) # Добавляем торговую систему cerebro.run() # Запуск торговой системы cerebro.plot() # Рисуем график print() print("$"*77) print(f"Ликвидационная стоимость портфеля: ") # Ликвидационная стоимость портфеля print(f"Остаток свободных средств: ") # Остаток свободных средств print("$" * 77)
Посмотрев на код выше, можно легко увидеть, что
- импорт необходимых библиотек осуществляется строками 1..4
import datetime as dt import backtrader as bt from backtrader_binance import BinanceStore from ConfigBinance.Config import Config # Файл конфигурации
- класс Индикатора 11..17 строки, обычно выносят в отдельный файл
class UnderOver(bt.Indicator): lines = ('underover',) params = dict(data2=20) plotinfo = dict(plot=True) def __init__(self): self.l.underover = self.data < self.p.data2 # данные под data2 == 1
- класс Стратегии/Торговой системы 21..138, обычно выносят в отдельный файл
# Торговая система class RSIStrategy(bt.Strategy): """ Демонстрация live стратегии с индикаторами SMA, RSI """ params = ( # Параметры торговой системы ('coin_target', ''), ('timeframe', ''), ) def __init__(self): """Инициализация, добавление индикаторов для каждого тикера""" self.orders = <> # Организовываем заявки в виде справочника, конкретно для этой стратегии один тикер - одна активная заявка for d in self.datas: # Пробегаемся по всем тикерам self.orders[d._name] = None # Заявки по тикеру пока нет # создаем индикаторы для каждого тикера self.sma1 = <> self.sma2 = <> self.sma3 = <> self.crossover = <> self.underover_sma = <> self.rsi = <> self.underover_rsi = <> for i in range(len(self.datas)): ticker = list(self.dnames.keys())[i] # key name is ticker name self.sma1[ticker] = bt.indicators.SMA(self.datas[i], period=9) # SMA1 indicator self.sma2[ticker] = bt.indicators.SMA(self.datas[i], period=30) # SMA2 indicator self.sma3[ticker] = bt.indicators.SMA(self.datas[i], period=60) # SMA3 indicator # signal 1 - пересечение быстрой SMA снизу вверх медленной SMA self.crossover[ticker] = bt.ind.CrossOver(self.sma1[ticker], self.sma2[ticker]) # crossover SMA1 and SMA2 # signal 2 - когда SMA3 находится ниже SMA2 self.underover_sma[ticker] = UnderOver(self.sma3[ticker].lines.sma, data2=self.sma2[ticker].lines.sma) self.rsi[ticker] = bt.indicators.RSI(self.datas[i], period=20) # RSI indicator # signal 3 - когда RSI находится ниже 30 self.underover_rsi[ticker] = UnderOver(self.rsi[ticker].lines.rsi, data2=30) def next(self): """Приход нового бара тикера""" for data in self.datas: # Пробегаемся по всем запрошенным барам всех тикеров ticker = data._name status = data._state # 0 - Live data, 1 - History data, 2 - None _interval = self.p.timeframe if status in [0, 1]: if status: _state = "False - History data" else: _state = "True - Live data" print('<> / <> [<>] - Open: <>, High: <>, Low: <>, Close: <>, Volume: <> - Live: <>'.format( bt.num2date(data.datetime[0]), data._name, _interval, # таймфрейм тикера data.open[0], data.high[0], data.low[0], data.close[0], data.volume[0], _state, )) print(f'\t - RSI =', self.rsi[ticker][0]) print(f"\t - crossover =", self.crossover[ticker].lines.crossover[0]) coin_target = self.p.coin_target print(f"\t - Free balance: ") # сигналы на вход signal1 = self.crossover[ticker].lines.crossover[0] # signal 1 - пересечение быстрой SMA снизу вверх медленной SMA signal2 = self.underover_sma[ticker] # signal 2 - когда SMA3 находится ниже SMA2 # сигналы на выход signal3 = self.underover_rsi[ticker] # signal 3 - когда RSI находится ниже 30 if not self.getposition(data): # Если позиции нет if signal1 == 1: if signal2 == 1: # buy free_money = self.broker.getcash() price = data.close[0] # по цене закрытия size = (free_money / price) * 0.25 # 25% от доступных средств print("-"*50) print(f"\t - buy size = at price = ") self.orders[data._name] = self.buy(data=data, exectype=bt.Order.Limit, price=price, size=size) print(f"\t - Выставлена заявка на покупку ") print("-" * 50) else: # Если позиция есть if signal3 == 1: # sell print("-" * 50) print(f"\t - Продаем по рынку . ") self.orders[data._name] = self.close() # Заявка на закрытие позиции по рыночной цене print("-" * 50) def notify_order(self, order): """Изменение статуса заявки""" order_data_name = order.data._name # Имя тикера из заявки print("*"*50) self.log(f'Заявка номер @ ') if order.status == bt.Order.Completed: # Если заявка полностью исполнена if order.isbuy(): # Заявка на покупку self.log(f'Покупка Цена: , Объём: , Комиссия: ') else: # Заявка на продажу self.log(f'Продажа Цена: , Объём: , Комиссия: ') self.orders[order_data_name] = None # Сбрасываем заявку на вход в позицию print("*" * 50) def notify_trade(self, trade): """Изменение статуса позиции""" if trade.isclosed: # Если позиция закрыта self.log(f'Прибыль по закрытой позиции Общая=, Без комиссии=') def log(self, txt, dt=None): """Вывод строки с датой на консоль""" dt = bt.num2date(self.datas[0].datetime[0]) if not dt else dt # Заданная дата или дата текущего бара print(f', ') # Выводим дату и время с заданным текстом на консоль
- --- основной раздел --- строка 141
- подключение по API к бирже - строки 151..155
- задание параметров запуска стратегии 172..180
- запуск стратегии - строка 182
- получение данных по тикеру/тикерам по API строки 172..175
- обработка этих данных стратегией - строки 61..115
- выставление заявок на покупку/продажу - строки 105 - покупка и 114 - продажа
- возврат результатов из стратегии - строки 183, 187, 188
- вывод результатов - строки 183, 187, 188
Класс торговой системы имеет несколько основных методов:
- init - итак понятно - здесь инициализируем вспомогательные переменные и индикаторы для потоков данных
- next - вызывается каждый раз при приходе нового бара по тикеру
- notify_order - вызывается, когда происходит покупка или продажа
- notify_trade - вызывается когда меняется статус позиции
Вы можете по желанию расширять/добавлять новые методы/функционал.
Иногда лучше один раз увидеть, чем сто раз прочитать
Поэтому я записал специально для вас видео по созданию этой стратегии по шагам:
Если возникают какие мысли по созданию, пишите посмотрим.
Результат работы торговой стратегии по BTC и ETH
Параметры стратегии не были оптимизированы, поэтому она может дать более лучший результат.


Т.е. 2000 USDT превратилось в 5515 USDT => прирост 175%
Как мне видится, получилось довольно интересно 🙂 И жду ваших коммитов / фиксов / идей!
P.S. Код библиотеки частично написан сообществом, существенное изменение которое я внёс - это возможность торговать портфелем тикеров - не просто одним, а множеством тикеров. Исправил некие ошибки, многократно протестировал и добавил много хороших примеров для создания своих полноценных собственных стратегий. Конечно, еще есть моменты, над чем можно будет поработать.
Всем хорошего дня! Спасибо за уделенное время!
- binance
- trading
- btc
- algo-trading
- trading strategy
- trading robot
- trading bot
- binance robot trading
- backtrader
- binance backtrader
Как написать торгового робота: инструменты для начинающих

Тема автоматизированных систем для торговли на бирже довольно популярна в рунете в последние несколько лет. Однако начинающим инвесторам создать своего торгового робота может быть нелегко. Сегодня мы расскажем о том, как это можно сделать без лишних затрат.
Примечание: любая инвестиционная деятельность на бирже связана с определенным риском, это нужно учитывать. Кроме того, для запуска своего торгового робота вам понадобится брокерский счет, открыть его можно онлайн. Вы можете отладить свою стратегию с помощью тестового доступа с виртуальными деньгами.
Варианты создания роботов
Существует несколько вариантов создания роботизированного софта для торговли на бирже:
- Создание роботов для работы на прямом подключении – такие системы работают «в обход» торговой системы брокера, отправляя заявки напрямую в «движок» торговой системы биржи. Этот вариант используют уже опытные трейдеры, которые готовы платить в том числе и за такой способ подключения.
- Подключение к брокерской торговой системе по API. Некоторые брокеры позволяют подключать внешний торговый софт к своим торговым системам по специальным интерфейсам. Клиенты ITI Capital могут делать это с помощью API SMARTcom. В этом случае роботы могут быть достаточно сложными.
- Автоматизация операций напрямую в торговом терминале. Наиболее простой, подходящий для новичков способ, заключается в том, чтобы автоматизировать торговлю напрямую в базовой программе любого трейдера – терминале.
Как это работало раньше
Торговые терминалы предыдущих поколений можно было интегрировать с различными инструментами автоматизации. Одним из наиболее популярных, как ни странно, в свое время был Excel. С его помощью трейдеры могли настроить экспорт данных из торгового терминала, а также получать торговые приказы.

Меню для подключения Excel в одном из торговых терминалов прошлого поколения
Также распространенной практикой среди трейдеров было подключение к своим терминалам мощных систем технического анализа и разработки роботов вроде WealthLab и MetaStock. В таких случаях интеграция обычно осуществляется с помощью дополнительных библиотек.
В перечисленных случаях трейдер получал возможность автоматизации, и, в случае MetaStock и WealthLab, создания довольно сложных торговых систем, но связки с внешними программами часто оказывались ненадежными. С течением времени эта проблема была решена – в некоторых торговых терминалах появились встроенные языки программирования.
Как это работает теперь: изучаем язык TradeScript
В наши дни на российском рынке самый простой способ создать несложного торгового робота, работающего с системой брокера, это использование терминала SMARTx.
В нем есть специальный плагин с конструктором торговых роботов TradeScript. С помощью простого, но довольно мощного скриптового языка трейдеры могут создавать механические системы различного уровня сложности. Язык был изначально создан для разработки торговых роботов, он довольно прост в изучении, а многие алгоритмы схожи по написанию с Metastock, что облегчает работу пользователям, знакомым с этим программным пакетом.

Плюсом TradeScript по сравнению с Wealth-Lab и тем же Metastock является отсутствие необходимости создания сложных конструкций и использования различных коннекторов для передачи приказов в торговый терминал. Конструктор роботов встроен в SMARTx, что позволяет добиваться значительно более высокой надежности и быстродействия.
Вот пример торговой стратегии, записанной на TradeScript:
Buy Signals # Покупаем, если момент и инерция имеют однонаправленный тренд TREND(EMA(CLOSE, 20), 15) = UP AND TREND(MACD(13, 26, 9, SIMPLE), 5) = UP Sell Signals # Продаем, если момент и инерция имеют однонаправленный тренд TREND(EMA(CLOSE, 20), 15) = DOWN AND TREND(MACD(13, 26, 9, SIMPLE), 5) = DOWN Exit Long Signal # Выходим, если тренд инерции и момента имеет противоположное направления TREND(EMA(CLOSE, 20), 15) = DOWN OR TREND(MACD(13, 26, 9, SIMPLE), 5) = DOWN Exit Short Signal # Выходим, если тренд инерции и момента имеет противоположное направления TREND(EMA(CLOSE, 20), 15) = UP OR TREND(MACD(13, 26, 9, SIMPLE), 5) = UP
В пакете с TradeScript поставляет и модуль бэктестинга, который позволяет оценить продуктивность работы описанной стратегии на исторических данных. Помимо прочего, в системе реализована функция тестирования торговой системы «на лету» с использованием текущих биржевых данных, но без вывода приказа на биржу — время виртуальной сделки, цена и получившаяся «доходность» будут показываться в отдельном окне.

Кроме того пользователь может запускать столько одновременно работающих алгоритмов, сколько позволит тактовая частота процессора и память компьютера. Учитывая большое число слов и операндов скриптового языка, это означает возможность создания сколько угодно сложных торговых стратегий.
Что еще: отладка на тестовом доступе
Использование встроенной в торговый терминал функциональности по разработке торговых роботов – удобный и надежный способ автоматизации торговли. Однако несмотря на существующие функции для тестирования стратегий, не стоит пренебрегать и дополнительными возможностями отладки.
Поэтому мы рекомендуем перед запуском стратегии для торговли реальными деньгами «прогнать» ее на тестовом доступе. Этот шаг позволит отладить все моменты, включая реакцию программы на осуществленные сделки, без риска реальных финансовых потерь. Применение анализа с помощью исторических данных, проверки «на лету» и использование тестового доступа позволит максимально полно отладить вашу стратегию.
Полезные ссылки по теме инвестиций и биржевой торговли:
- Открыть брокерский счет онлайн
- Тестовый счет с виртуальными деньгами
- Софт для торговли на бирже: торговый терминал, мобильные приложения
- Структурные продукты
- Модельные портфели
Как создать торгового робота и не потерять время

Торговля на финансовых рынках сопряжена с множеством рисков, в числе которых самый главный - это риск совершить ошибку при принятии торгового решения. Мечта каждого трейдера – поставить вместо себя торгового робота, автомат, который всегда в отличной форме, не знает усталости и не подвержен людским слабостям: страху, жадности и нетерпению.

Каждый новичок, приходя на рынок, надеется заполучить или создать четкую и строгую торговую систему, которую можно переложить на язык алгоритмов, и полностью избавиться от рутинной работы. Возможно ли это?
Наличие торговой системы является необходимым условием для торговли, и эта система, конечно, должна быть прибыльной. Когда новичок приходит на рынок, на него буквально обрушивается лавина информации, в которой не так-то просто разобраться. И на помощь здесь приходят книги и форумы трейдеров.
К сожалению, не все авторы книг являются успешными трейдерами, и не все успешные трейдеры являются авторами книг. Многие специализированные ресурсы создаются только для заработка их хозяевами, ведь торговать на свои деньги гораздо сложнее, чем выпускать прогнозы и обучать торговым системам.
Каждый трейдер должен самостоятельно пройти все стадии на пути создания собственной торговой системы. Не зря говорят, что не важно, по какой системе ты торгуешь, главное, чтобы ты действительно торговал по этой системе. Без этого торговля на рынке превращается в азартную игру, исход которой предрешен.
Торговые роботы и Forex
Считается, что рынок Forex обладает огромной ликвидностью и позволяет торговать 24 часа в сутки в отличие от многих других рынков. Поэтому многие трейдеры пытаются создать торговые роботы именно для торговли на валютном рынке, ведь он представлен достаточно большим количеством инструментов.
Правда, скептики заявляют, что на самом деле все валютные пары сильно скоррелированы между собой, и волатильность на форексе слишком маленькая. Но их противники отвечают, что, несмотря на наличие корреляции, каждая валютная пара имеет свой характер, а малая волатильность компенсируется большим плечом.
В любом случае, инструменты форекса являются привлекательными для создания торговых роботов, и большинство сторонников автоматического трейдинга именно на валютных парах оттачивают свои навыки.
Клиентские терминалы MetaTrader 4 и MetaTrader 5 специально разработаны для удобного создания автоматических торговых систем, но при этом их интерфейс продуман и также удобен для ручной торговли.
Как приступить к созданию торгового робота?
Встречается множество подходов к построению автоматической торговой системы. Выделим только несколько основных из них.
Первый подход – математический, основан на попытке создания некой формулы, которая учитывает множество факторов. Такой подход базируется на твердой уверенности, что в основе поведения цен лежит некая модель, которую нужно только подобрать или угадать на основе имеющихся исторических данных.
Зачастую сторонники такого подхода знают слишком много математики и совсем не знают/не интересуются рынком. Рынок для них - чистая абстракция, одна из разновидностей интеллектуальной игры. Такой подход обычно ведет к многолетним изучениям и разработкам, результат в виде работающей автоматической торговой системы сам по себе не является важным.
Второй подход берет за основу изучение закономерностей рынка. При этом не делается никаких попыток понять, почему цена растет или падает при появлении тех или иных фигур технического анализа на графике цены. Преимущество этого подхода заключается в том, что он не требует особых знаний математики и не делает предположений о движущей силе рынка.
Такой подход наиболее понятен и удобен для обучения торговле на рынке. Чаще всего именно его проповедуют трейдеры, получившие всеобщее признание. Недостатком подхода является необходимость постоянно находиться у монитора и отслеживать все необходимые инструменты на экране монитора.
В конце концов трейдер начинает задумываться над автоматизацией торговых процессов, и тут выясняется самая большая проблема – сложность формализации торговых правил при попытке перенести торговые правила на язык алгоритмов. Трейдеры, которые пытаются заказать торговый робот профессионалам, не всегда могут сформулировать правила торговли и найти общий язык с программистами.
Третий подход основан на попытке создать «черный ящик» на основе нейронных сетей с помощью готовых инструментов, широко представленных на рынке в специализированном ПО и в математических пакетах. Строительство своей собственной автоматической торговой системы с применением элементов искусственного интеллекта является очень интересной и увлекательной задачей даже для новичков, так как не требует ни глубокой математической подготовки, ни опыта программирования – все делается с помощью визуальных средств.
От трейдера в этом случае требуются базовое знание индикаторов технического анализа, умение подготовить необходимые ценовые данные и навыки работы с конкретным пакетом по работе с нейронными сетями. Главным недостатком такого подхода является то, что полученный с помощью специализированных инструментов по работе с нейронными сетями торговый автомат на самом деле является «черным ящиком» - принципы его работы неизвестны самому трейдеру, и нельзя в общем случае предсказать, какая фаза рынка ему не понравится.
Программисты часто выбирают четвертый путь – они сразу начинают писать торгового робота и не хотят особенно тратить время на ручную торговлю. Зачем? Ведь можно сразу написать автомат, потратив на это несколько месяцев, и затем только пожинать плоды своего труда.
Но «без труда не вынешь и рыбку из пруда», и программист зачастую вместо торгового робота начинает писать с нуля на известном ему языке программирования всю нужную инфраструктуру – получение и обработка ценовых данных, визуальное представление графиков и индикаторов, собственные средства по тестированию стратегии на истории и так далее.
В процессе этой работы он получает много полезного опыта. Но при этом он, чаще всего, ни на йоту не приближается к конечной цели – созданию автоматической торговой системы. И если даже он пройдет весь путь до конца, то где гарантия, что написанный робот окажется прибыльным? А если он захочет написать другую торговую систему? Нужно все перестраивать и разбираться с новыми неизбежными ошибками программирования.
Есть еще и пятый путь – попытаться купить готовую торговую систему в виде торгового робота и торговать с его помощью, при этом трейдер выступает в качестве оператора или настройщика. Такой вариант существенно экономит время (не требуется изучать множество новых вещей) и позволяет сразу же окунуться в мир автоматической торговли.
Главный недостаток такого подхода проистекает из его достоинств – вы не знаете, как работает данный торговый робот и на каких принципах он построен. И если даже продавец предоставил вам подробное описание заложенной в нем торговой системы, вы никогда не будете в ней уверены до конца.
Впрочем, 100%-ную гарантию не дает ни один подход, кроме депозита в банке. Но это не совсем то, за чем идет человек, интересующийся биржей и возможностями спекулятивного преумножения капитала.
Какой путь в автоматический трейдинг выбрать трейдеру?
Каждый из пяти описанных подходов имеет свои преимущества и соответствует своему типу трейдера. Вряд ли вы без хорошего математического багажа выберете первый путь – попытку аналитического описания рынка. И маловероятно, что вы сразу же пойдете путем строительства торгового робота на основе нейронных сетей. Хотя оба этих варианта очень привлекательны и интересны и предоставляют хорошую зарядку для ума.
Далее в статье мы поговорим только о втором подходе, который уже является классическим. Именно с него начинает свой путь в автотрейдинг подавляющее большинство трейдеров, так как знание технического анализа еще никто не отменял при освоении основ торговли на рынках.
Достоинство второго подхода заключается еще и в том, что после того, как вы самостоятельно поторгуете на рынке вручную и впитаете в себя то, что многие называют чувством рынка, вы уже будете хорошо понимать сами инструменты технического анализа. Помимо этого вы сможете заняться самостоятельно программированием торговых стратегий или созданием нейронных сетей на более высоком уровне.
Первые шаги по созданию торгового робота
Для написания автоматической торговой системы требуются навыки программирования и знание всех тонкостей обработки торговых запросов. Но вы можете на первом этапе начать знакомство с уже готовыми экспертами – торговыми роботами из бесплатной библиотеки Code Base .
Скачайте любой эксперт (торговый робот) и запустите его в тестере стратегий клиентского терминала MetaTrader 4 или MetaTrader 5. Выберите один участок истории с ярко выраженным трендом и второй участок, на котором цена находится в диапазоне/флете. Проведите оптимизацию входных параметров эксперта и посмотрите, как они отличаются на этих двух участках.
Запустите на трендовом участке эксперт с оптимальными параметрами для флета, и наоборот – на флетовом участке с параметрами для тренда. Посмотрите, насколько сильно меняются торговые результаты, как меняются распределения сделок и остальные статистические параметры. Таким образом, вы узнаете, как сильно может меняться поведение торговой системы при изменении ситуации на рынке.
Желательно таким путем исследовать несколько классических торговых стратегий на разных участках истории и на разных инструментах. Такая обкатка в тестере может оказаться хорошей прививкой на будущее от подгонки торговой системы под конкретную историю и поможет лучше понимать суть трендовых и контртрендовых систем.
Следующим шагом может стать создание более сложных торговых систем на основе комбинации уже существующих простых сигналов из набора Мастера MQL 5. Вы можете, еще не прибегая к программированию, проверить и развивать свою торговую интуицию, отсеивая плохие сигналы одной системы с помощью фильтра на основе другой системы.
Но и тут главное не перестараться, ведь чем больше входных параметров в торговой системе, тем легче ее подогнать. Немало копий сломано в спорах о том, как отличить оптимизацию от подгонки, здесь нет готовых универсальных рецептов. Но вам может помочь визуализация результатов тестирования/оптимизации и собственный здравый смысл.
Научитесь из всего набора входных параметров выявлять именно те, которые влияют на торговую систему. Не принимайте во внимание второстепенные параметры, которые отнимают время при оптимизации, но не влияют на саму логику системы. Помните, что хорошая торговая система всегда допускает небольшой люфт по второстепенным параметрам, но при этом не делает драматических провалов при небольшом изменении характера рынка.
Вы можете потратить времени на этом этапе столько, сколько вам требуется для того, чтобы быть уверенным, что вы хорошо можете понимать любую торговую стратегию по результатам тестирования и оптимизации. Знание слабых и сильных сторон традиционных систем позволит вам быть более подготовленным при создании своего собственного торгового робота.
Программирование торгового робота
Вы изучили/изучаете язык программирования MQL 4 или MQL 5 и готовы написать свой первый советник для клиентского терминала MetaTrader . Здесь тоже возможно несколько вариантов.
Во-первых, вы можете разобрать несколько уже готовых торговых роботов по опубликованным статьям, чтобы лучше понимать тонкости программирования.
Во-вторых, вы можете задавать вопросы на форуме MQL4.community или MQL5.community, если самостоятельно не смогли разобраться в каких-то моментах. Обычно остальные участники сообщества охотно помогают новичкам, если видят их искреннюю заинтересованность в изучении предмета.
В-третьих, вы можете заказать доработку или разработку советника или индикатора в сервисе Работа, если по каким-то причинам не можете сделать нужную программу самостоятельно. Но даже при заказе торгового робота через фриланс-сервис вам желательно хорошо разбираться в вопросах тестирования стратегий, чтобы говорить с разработчиком на одном языке.
Кроме того, знание языка программирования на базовом уровне позволит вам впоследствии самому вносить мелкие исправления и изменения в полученный код уже после завершения работы. Ведь не будете же вы по каждому мелкому поводу обращаться к другому программисту, гораздо быстрее и проще сделать это самому.
"Всё украдено до вас"
Как найти собственную торговую систему или хотя бы знать, в каком направлении нужно сосредоточить поиски? Каждый трейдер дорожит своей системой, если она у него есть, и каждый новичок мечтает создать свою или получить уже готовую прибыльную стратегию. При этом любая найденная идея кажется слишком простой по сравнению с тем, какой должна быть настоящая работающая система в представлении новичка.

Военные во всех странах склонны к чрезмерному уровню секретности, и не зря на этот счет существует множество анекдотов, среди которых есть и такой: "Военная тайна заключается не в том, что вы это знаете" - говорит инструктор курсантам военного училища, - "а в том, что это знаете именно вы". С торговыми системами ситуация примерно такая же: большинство трейдеров используют простые известные торговые идеи, только с небольшими доработками, например, в виде использования трейлинг стопа (Trailing Stop) или подтверждения сигналов от трендовых индикаторов.
Существует множество закрытых трейдерских форумов, на которых идет совместная разработка или доработка секретных торговых систем и куда закрыт вход простым смертным. Самое интересное, что ничего секретного на них найти нельзя, всегда берется старая классическая идея, вроде "торгуй по тренду" и доводится до совершенства с помощью каких-то новых неизвестных широкой публике индикаторов.
Поэтому вы можете смело брать доступные в исходном виде коды торговых роботов и пытаться найти правильное их использование на тех или иных инструментах и таймфреймах. Тут на память сразу приходит другая избитая поговорка: "Вы не любите кошек? Вы просто не умеете их готовить!" В это трудно поверить, но вероятность того, что вы придумаете что-то принципиально новое, очень мала. Тут главное всё правильно сделать самому из доступных ингредиентов и не думать, что кто-то сверхумный пользуется какими-то секретными разработками из лабораторий NASA. В этом и заключается секрет Грааля.
Редкая птица долетит до середины Днепра.
"Если торговые идеи лежат буквально под ногами, то почему ими никто не пользуется?" - возникает резонный вопрос. Ответ на него кроется, вероятно, в человеческой психологии. Многие банки и крупные инвестиционные фонды содержат в своих штатах трейдеров, которые торгуют по расписанным правилам и в объемах, которые им позволены. Но почему-то редко когда институциональные трейдеры уходят на вольные хлеба и начинают торговать на свои деньги.
Получается, что нужна не только сама торговая стратегия, но и железная дисциплина, чтобы выполнять все её правила. Многие трейдеры с горечью убеждались, что они такие же смертные, как и все остальные, и им не чужды все те проблемы психологии, которые описаны в книгах. И осознав, что самый большой враг трейдера - это он сам, трейдер задумывается о создании торгового робота, который будет работать вместо него и снимет с него психологическую нагрузку.
Отклоняясь немного от темы, приведем в пример легендарную группу "Черепахи", которая успешно торговала на множестве рынков в конце 20-го века. Почитайте "Путь черепах", и вы поймете, что главное в профессии трейдера именно железная внутренняя дисциплина, а не какая-то суперсекретная система. Увы, большинство не сможет торговать по прибыльной стратегии, даже если получит её даром.
Проблема заключается в том, что большинство торговых стратегий, которые успешно торгуются вручную, с трудом поддаются формализации и переложению на язык компьютеров. Те стратегии, которые легче всего запрограммировать, например, на пересечении двух скользящих средних, являются слишком простыми и требуют множество уточнений и доработок, чтобы ими можно было пользоваться на деле. Таким образом, простая идея обрастает множеством внешних параметров, которые позволяют роботу избежать ложных входов и ошибок, хорошо видимых человеку. Возникает проблема оптимизации торгового робота. В итоге она не должна превратиться в переоптимизацию и подгонку под конкретный участок истории.
Именно для борьбы с подгонкой в тестере терминала MetaTrader 5 существует возможность форвардного тестирования на найденных при оптимизации параметрах системы. Если результаты форвард-тестирования торговой стратегии не сильно отличаются от результатов, полученных на участке оптимизации, то есть надежда, что торговый робот будет достаточно стабилен некоторое время после его запуска в онлайн-торговлю. Длина интервала для проведения оптимизации параметров и длительность этого "некоторого времени" зависят от конкретной торговой системы.
Таким образом, оптимизация торгового робота перед его запуском в онлайн-торговлю по сути напоминает раскручивание пращи - от того как тщательно мы раскрутили и швырнули снаряд из пращи, зависит насколько далеко и точно он улетит от точки броска. Хорошо построенный торговый робот продержится на счете с положительным результатом более длительное время, чем его собрат, полученный в результате подгонки. Можно сказать, что Грааль - это работающая идея и правильная корректировка параметров, проводимая время от времени при изменении рыночных условий.
Иллюстрацией для такого примера могут служить результаты Чемпионата по автоматической торговле Automated Trading Championship, проводимого уже в течение многих лет. Все участники перед началом соревнований проходят автоматические проверки присланных экспертов - торговых роботов на интервале с января по конец июля. Главным требованием для прохождения такой проверки является полученная прибыль за восемь месяцев тестирования. Но менее половины допущенных к Чемпионату роботов остаются в плюсе после трехмесячной автономной работы.
Вы также можете попробовать свои силы в создании и правильной настройке своего торгового робота, чтобы принять участие в Чемпионате и получить результаты форвард-тестирования своего детища. Тем более что участие является бесплатным, а призы ощутимыми. Как говорится - "Welcome"!
Заключение
Профессиональный трейдер, торгующий внутри дня, проводит за монитором много часов в ожидании удачного момента для совершения сделки, и он не всегда может быть в отличной форме.
Большинство трейдеров приходит к мысли, что зачастую их действия при торговле нарушают их же собственные торговые правила. Пусть не все торговые системы можно автоматизировать, но даже для них в большинстве случаев можно создать вспомогательные инструменты в виде индикаторов, аналитических систем и фильтров ложных сигналов.
Мы не даем здесь конкретных рекомендаций по изучению языка MQL4 или MQL5, на эту тему написано много других полезных статей. Цель данной публикации состояла в том, чтобы дать начальное представление о том, как и с чего начать создание собственного торгового робота для терминалов MetaTrader 4 и MetaTrader 5.
Надеемся, что эта статья сэкономит новичкам время и укажет нужное направление в нелегком деле создания автоматической торговой системы.
Предупреждение: все права на данные материалы принадлежат MetaQuotes Ltd. Полная или частичная перепечатка запрещена.
Создание роботов для начинающих трейдеров: что важно знать

Торговля стала занимать много места в жизни? Возникли мысли по написанию робота? С чего начать? В этой статье мы собрали основную информацию, которую необходимо знать начинающим роботостроителям.
- Введение. Человек — не машина.
- Какие бывают торговые роботы.
- Купить или создать самому.
- Где черпать идеи для торгового робота.
- Стадии создания торгового робота
- Затраты на создание и эксплуатацию
- Заключение
Начни пользоваться ATAS абсолютно бесплатно! Первые две недели использования платформы дают доступ к полному функционалу с ограничением истории в 7 дней.
Введение. Человек — не робот.
Как обычно начинается путь трейдера? Он с воодушевлением приступает к обучению — читает статьи, смотрит видео ролики для трейдеров , загружает программы, применяет полученные знания на практике. И потом понимает, что торговля на бирже предоставляет не только богатые возможности для заработка, но и бесконечные шансы совершить ошибку ( как преодолеть полосу убытков ).
«Errare humanum est – Человеку свойственно ошибаться”. Римский ритор Луций Анней Сенека.
Ошибки трейдера, как человека:
- Механические . В 2014 году трейдер компании Mizuho Securities случайно разместил заявки на покупку размером более 600 миллиардов долларов на японском фондовом рынке; цена и объем данных были введены в одном столбце. К счастью, большинство заказов не было выполнено до того, как они были отменены.
- Аналитические . “Ой, не правильно оценил силу и слабость рынка. Не заметил важный уровень!”
- Организационные . “Ах, отлучился в момент выхода новостей. Опоздал к открытию сессии, пробки были”.
- Психологические . Вообще отдельная тема.
Психологи утверждают, что негативный опыт для человека более явно выражен, он дольше остается в памяти и постоянно заставляет сомневаться. Даже когда текущая ситуация кажется оптимальной для входа в позицию, опыт прошлых неудач порождает сомнения, и в результате хорошая точка входа упускается. После чего трейдер становится еще более критичен к себе, теряет уверенность.
Чтобы преодолеть ошибки, трейдер удваивает и утраивает усилия. Ему требуется уже больше времени, чем нормальный рабочий день. Это приводит к хронической усталости, апатии и депрессии. Трейдер выгорает.
Так возникает идея — нанять на работу робота .
Мысль здравая, хоть и не нова. Первая концепция автоматизированной торговой системы была представлена Ричардом Дончианом в 1949 году, когда он составил программируемый набор правил для покупки и продажи акций.
В те годы роботы были фантастикой, но сегодня они уже прочно вошли в биржевую индустрию. Как следует из доклада специалистов Центрального банка РФ, в 2018 году на Московской бирже половина все сделок совершены программными алгоритмами.
Почему роботы завоевывают рынки? А кто как не робот сможет:
- собрать гигабайты данных (сезонность, политика, финансовые отчеты, складские запасы продукции, безработица)
- за секунды сделать анализ по запрограммированным алгоритмам
- выдать четкий результат: покупать или продавать.
Кроме того, робот, в отличие от человека, не подвержен сомнениям из-за прошлых неудач. Он не входит в сделку, когда ему скучно. Он не доказывает рынку свою правоту. Он не отвлекается на соцсети. И ему не нужен перерыв на ланч.
2. Какие бывают торговые роботы.
Современный рынок предлагает готовых торговых роботов, на разный вкус и кошелек.
По уровню сложности, роботы могут быть:
- Простейшие алгоритмы предлагают торговые модели на основании уже известных индикаторов. Например, покупаем, когда быстрая МА пересекает вверх медленную.
- Продвинутые анализируют фигуры технического анализа, свечи, занимаются поиском паттернов.
- Профессиональные роботы используют анализ объемов, поток ордеров, смотрят в биржевой стакан.
- Самые мощные роботы экстра-класса оценивают электронные СМИ, делают нейролингвистический анализ, собирают отчеты бирж и брокеров, используют макроэкономические законы, применяют системы искусственного интеллекта и машинного обучения.
По степени автоматизированности роботы бывают:
- Полный автомат . Сам анализирует рынок, сам открывает сделку, сам закрывает.
- Полуавтомат . Среди них — ассистенты, в задачи которых входит постановка стопа и тейк-профита. Такие роботы сокращают время трейдера при ручном управлении большими портфелями, помогают сэкономить время и снизить риск нажатия “не той кнопки”.
По частоте исполнения:
- Обычная частота совершения сделок . Такие роботы торгуют не чаще, чем обычный трейдер-человек. Их алгоритмы часто основаны на классических индикаторах, моделях поведения цены и объема.
- Высокочастотные. Торговые роботы HFT (high-frequency trading) покупают и продают позиции в течение долей секунды. По оценкам на 2009 год, HFT торговля занимала 60-73 % от всего объема сделок на рынках США, в 2012 году эта доля упала примерно до 50 %.
Сложный анализ фундаментальных факторов в задачи HFT роботов не входит. Они нацелены на то, чтобы, например, двигать цену в определенном направлении, собирать ликвидность, формировать ложные фигуры и паттерны, удерживать ценовые уровни, торговать импульс.
3. Купить или создать самому.
Купить готовый торговый алгоритм или приступить к разработке собственного?
Плюсы покупки готового робота:
- экономия времени;
- доступно для новичков. Продавец робота обычно оказывает содействие в решении проблем при установке робота.
Минусы покупки готового робота:
- покупая готовый торговый алгоритм, вы скорее всего столкнетесь с тем, что авторы не разглашают заложенных в программу торговых моделей, такой торговый алгоритм будет всегда выполнять волю своего создателя.
- автор робота может сфальсифицировать результаты прошлых торгов. В любом случае, нет никакой гарантии, что успехи робота за прошедший период принесут вам прибыль в будущем.
- множество проданных экземпляров робота может негативно повлиять на эффективность его алгоритма.
- стоимость некоторых роботов сравнима с ценой на авто, которое вы хотите купить за счет возможной прибыли от их торговли
Альтернативная идея — создать своего собственного торгового робота “с нуля”.
Плюсы:
- вы получаете уникальный программный продукт, использующий ваши собственные наработки и знания
- в будущем вы можете оптимизировать код, добавлять новые функции, исправлять ошибки, подстраиваться под разные рынки
- экономия денег, если вы пишете робота самостоятельно
Минусы:
- занимает много времени
- написать робота под заказ стоит дороже, чем купить готового
- программист-исполнитель может позаимствовать вашу идею
Стоит также заложить в бюджет средства на содержание торгового алгоритма. Ведь даже после длительного тестирования робот будет требовать бесконечных доработок. Причина — рынок постоянно меняется, и ранее эффективные методики перестают давать профит.
4. Где черпать идеи для торгового робота.
Модели расторговки скользящих средних и прочих технических индикаторов известны всем. Какие идеи могут быть конкурентными, способными зарабатывать продолжительное время?
Попробуйте взглянуть на рынок под другим углом. Например трейдерам привычно воспринимать график на котором ось абсцисс (ось Х) является временной, и свечи формируются за конкретный период — 5, 10, 30 мин.
Но представьте, что временную ось можно заменить на ось объемов или еще интереснее — на ось пройденных ценой пунктов вверх или вниз. Такие идеи формировались в умах трейдеров, которые придумали другие типы графиков , отличные от обычных периодов.

Пример построения графика в формате RangeUS . Глядя на этот пример начинает казаться, будто рынок длительное время ходил в рейндже (рейндж — боковое движение цены, которая многократно формирует повторяющиеся максимумы и минимумы).
Однако, если присмотреться, то можно заметить, что большая часть графика расположилась во временном отрезке из 3-х секунд. Отработать такой рейндж под силу только высокочастотным алгоритмам.

Глядя на этот график, в глаза бросается появление рейнджей на всем движении цены. Чем не идея для торгового алгоритма? Осталось только подобрать соотношения рейндж баров для инструмента, при котором такие формации будут чаще появляться на графике.
Уменьшая соотношения для RangeUS графика, можно заметить, что рейндж участки часто повторяются в тех же местах, где они появлялись ранее. Т.е. если вы ранее наблюдали на определенном отрезке формирование рейнджа, то ситуация может повториться, когда цена вернется к нему.

Такие наблюдения наталкивают на мысль о цикличности рынка. Участки, где цена некоторое время назад формировала рейндж, “магически” заставляют цену снова формировать новый рейндж при вхождении в этот ценовой диапазон.
Эта простая но нестандартная идея основана на визуальном распознавании паттернов, она может быть положена в основу торгового алгоритма. Хотите что-нибудь особенное? Скачайте ATAS, и найдите свою уникальную идею торговли.
5. Стадии создания торгового робота
Рассмотрим процесс создания робота “с нуля”. Не будем учитывать специфику рынков, платформ, бирж. Базовая схема такова:
- Все начинается с идеи . Вы замечаете характерный паттерн, который регулярно повторяется на вашем рынке, и понимаете, что он интересен с точки зрения потенциала получения прибыли в долгосрочной перспективе.
- Ручное тестирование . Вы формулируете условия входа/выхода, и исследуете, как они работают на графиках предыдущих сессий. Желательно рассмотреть как можно больше дней, включая периоды разной волатильности. Записывайте результаты каждого дня в таблицу. Если вы получили положительную сумму и убедились в работоспособности идеи — подключаем программиста.
- Создание техзадания. Ищите программистов, которые хотя бы опосредованно имеют представление о биржах, потоках ордеров, порядке сведения ордеров и прочих биржевых премудростях. Вы находите такого исполнителя, даете ему конкретные инструкции, и ждете вашего робота.
- Бек-тестирование и оптимизация. Получив робота, начинаем его тестирование на истории. Загружаем в торговый алгоритм максимум подробных исторических данных (найти тиковую историю торгов может быть непросто). Меняя настройки робота, находим оптимум, при котором робот обеспечивает лучший результат при допустимых потерях.
- Фронт-тестирование. Проверка боем. Робот входит в торги на небольшом объеме. Будьте готовы, что результаты торговли на “живом” рынке могут оказаться хуже. Как вариант, такая ситуация является следствием недостаточного тестирования алгоритма на истории.
Тогда наступает процесс повторной оптимизации торгового алгоритма. Он может растянуться, а впрочем, и не закончиться на всем периоде эксплуатации робота. Будут добавляться новые идеи, изживать себя старые, и в этом творческом процессе алгоритм станет кардинально отличаться от своей первой версии.
6. Затраты на создание и эксплуатацию
Есть шанс, что суммарные затраты на создание сложного торгового алгоритма будут превышать ту прибыль, которую получится извлечь при его использовании. Поэтому идея создания своего торгового робота должна иметь хорошую финансовую подпитку, основанную на серьезных результатах ручного тестирования.
Но допустим, что робот у вас есть. На реальном рынке от него больше прибыли, чем потерь. Что дальше? Можно запустить робота на локальном компьютере. Тут появляется риск отключения электричества, интернета. Воры взломают офис, или уборщица зальет водой системный блок. Всякое бывает.
Более надежный шаг — сотрудничество с биржей. Тут 2 варианта:
- Установка робота на компьютерных мощностях, которые базируются в биржевых дата-центрах
- Установка собственного оборудования в центре обработки информации. Такая услуга называется Co-location и предусматривает дополнительные расходы. Так, например, Московская биржа предоставляет возможность разместить у себя ваше оборудование мощностью не более 500 Вт за 20 000 рублей ежемесячно ( смотреть все тарифы ).
Конечно, эти варианты рациональны только особо продвинутым торговым алгоритмам, для которых скорость подачи ордеров и обработки входящей информацией стоит на первом месте.
Но такие роботы самые эффективные, потому что от скорости подачи заявок на биржу будет зависеть возможность двигать рынок. Им открываются возможности обогнать практически все удаленные алгоритмы, которые также ориентируются на поток ордеров и стакан. Алгоритм, работающий как можно ближе к ядру биржи, имеет преимущество. Он успевает “выдергивать” из стакана самые “вкусные” цены в то время как остальные получают проскальзывание.
7. Заключение
Из всего изложенного можно сделать вывод, что создание собственного торгового робота — занятие трудоемкое и затратное. Приступая к моделированию своего будущего искусственного интеллекта, вы должны понимать, что ранее уже разработано, создано и внедрено множество торговых алгоритмов, которые уже прошли бэк-тестирование, фронт-тестирование, и десятки раз подвергались оптимизации и доработке.
В то же время, если вы ваш робот нацелен не биться с другими роботами, а помогать вам торговать — это более легкий путь. Такой алгоритм может:
- отслеживать разные периоды разных рынков
- привлекать ваше внимание только в те моменты, когда график формирует ваш любимый сетап
- соблюдать правила капитал-менеджмента
- давать вам больше времени на развитие или занятия другими делами.
Понравилось? Расскажите друзьям:
- Поделиться Facebook
- Поделиться Twitter
- Поделиться Pinterest
- Поделиться LinkedIn
- Поделиться Vk
Другие статьи блога:
Мнения трейдеров ATAS
Покупал дорогие курсы по smart money, а результат получил больше с вашего блога.
Постоянно обновляю свои знания. Смотрю youtube, но больше верю своему опыту и практике.
Андрей В трейдинге С 2020 года
На самом деле могу сказать следующее про ваш блог и видео на ютуб. Если у вас конструктивное мышление и есть хоть какие-то базовые знания и понимание биржевой торговли, то блога в сочетании с платформой ATAS, вполне хватит для создания торговых стратегий и успешной торговли на любой бирже!
Это факт.
Павел В трейдинге С 2011 года
Сначала для обучения использовал рекомендации приятия из хедж фонда. Но несколько месяцев назад начал смотреть видео на youtube-канале ATAS.
Антон В трейдинге С 2018 года
Tags
© Copyright - Atas.Net | API | Custom indicators
DISCLAIMER: Trading on the financial markets is often accompanied by a high level of risk. The product of our company is the software that gives an opportunity to get additional data for market analysis. The client, in turn, uses the data at his/her own discretion. Any information provided on this site is for informative purposes only and not to be construed as a recommendation for trading operations.
X Этот сайт использует файлы cookie. Продолжая просматривать сайт, вы соглашаетесь на использование нами файлов cookie. Настройки файлов cookie Читать далее Принять все
Manage consent
Общие сведения о конфиденциальности
Этот веб-сайт использует файлы cookie для улучшения вашей навигации по веб-сайту. Из них файлы cookie, которые классифицируются как необходимые, хранятся в вашем браузере, поскольку они требуются для работы основных функций веб-сайта. Мы также используем сторонние файлы cookie, которые помогают нам анализировать и понимать, как вы используете этот веб-сайт. Данный тип файлов будет храниться в вашем браузере только с вашего согласия. У вас также есть возможность отказаться от этих файлов cookie. Но отказ от некоторых из этих файлов cookie может повлиять на ваше использование данного веб-сайта.
Необходимые
Always Enabled
Необходимые файлы cookie требуются для правильного функционирования работы веб-сайта. Эти файлы cookie обеспечивают анонимность основных возможностей и функций безопасности веб-сайта.
| Cookie | Duration | Description |
|---|---|---|
| .AspNetCore.Antiforgery.RCuQdhHRBFg | session | Служит в целях безопасности для предотвращения подделки запросов |
| ATAS.Billing | 10 day | Токен авторизованного пользователя |
| aviaCookieConsent | 1 year | Этот файл cookie указывает на то, что Вы согласны с использованием файлов cookie на нашем сайте |
| aviaPrivacyEssentialCookiesEnabled | 1 day | Этот файл cookie указывает на то, что Вы согласны с использованием файлов cookie на нашем сайте |
| aviaPrivacyRefuseCookiesHideBar | 1 day | Этот файл cookie указывает на то, что Вы согласны с использованием файлов cookie на нашем сайте |
| BillingAuthorized | 10 day | Служит для отображения залогинился ли пользователь |
| bulkTime | 1 year | Оптимизатор изображений коротких пикселей WordPress |
| cookielawinfo-checkbox-others | 11 months | Этот файл cookie устанавливается плагином GDPR Cookie Consent. Файл cookie используется для хранения согласия пользователя на использование файлов cookie в категории «Другие» |
| cookielawinfo-checkbox-performance | 11 months | Этот файл cookie устанавливается плагином GDPR Cookie Consent. Файл cookie используется для хранения согласия пользователя на использование файлов cookie в категории «Производительность» |
| language | session | Этот файл cookie используется для сохранения выбора языка пользователя |
| LanguageSwitcher | session | Этот файл cookie используется для сохранения языковых предпочтений пользователя |
| oftinf | never | Записывает ID партнера, который привел пользователя |
| PHPSESSID | session | Этот файл cookie характерен для приложений PHP. Этот файл cookie используется для хранения и идентификации уникального идентификатора сессии пользователя, чтобы управлять сессией пользователя на сайте. Этот файл cookie является сессионным и удаляется при закрытии всех окон браузера |
| wp-wpml_current_language | 1 day | Сохраняет текущий язык. WordPress плагин WPML |
Аналитические файлы cookie используются для понимания того, как посетители взаимодействуют с веб-сайтом. Эти файлы cookie помогают предоставлять информацию о таких показателях, как количество посетителей, показатель отказов, источник трафика и т. д.
| Cookie | Duration | Description |
|---|---|---|
| ___dc | 10 year | Используется для идентификации пользователей сайта в системе Roistat |
| _clck | 1 year | В браузере сохраняется идентификатор и предпочтения пользователя Clarity, которые уникальны для этого сайта. Это обеспечивает, чтобы в последующих посещениях того же сайта поведение было применено к тому же идентификатору пользователя |
| _clsk | 1 day | Объединяет несколько просмотров страниц пользователя в одну запись сеанса Clarity |
| _ga | 2 year | It registers a unique identifier used to generate statistical data on how visitors use the website |
| _gat | 1 day | Использует Google Analytics для анализа количества запросов на сайте |
| _gat_gtag_UA_51120514_1 | 1 minute | Google настроен, чтобы различать пользователей |
| _gat_gtag_UA_51120514_2 | 1 minute | Google настроен, чтобы различать пользователей |
| _gcl_au | 3 months | Google Tag Manager provides anexperimental evaluation of theeffectiveness of advertising onwebsites that use its services |
| _gid | 1 day | Регистрирует уникальный идентификатор, который используется для создания статистических данных о том, как посетитель использует сайт |
| _ym_d | 1 day | Этот файл cookie используется для хранения даты первой сессии пользователя на сайте |
| _ym_isad | 1 year | Этот файл cookie используется для сбора информации о пользователе, например, его особенности, поведение на сайте и целевые действия |
| _ym_retryReqs | never | Регистрирует статистические данные о поведении пользователей на сайте, используется для внутреннего анализа |
| _ym_uid | 1 year | Этот файл cookie используется для сбора несвязанной с идентификацией личности информации о поведении посетителя на сайте и несвязанной с идентификацией личности статистики посетителей. |
| abTesting | Используется для идентификации пользователей сайта в системе Roistat | |
| ANONCHK | 1 day | Регистрирует данные о посетителях из нескольких посещений и нескольких сайтов. Эта информация используется для оценки эффективности рекламы на сайтах |
| b24_crm_guest_pages | never | Установлен уникальный идентификатор конкретного пользователя. Это позволяет сайту, используя функциональность чата, целенаправленно предлагать пользователю соответствующие предложения |
| b24_crm_guest_utm | never | Установлен уникальный идентификатор конкретного пользователя. Это позволяет сайту, используя функциональность чата, целенаправленно предлагать пользователю соответствующие предложения |
| c.gif | session | No description |
| CLID | 1 year | Инструмент поведенческого анализа, который помогает понять пользовательский опыт |
| metrika_enabled | session | Используется для отслеживания посетителей на нескольких сайтах для показа соответствующей рекламы на основе предпочтений посетителя |
| MUID | 1 year | Microsoft широко используется как уникальный идентификатор пользователя. Этот файл cookie позволяет отслеживать пользователя при синхронизации идентификаторов в нескольких доменах Microsoft |
| roistat_ab | past | Используется для идентификации пользователей сайта в системе Roistat |
| roistat_abTests | never | Используется для идентификации пользователей сайта в системе Roistat |
| roistat_call_tracking | 7 day | Используется для идентификации пользователей сайта в системе Roistat |
| roistat_emailtracking_email | 7 day | Используется для идентификации пользователей сайта в системе Roistat |
| roistat_emailtracking_emails | 7 day | Используется для идентификации пользователей сайта в системе Roistat |
| roistat_emailtracking_tracking_email | 7 day | Используется для идентификации пользователей сайта в системе Roistat |
| roistat_first_visit | 10 year | Генерируется номер первого посещения пользователя в Roistat |
| roistat_geo_data | never | Используется для идентификации пользователей сайта в системе Roistat |
| roistat_geo_data | It is used to identify website users in the Roistat system | |
| roistat_is_need_listen_requests | session | Используется для идентификации пользователей сайта в системе Roistat |
| roistat_is_save_data_in_cookie | session | Используется для идентификации пользователей сайта в системе Roistat |
| roistat_isMultiDomain | never | Используется для идентификации пользователей сайта в системе Roistat |
| roistat_isNeedToListenRequests | never | Используется для идентификации пользователей сайта в системе Roistat |
| roistat_last_settings_update_time | never | Используется для идентификации пользователей сайта в системе Roistat |
| roistat_leadHunterEnabled | never | Используется для идентификации пользователей сайта в системе Roistat |
| roistat_leadHunterTargetPagesMap | never | Используется для идентификации пользователей сайта в системе Roistat |
| roistat_metrika_counter_id | never | Используется для идентификации пользователей сайта в системе Roistat |
| roistat_multiwidgetEnabled | never | Используется для идентификации пользователей сайта в системе Roistat |
| roistat_multiwidgetFBEnabled | never | Используется для идентификации пользователей сайта в системе Roistat |
| roistat_multiwidgetFBLink | never | Используется для идентификации пользователей сайта в системе Roistat |
| roistat_multiwidgetTelegramEnabled | never | Используется для идентификации пользователей сайта в системе Roistat |
| roistat_multiwidgetTelegramLink | never | Используется для идентификации пользователей сайта в системе Roistat |
| roistat_multiwidgetViberEnabled | never | Используется для идентификации пользователей сайта в системе Roistat |
| roistat_multiwidgetViberLink | never | Используется для идентификации пользователей сайта в системе Roistat |
| roistat_multiwidgetVKEnabled | never | Используется для идентификации пользователей сайта в системе Roistat |
| roistat_multiwidgetVKLink | never | Используется для идентификации пользователей сайта в системе Roistat |
| roistat_multiwidgetWhatsAppEnabled | never | Используется для идентификации пользователей сайта в системе Roistat |
| roistat_multiwidgetWhatsAppLink | never | Используется для идентификации пользователей сайта в системе Roistat |
| roistat_onlineChatEnabled | never | Используется для идентификации пользователей сайта в системе Roistat |
| roistat_onlineChatSettings | never | Используется для идентификации пользователей сайта в системе Roistat |
| roistat_promo_code | never | Используется для идентификации пользователей сайта в системе Roistat |
| roistat_proxy_forms | never | Используется для идентификации пользователей сайта в системе Roistat |
| roistat_settings_saved | never | Используется для идентификации пользователей сайта в системе Roistat |
| roistat_settings_version | never | Используется для идентификации пользователей сайта в системе Roistat |
| roistat_visit | 14 day | Генерируется номер первого посещения пользователя в Roistat |
| roistat_visit_cookie_expire | 14 day | Используется для идентификации пользователей сайта в системе Roistat |
| roistat-leadhunter-form-template | never | Используется для идентификации пользователей сайта в системе Roistat |
| roistat-leadhunter-pulsator-settings | never | Используется для идентификации пользователей сайта в системе Roistat |
| roistat-leadhunter-pulsator-template | never | Используется для идентификации пользователей сайта в системе Roistat |
| roistat-multiwidget-pulsator-settings | never | Используется для идентификации пользователей сайта в системе Roistat |
| roistat-multiwidget-pulsator-template | never | Используется для идентификации пользователей сайта в системе Roistat |
| roistat-online-chat-iframe-template | never | Используется для идентификации пользователей сайта в системе Roistat |
| roistat-online-chat-pulsator-template | never | Используется для идентификации пользователей сайта в системе Roistat |
| SM | Используется при синхронизации MUID между доменами Microsoft | |
| SRM_B | 1 year 24 day | Инструмент поведенческого анализа, который помогает понять пользовательский опыт |
| sync_cookie_csrf | 10 minutes | Этот файл cookie используется для отслеживания подключения к сайту и сторонним платформам управления данными. Этот файл cookie также собирает информацию о поведении пользователя на сайте, которая используется для оптимизации сайта |
| utm_campaign | never | Реферальные данные пользователя |
| utm_content | never | Реферальные данные пользователя |
| utm_medium | never | Реферальные данные пользователя |
| utm_source | never | Реферальные данные пользователя |
| utm_term | never | Реферальные данные пользователя |
| yabs-sid | 1 year | It registers statistical data aboutuser behaviour on the website;it is also used for internalanalysis and websiteoptimization |
| yandexuid | 1 year | Регистрирует статистические данные о поведении пользователей на сайте, используется для внутреннего анализа и оптимизации сайта |
| ymex | 1 year | Регистрирует статистические данные о поведении пользователей на сайте, используется для внутреннего анализа и оптимизации сайта |
| yuidss | 1 year | Собирает информацию о поведении пользователей на нескольких сайтах. Эта информация используется для оптимизации релевантности рекламы на сайте |
advertisement
Маркетинговые файлы cookie используются для предоставления посетителям релевантной рекламы и маркетинговых кампаний. Эти файлы cookie отслеживают посетителей на веб-сайтах и собирают информацию для показа персонализированной рекламы.
| Cookie | Duration | Description |
|---|---|---|
| _fbp | 3 months | Этот файл cookie устанавливает Facebook, чтобы после посещения сайта отобразить рекламу на Facebook или цифровой платформе, которую использует реклама Facebook |
| ads/ga-audiences | session | Использует Google AdWords для повторной оценки посетителей, которые, скорее всего, станут клиентами на основе интернетповедения посетителя на различных сайтах |
| CONSENT | 2 year | Используется для определения того, согласился ли посетитель с маркетинговой категорией в баннере файла cookie. Этот файл cookie необходим для обеспечения соответствия сайта GDPR |
| fr | 3 months | Facebook определяет этот файл cookie, чтобы показывать пользователям рекламу путем отслеживания поведения пользователей в интернете, на сайтах, на которых есть пиксели Facebook или социальный плагин Facebook Facebook определяет этот файл cookie, чтобы показывать пользователям рекламу путем отслеживания поведения пользователей в интернете, на сайтах, на которых есть пиксели Facebook или социальный плагин Facebook |
| i | 10 day | Этот файл cookie устанавливает OpenX для регистрации анонимизированных данных пользователя, таких как IPадрес, географическое местоположение, посещенные сайты, рекламные объявления, на которые нажимает пользователь, и т. д., чтобы обеспечить соответствующую рекламу |
| IDE | 1 year | Использует Google DoubleClick, чтобы зарегистрировать и сообщать о действиях пользователя сайта после просмотра или нажатия на рекламные объявления рекламодателей, для измерения эффективности рекламы и предложения целевых рекламных материалов |
| pagead/1p-user-list/# | session | Отслеживает, проявил ли пользователь интерес к конкретным продуктам или событиям на нескольких сайтах, и определяет, как пользователь перемещается между сайтами. Он используется для оценки рекламных усилий и облегчения выплаты реферальных вознаграждений между сайтами |
| Remixlang | 1 year | Определяет предпочитаемый язык посетителя. Позволяет сайту задать предпочитаемый язык после повторного входа посетителя |
| test_cookie | 15 minutes | Он используется для определения того, поддерживает ли браузер пользователя файлы cookie |
| tr | session | Использует Facebook, чтобы обеспечить ряд рекламных продуктов, например, ставки в режиме реального времени от рекламодателей третьей стороны |
| VISITOR_INFO1_LIVE | 5 months 27 days | Пытается оценить длительность запрета пользователей на страницах, в которые интегрированы видеоклипы YouTube |
| YSC | session | Регистрирует уникальный идентификатор для сохранения статистики о том, какие видеоклипы из YouTube пользователь видел |
| yt-remote-cast-available | session | Сохранение предпочтений проигрывателя видеоклипов пользователя |
| yt-remote-cast-installed | session | Сохранение предпочтений проигрывателя видеоклипов пользователя |
| yt-remote-connected-devices | constantly | Сохранение предпочтений проигрывателя видеоклипов пользователя |
| yt-remote-device-id | constantly | Сохранение предпочтений проигрывателя видеоклипов пользователя |
| yt-remote-fast-check-period | session | Сохранение предпочтений проигрывателя видеоклипов пользователя |
| yt-remote-session-app | session | Сохранение предпочтений проигрывателя видеоклипов пользователя |
| yt-remote-session-name | session | Сохранение предпочтений проигрывателя видеоклипов пользователя |
| yt.innertube::nextId | never | Этот файл cookie, установленный YouTube, регистрирует уникальный идентификатор для хранения данных о том, какие видео с YouTube просматривал пользователь |
| yt.innertube::requests | never | Этот файл cookie, установленный YouTube, регистрирует уникальный идентификатор для хранения данных о том, какие видео с YouTube просматривал пользователь |
Файлы cookie без категорий — это те, которые анализируются и еще не были отнесены к какой-либо категории.
| Cookie | Duration | Description |
|---|---|---|
| ls-popup-229 | 1 year | Это файл cookie, который позволяет запомнить, сколько раз отображалось всплывающее окно |
| ls-popup-last-displayed | 2 year | Это файл cookie, который позволяет запомнить, сколько раз отображалось всплывающее окно |
| qmb | session | Нет описания |
| remixir | past | Нет описания |