Перейти к содержанию

RSI cBot

Обзор стратегии

RSI cBot реализует простую стратегию торговли на разворотах на основе моментума, которая опирается на индекс относительной силы (RSI) в качестве ключевого индикатора.

RSI cBot автоматически покупает и продает на основе значений RSI, которые отражают рыночный моментум и определяют условия перекупленности или перепроданности. сиБот запрограммирован закрывать существующие позиции перед открытием новых, что гарантирует, что в любой момент времени открыта только одна соответствующая позиция.

Когда RSI опускается ниже 30, рынок считается перепроданным, и сиБот открывает позиции на покупку. Сигнал на покупку основан на ожидании, что цена вырастет после того, как рынок достигнет состояния перепроданности.

Когда RSI поднимается выше 70, рынок считается перекупленным, и сиБот открывает позиции на продажу. Сигнал на продажу основан на ожидании, что цена упадет после того, как рынок станет перекупленным.

Стратегия, основанная на индикаторе RSI, лучше всего подходит для рынков, где сиБот может торговать на разворотах на основе сигналов RSI.

Создание сиБота

Узнайте, как создавать сиБотов, используя C# или Python, в наших пошаговых руководствах.

Код RSI cBot доступен в наших публичных репозиториях на C# и Python. Тот же код предоставляется в качестве шаблона в мастере создания алгоритмов в cTrader Windows или Mac, или вы можете просто скопировать и использовать приведенный ниже фрагмент кода:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
using cAlgo.API;
using cAlgo.API.Indicators;

namespace cAlgo
{
    [Robot(TimeZone = TimeZones.UTC, AccessRights = AccessRights.None, AddIndicators = true)]
    public class SampleRSIcBot : Robot
    {
        [Parameter("Quantity (Lots)", Group = "Volume", DefaultValue = 1, MinValue = 0.01, Step = 0.01)]
        public double Quantity { get; set; }

        [Parameter("Source", Group = "RSI")]
        public DataSeries Source { get; set; }

        [Parameter("Periods", Group = "RSI", DefaultValue = 14)]
        public int Periods { get; set; }

        private RelativeStrengthIndex rsi;

        protected override void OnStart()
        {
            rsi = Indicators.RelativeStrengthIndex(Source, Periods);
        }

        protected override void OnTick()
        {
            if (rsi.Result.LastValue < 30)
            {
                Close(TradeType.Sell);
                Open(TradeType.Buy);
            }
            else if (rsi.Result.LastValue > 70)
            {
                Close(TradeType.Buy);
                Open(TradeType.Sell);
            }
        }

        private void Close(TradeType tradeType)
        {
            foreach (var position in Positions.FindAll("SampleRSI", SymbolName, tradeType))
                ClosePosition(position);
        }

        private void Open(TradeType tradeType)
        {
            var position = Positions.Find("SampleRSI", SymbolName, tradeType);
            var volumeInUnits = Symbol.QuantityToVolumeInUnits(Quantity);

            if (position == null)
                ExecuteMarketOrder(tradeType, SymbolName, volumeInUnits, "SampleRSI");
        }
    }
}
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
import clr

clr.AddReference("cAlgo.API")

# Import cAlgo API types
from cAlgo.API import *

# Import trading wrapper functions
from robot_wrapper import *

class SampleRSIcBot():
    def on_start(self):
        self.rsi = api.Indicators.RelativeStrengthIndex(api.Source, api.Periods)

    def on_tick(self):
        if self.rsi.Result.LastValue < 30:
            self.close_position(TradeType.Sell)
            self.open_position(TradeType.Buy)
        elif self.rsi.Result.LastValue > 70:
            self.close_position(TradeType.Buy)
            self.open_position(TradeType.Sell)

    def close_position(self, tradeType):
        for position in api.Positions.FindAll("SampleRSI", api.SymbolName, tradeType):
            api.ClosePosition(position)

    def open_position(self, tradeType):
        position = api.Positions.Find("SampleRSI", api.SymbolName, tradeType)
        volumeInUnits = api.Symbol.QuantityToVolumeInUnits(api.Quantity)
        if position is None:
            api.ExecuteMarketOrder(tradeType, api.SymbolName, volumeInUnits, "SampleRSI")

Интеграция индикатора

Индекс относительной силы (RSI) — это основной индикатор, используемый в RSI cBot. RSI — это осциллятор моментума, который измеряет скорость и изменение ценовых движений. Он находится в диапазоне от 0 до 100 и используется для определения условий перекупленности или перепроданности на рынке.

На основе своей оценки условий перекупленности или перепроданности RSI определяет, покупает или продает сиБот. cBot RSI не полагается на какие-либо другие индикаторы или факторы, такие как скользящие средние или объем; он использует только уровни RSI для торговых сигналов.

cBot фокусируется на двух ключевых пороговых значениях:

  • RSI < 30 сигнализирует о том, что рынок перепродан, и запускает ордера на покупку.
  • RSI > 70 сигнализирует о том, что рынок перекуплен, и запускает ордера на продажу.

cBot непрерывно отслеживает значение RSI, проверяя его при каждом новом тике. Это гарантирует, что алгоритм всегда готов к действию, как только RSI переместится в зону перепроданности или перекупленности.

Логика

Начальная настройка

Индикатор RSI инициализируется с использованием указанных параметров Source и Periods в методе OnStart(), который вызывается при запуске cBot. Расчеты выполняются с использованием встроенных формул cTrader для индикатора.

Мониторинг условий

Условная логика для сделок выполняется в методе OnTick(), который вызывается каждый раз при получении нового тика (обновления цены). Если RSI < 30, генерируется сигнал на покупку. Если RSI > 70, генерируется сигнал на продажу.

Управление позициями

Прежде чем cBot откроет новую позицию на основе сгенерированного сигнала, метод Close() проверяет и закрывает все открытые противоположные позиции с меткой "SampleRSI". Эта настройка гарантирует, что в любой момент времени активна только одна сделка для данного инструмента.

Исполнение сделки

Метод Open() проверяет, открыта ли уже позиция того же типа на основе сгенерированного сигнала (покупка или продажа). Если позиция не найдена, cBot открывает новую позицию с указанным объемом и другими параметрами, которые передаются внутри метода.

Параметр Единица Определение Советы
Количество Лот Объем каждой сделки. Консервативные трейдеры могут выбрать небольшие размеры лотов, чтобы минимизировать риск.

Агрессивные трейдеры могут выбрать большие размеры лотов, чтобы максимизировать потенциальную прибыль, хотя и с более высоким риском.
Источник — Источник данных для индикатора RSI. Доступные варианты включают цену закрытия, цену открытия, максимальную цену и минимальную цену. Цена закрытия часто используется для расчетов RSI, поскольку она отражает наиболее важную ценовую точку на свече. Однако трейдеры могут экспериментировать с различными рядами данных и выбрать тот, который лучше всего соответствует рыночным условиям.

Максимальная или минимальная цена может помочь выявить экстремальные ценовые движения, в то время как медианная или типичная цена предлагает более сбалансированную перспективу за период.
Время работы — Количество периодов (свечей), используемых для расчета RSI. Значение по умолчанию, 14, является стандартным значением или популярной настройкой для этого индикатора. Скальперы или трейдеры, стремящиеся получить прибыль от краткосрочных ценовых движений (например, на 5-минутном графике), могут выбрать низкие периоды. Эта настройка делает RSI более чувствительным, заставляя его генерировать сигналы на покупку и продажу чаще.

Свинг-трейдеры или долгосрочные трейдеры (например, на 1-часовом графике) могут предпочесть большие периоды RSI. Эта настройка снижает чувствительность RSI, делая его более плавным и устойчивым к быстрым ценовым колебаниям. С отфильтрованным шумом RSI фокусируется на основных рыночных трендах и генерирует меньше сигналов.

Приложение

Рынки в диапазоне (боковые)

На рынке в диапазоне цены колеблются между уровнем сопротивления (верхняя граница) и уровнем поддержки (нижняя граница). Такие события идеальны для стратегий на основе RSI, поскольку они предоставляют множество случаев перекупленности и перепроданности. Поскольку цены часто меняют направление при достижении уровней поддержки или сопротивления на рынках в диапазоне, RSI с большей вероятностью предоставит точные сигналы.

Пример использования

Рассмотрим сценарий, при котором EURUSD неоднократно движется между 1,1000 и 1,1200. cBot может продемонстрировать хорошую производительность, покупая вблизи нижней границы для перепроданности (RSI < 30) и продавая вблизи верхней границы для перекупленности (RSI > 70).

Лучшие практики

  • Сосредоточьтесь на торговле в периоды низкой волатильности. Индикатор RSI работает лучше, когда рынок не совершает значительных трендовых движений.
  • Проверяйте ценовые графики на периоды, когда цена колеблется в пределах четкого диапазона.
  • Следите за пробоями. Если цена значительно выходит за пределы диапазона, остановите cBot и переоцените рыночные условия.

Рынки с низкой волатильностью

Рынки с низкой волатильностью характеризуются небольшими ценовыми движениями и отсутствием значительных трендов. RSI особенно полезен в таких условиях, поскольку он может выявлять краткосрочные рыночные дисбалансы, не подвергаясь влиянию сильных направленных трендов.

В условиях низкой волатильности цена имеет тенденцию колебаться между уровнями перекупленности и перепроданности, что приводит к частым торговым возможностям для cBot.

Пример использования

Фондовый индекс, такой как S&P 500, может демонстрировать периоды низкой волатильности, когда его цена движется в узких диапазонах. В такие периоды cBot использует небольшие развороты. Он входит в позиции на покупку, когда RSI опускается ниже 30, и в позиции на продажу, когда RSI поднимается выше 70.

Лучшие практики

  • Используйте индикаторы волатильности, чтобы определить, когда рынок входит в фазу низкой волатильности.
  • Настройте размер лота и периоды RSI, чтобы индикатор мог эффективно нацеливаться на небольшие изменения цены.
  • Используйте дополнительные стратегии управления рисками, такие как стоп-лосс, для защиты от неожиданных движений рынка.

Консолидация рынков после сильных трендов

После сильного восходящего или нисходящего тренда рынки часто входят в фазу консолидации, когда цена стабилизируется. Трейдеры затем фиксируют прибыль или ждут нового направления рынка, и период консолидации становится идеальным для торговых стратегий на основе RSI.

В период консолидации после сильного тренда индикатор RSI может определить, когда рынок перешел в зону перекупленности или перепроданности. RSI cBot может затем поймать точки разворота в рамках консолидации.

Пример использования

Рассмотрим сценарий, в котором акция «голубых фишек» входит в консолидацию после значительного роста или падения. Цена акции начинает колебаться в узком диапазоне. Затем сиБот обнаруживает условия перекупленности (RSI > 70) или перепроданности (RSI < 30) в течение этой фазы и торгует соответственно.

Лучшие практики

  • После сильного тренда дождитесь, пока рынок начнет консолидироваться, прежде чем запускать сиБота.
  • Отслеживайте долгосрочные уровни поддержки и сопротивления, чтобы убедиться, что рынок действительно вошел в консолидацию, а не готовится к очередному пробою.

Обзор

Индикатор RSI является центральным элементом стратегии сиБота и управляет всеми решениями о покупке и продаже. Хотя сиБот эффективно использует индикатор для извлечения выгоды из разворотов на перепроданных и перекупленных рынках, его зависимость от единственного алгоритма сопряжена с риском ложных сигналов и ограниченного рыночного контекста.

Возможность указывать значения для ключевых параметров и выбирать источник данных позволяет пользователям адаптировать RSI cBot к своим индивидуальным торговым стилям, толерантности к риску и рыночным условиям. Независимо от того, являетесь ли вы скальпером, свинг-трейдером или долгосрочным инвестором, настройка параметров сиБота может привести к лучшему соответствию вашей стратегии и увеличению шансов на успех.

Трейдеры могут провести бэктестинг сиБота с различными значениями, настройками и данными, чтобы найти оптимальную или прибыльную комбинацию параметров для выбранного символа и периода. Кроме того, пользователи cTrader могут изменить код сиБота и внедрить индикаторы волатильности для защиты от сильных трендов и фильтрации сигналов, не являющихся разворотными.