Пример использования BotTabCluster в коде робота.

Пример использования BotTabCluster в коде робота.

В данной статье мы рассмотрим робота, который анализирует кластерный график и на основании этой информации совершает торговые операции. 

Распишем вкратце техническое задание. В кластерном анализе присутствуют такие понятия, как толкающие и тормозящие бары (свечи). Если смотреть на примере бычьих свечей, «толкающий» – тот бар, максимальный объем которого расположен в нижней части свечи, в идеале в нижней тени. «Тормозящий» бар тот, максимальный объем которого расположен в верхней части свечи, в идеале в верхней тени. Наш робот будет открывать длинную позицию при возникновении толкающего бычьего кластера и закрывать ее при возникновении толкающего медвежьего кластера. Для бычьего бара в качестве максимального возьмем объем продаж, для медвежьего – объем покупок. 

Для примера вид толкающей бычей свечи:

Рис. 1. Толкающая растущая свеча.

Вид толкающей медвежьей свечи:

Рис. 2. Толкающая падающая свеча.

Также бот будет отслеживать 10 последних кластеров, чтобы выбрать среди них тот, который содержит секцию с максимальным суммарным объемом.

Начнем с рассмотрения полей данных, которые потребуются для работы:

  1. Параметр, задающий минимальный набранный секцией объем, чтобы кластер считался толкающим или тормозящим.
  2. Параметр объема для входа в позицию.
  3. Количество последних кластеров, среди которых нужно найти секцию с максимальным суммарным объемом.
  4. Вкладка для построения кластерного графика.
  5. Простая вкладка, через которую будет вестись торговля.

Переходим к конструктору бота:

  1. Создаем параметр для сигнального объема.
  2. Создаем параметр для торгового объема.
  3. Создаем параметр для количества кластеров, по которым ведется поиск секции с максимальным суммарным объемом.
  4. Создаем вкладку для кластеров.
  5. У кластерной вкладки подписываемся на событие появления нового кластера с максимальным объемом покупок.
  6. Создаем простую вкладку для торговли.
  7. У простой вкладки подписываемся на событие завершения свечи.

Далее разберем вспомогательные методы, которые выступают в роли фильтров.

Метод PriceUpperMaxSumVolumeCluster проверяет, превысила ли цена инструмента цену кластера с максимальным суммарным объемом за последние 10 баров (настраиваемый параметр).

  1. Берем последние 10 кластеров вкладки и находим среди них тот, который содержит секцию с максимальным суммарным объемом.
  2. Сравниваем последнюю цену по бумаге с ценой секции, содержащей максимальный объем. Если цена превысила это значение, метод возвращает истину.
  3. Иначе метод возвращает ложь, что запрещает открытие позиций по этой цене.

Метод IsPushingClaster проверяет, является ли бар толкающим.

  1. Для открытия позиции нам нужны только растущие свечи, поэтому, если бар падающий, возвращается ложь.
  2. Из кластера получаем секцию с максимальным объемом рыночных продаж.
  3. Если цена секции выше цены открытия бара, выходим, так как нам нужно, чтобы нужный объем прошел в нижней тени свечи.
  4. Если объем линии меньше, чем задаваемый параметром, так же выходим.
  5. Если же все условия выполняются, значит этот бар является толкающим.

Метод IsBrakingClaster определяет, является ли бар тормозящим.

  1. Сигналом на выход может служить только кластер падающего бара, поэтом если свеча растущая, возвращается ложь.
  2. Из кластера получаем секцию с максимальным объемом рыночных покупок. Большое количество рыночных покупок в одном уровне увеличивает вероятность того, что там находился большой объем лимитных продавцов.
  3. Если цена данной линии меньше цены открытия свечи, возвращается ложь, так как нам нужно, чтобы искомый объем находился в верхней тени бара.
  4. Если объем линии меньше, чем задаваемый параметром, так же выходим.
  5. Если же все условия выполняются, значит этот бар является тормозящим.

Метод TabClusterMaxBuyClusterChangeEvent является обработчиком события MaxBuyClusterChangeEvent. Возникновение этого события говорит о появлении секции с объемом рыночных покупок, который превышает объемы всех других секций на кластерном графике. Это может свидетельствовать о появлении крупного лимитного продавца, поэтому мы должны закрыть позицию при наличии.

Переходим к рассмотрению метода TabToTradeCandleFinishedEvent, который является точкой входа в торговую логику робота:

  1. Из списка всех свечей сохраняем ссылку на последнюю.
  2. Из списка всех кластеров получаем тот, который является профилем данной свечи.
  3. Далее проверяем условия для открытия позиции. Если нет открытых позиций, бар является толкающим, и цена инструмента выше цены секции с максимальным суммарным объемом за последние n свечей, открываем длинную позицию.
  4. Если позиция имеется, и текущий бар является тормозящим, закрываем позицию.

Код данного робота находится по ссылке.

11:42
176
FAQ

Комментарии

Нет комментариев. Ваш будет первым!