Przejdź do treści

RSI cBot

Przegląd strategii

RSI cBot implementuje prostą strategię handlową opartą na odwróceniu momentum, która opiera się na Relative Strength Index (RSI) jako kluczowym wskaźniku.

RSI cBot automatycznie kupuje i sprzedaje na podstawie wartości RSI, które odzwierciedlają momentum rynku i określają warunki wykupienia lub wyprzedania. cBot jest zaprogramowany do zamykania istniejących pozycji przed otwarciem nowych, co zapewnia, że w danym momencie otwarta jest tylko jedna odpowiednia pozycja.

Gdy RSI spada poniżej 30, rynek jest postrzegany jako wyprzedany, a cBot otwiera pozycje kupna. Sygnał kupna opiera się na oczekiwaniu, że cena wzrośnie po tym, jak rynek osiągnie stan wyprzedania.

Gdy RSI wzrasta powyżej 70, rynek jest postrzegany jako wykupiony, a cBot otwiera pozycje sprzedaży. Sygnał sprzedaży opiera się na oczekiwaniu, że cena spadnie po tym, jak rynek stanie się wykupiony.

Strategia oparta na wskaźniku RSI najlepiej nadaje się do rynków, na których cBot może handlować odwróceniami na podstawie sygnałów RSI.

Tworzenie cBota

Dowiedz się, jak tworzyć cBoty, używając C# lub Pythona, w naszych szczegółowych przewodnikach.

Kod RSI cBot jest dostępny w naszych publicznych repozytoriach C# i Python. Ten sam kod jest dostępny jako szablon w kreatorze tworzenia algorytmów w aplikacji cTrader Windows lub Mac, lub możesz po prostu skopiować i użyć poniższego fragmentu kodu:

 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")

Integracja wskaźnika

Relative Strength Index (RSI) jest głównym wskaźnikiem używanym w RSI cBot. RSI to oscylator momentum, który mierzy prędkość i zmianę ruchów cen. Waha się między 0 a 100 i jest używany do identyfikacji warunków wykupienia lub wyprzedania na rynku.

Na podstawie oceny warunków wykupienia lub wyprzedania, RSI określa, czy cBot kupuje, czy sprzedaje. cBot RSI nie opiera się na żadnym innym wskaźniku ani czynniku, takim jak średnie kroczące czy wolumen; wykorzystuje jedynie poziomy RSI do sygnałów handlowych.

cBot koncentruje się na dwóch kluczowych progach:

  • RSI < 30 sygnalizuje, że rynek jest wyprzedany i uruchamia zlecenia kupna.
  • RSI > 70 sygnalizuje, że rynek jest wykupiony i uruchamia zlecenia sprzedaży.

cBot stale monitoruje wartość RSI, sprawdzając ją przy każdym nowym ticku. Gwarantuje to, że algorytm jest zawsze gotowy do działania, gdy RSI wejdzie w obszar wyprzedania lub wykupienia.

Logika

Konfiguracja początkowa

Wskaźnik RSI jest inicjalizowany przy użyciu określonych parametrów Source i Periods w metodzie OnStart(), która jest wywoływana podczas uruchamiania cBota. Obliczenia są wykonywane przy użyciu wbudowanych w cTrader formuł dla wskaźnika.

Monitorowanie warunków

Logika warunkowa dla transakcji jest wykonywana w metodzie OnTick(), która jest wywoływana za każdym razem, gdy otrzymany zostanie nowy tick (aktualizacja ceny). Jeśli RSI < 30, generowany jest sygnał kupna. Jeśli RSI > 70, generowany jest sygnał sprzedaży.

Zarządzanie pozycjami

Zanim cBot otworzy nową pozycję na podstawie wygenerowanego sygnału, metoda Close() sprawdza i zamyka wszystkie otwarte przeciwne pozycje z etykietą „SampleRSI". Ta konfiguracja zapewnia, że w danym momencie dla danego symbolu aktywna jest tylko jedna transakcja.

Realizacja transakcji

Metoda Open() sprawdza, czy pozycja tego samego typu na podstawie wygenerowanego sygnału (kupno lub sprzedaż) jest już otwarta. Jeśli pozycja nie zostanie znaleziona, cBot otwiera nową pozycję o określonej ilości i innych parametrach, które są przekazywane wewnątrz metody.

Parametr Jednostka Definicja Wskazówki
Ilość Lot Wolumen każdej transakcji. Konserwatywni traderzy mogą wybrać małe rozmiary lotów, aby zminimalizować ryzyko.

Agresywni traderzy mogą wybrać większe rozmiary lotów, aby zmaksymalizować potencjalne zyski, choć przy wyższym ryzyku.
Źródło — Źródło danych dla wskaźnika RSI. Dostępne opcje obejmują cenę zamknięcia, cenę otwarcia, cenę maksymalną i cenę minimalną. Cena zamknięcia jest często używana do obliczeń RSI, ponieważ odzwierciedla najważniejszy punkt cenowy na świecy. Jednak traderzy mogą eksperymentować z różnymi seriami danych i wybrać tę, która najlepiej odpowiada warunkom rynkowym.

Cena maksymalna lub cena minimalna mogą pomóc zidentyfikować ekstremalne ruchy cenowe, podczas gdy ceny mediany lub typowe oferują bardziej zrównoważoną perspektywę w danym okresie.
Okresy — Liczba okresów (świec) używanych do obliczenia RSI. Wartość domyślna, 14, jest wartością standardową lub popularnym ustawieniem dla tego wskaźnika. Scalperzy lub traderzy chcący czerpać zyski z krótkoterminowych ruchów cenowych (na przykład na wykresie 5-minutowym) mogą wybrać niskie okresy. To ustawienie sprawia, że RSI jest bardziej responsywny, powodując, że generuje sygnały kupna i sprzedaży częściej.

Swing traderzy lub traderzy długoterminowi (na przykład na wykresie 1-godzinnym) mogą preferować większe okresy RSI. To ustawienie zmniejsza czułość RSI, czyniąc go gładszym i bardziej odpornym na szybkie wahania cen. Przy odfiltrowanym szumie RSI koncentruje się na głównych trendach rynkowych i generuje mniej sygnałów.

Aplikacja

Rynki ograniczone zakresem (boczne)

Na rynku ograniczonym zakresem ceny oscylują między poziomem oporu (górna granica) a poziomem wsparcia (dolna granica). Takie zdarzenia są idealne dla strategii opartych na RSI, ponieważ zapewniają wiele przypadków wykupienia i wyprzedania. Ponieważ ceny często odwracają kierunek, uderzając w poziomy wsparcia lub oporu na rynkach ograniczonych zakresem, RSI ma większe szanse na dostarczenie dokładnych sygnałów.

Przypadek użycia

Rozważmy scenariusz, w którym EURUSD wielokrotnie porusza się między 1,1000 a 1,1200. cBot może wykazać dobrą wydajność, kupując w pobliżu dolnej granicy dla wyprzedania (RSI < 30) i sprzedając w pobliżu górnej granicy dla wykupienia (RSI > 70).

Najlepsze praktyki

  • Skup się na handlu w okresach niskiej zmienności. Wskaźnik RSI działa lepiej, gdy rynek nie wykonuje znaczących ruchów trendowych.
  • Sprawdź wykresy cenowe pod kątem okresów, gdy cena waha się w wyraźnym zakresie.
  • Monitoruj przełamania. Jeśli cena znacząco wyjdzie poza zakres, zatrzymaj cBota i ponownie oceń warunki rynkowe.

Rynki o niskiej zmienności

Rynki o niskiej zmienności charakteryzują się małymi ruchami cenowymi i brakiem głównych trendów. RSI jest szczególnie przydatny w takich środowiskach, ponieważ może identyfikować krótkoterminowe nierównowagi rynkowe bez wpływu silnych trendów kierunkowych.

W środowiskach o niskiej zmienności cena ma tendencję do oscylowania między poziomami wykupienia i wyprzedania, prowadząc do częstych możliwości handlowych dla cBota.

Przypadek użycia

Indeks giełdowy, taki jak S&P 500, może wykazywać okresy niskiej zmienności, gdy jego cena porusza się między wąskimi pasmami. W takich okresach cBot wykorzystuje małe odwrócenia. Wchodzi w pozycje kupna, gdy RSI spada poniżej 30, i pozycje sprzedaży, gdy RSI wzrasta powyżej 70.

Najlepsze praktyki

  • Użyj wskaźników zmienności, aby określić, kiedy rynek wchodzi w fazę niskiej zmienności.
  • Dostosuj rozmiar lota i okresy RSI, aby umożliwić wskaźnikowi skuteczne celowanie w małe zmiany cen.
  • Stosuj dodatkowe strategie zarządzania ryzykiem, takie jak stop loss, aby zabezpieczyć się przed nieoczekiwanymi ruchami rynku.

Konsolidujące się rynki po silnych trendach

Po silnym trendzie wzrostowym lub spadkowym rynki często wchodzą w fazę konsolidacji, w której cena się stabilizuje. Traderzy realizują wtedy zyski lub czekają na nowy kierunek rynku, a okres konsolidacji staje się idealny dla strategii handlowych opartych na RSI.

W okresie konsolidacji następującym po silnym trendzie wskaźnik RSI może zidentyfikować, kiedy rynek wszedł w obszar wykupienia lub wyprzedania. RSI cBot może wtedy wyłapać punkty odwrócenia w ramach konsolidacji.

Przypadek użycia

Rozważ scenariusz, w którym akcje blue-chip wchodzą w konsolidację po znaczącym wzroście lub spadku. Cena akcji zaczyna oscylować w wąskim zakresie. cBot wykrywa wtedy warunki wykupienia (RSI > 70) lub wyprzedania (RSI < 30) w tej fazie i handluje odpowiednio.

Najlepsze praktyki

  • Po silnym trendzie poczekaj, aż rynek zacznie się konsolidować, zanim uruchomisz cBota.
  • Monitoruj długoterminowe poziomy wsparcia i oporu, aby upewnić się, że rynek rzeczywiście wszedł w konsolidację i nie przygotowuje się do kolejnego przełamania.

Podsumowanie

Wskaźnik RSI jest centralnym elementem strategii cBota i napędza wszystkie decyzje kupna i sprzedaży. Chociaż cBot skutecznie wykorzystuje wskaźnik do kapitalizowania odwróceń na wyprzedanych i wykupionych rynkach, jego poleganie na pojedynczym algorytmie wiąże się z ryzykiem fałszywych sygnałów i ograniczonego kontekstu rynkowego.

Możliwość określenia wartości kluczowych parametrów i wyboru źródła danych pozwala użytkownikom dostosować RSI cBot do ich indywidualnych stylów handlowych, tolerancji ryzyka i warunków rynkowych. Niezależnie od tego, czy jesteś scalperem, swing traderem czy długoterminowym inwestorem, dostosowanie parametrów cBota może prowadzić do lepszego dopasowania do Twojej strategii i zwiększenia szans na sukces.

Traderzy mogą przeprowadzić backtesting cBota z różnymi wartościami, ustawieniami i danymi, aby znaleźć optymalną lub zyskowną kombinację parametrów dla wybranego symbolu i okresu. Dodatkowo użytkownicy cTradera mogą modyfikować kod cBota i wdrażać wskaźniki zmienności, aby zabezpieczyć się przed silnymi trendami i odfiltrować sygnały nieodwróceniowe.