콘텐츠로 이동

RSI cBot

전략 개요

RSI cBot은 Relative Strength Index (RSI)를 주요 지표로 사용하는 단순한 모멘텀 기반 반전 거래 전략을 구현합니다.

RSI cBot은 시장 모멘텀을 반영하고 과매수 또는 과매도 조건을 결정하는 RSI 값을 기반으로 자동으로 매수 및 매도합니다. 이 cBot은 새로운 포지션을 열기 전에 기존 포지션을 청산하도록 코딩되어 있어, 언제나 하나의 관련 포지션만 열려 있도록 합니다.

RSI가 30 아래로 떨어지면 시장이 과매도 상태로 간주되어 cBot이 매수 포지션을 엽니다. 매수 신호는 시장이 과매도 상태에 도달한 후 가격이 상승할 것이라는 기대에 기반합니다.

RSI가 70 위로 올라가면 시장이 과매수 상태로 간주되어 cBot이 매도 포지션을 엽니다. 매도 신호는 시장이 과매수 상태가 된 후 가격이 하락할 것이라는 기대에 기반합니다.

RSI 지표에 기반한 전략은 cBot이 RSI 신호를 기반으로 반전을 거래할 수 있는 시장에 가장 적합합니다.

cBot 생성

C# 또는 Python을 사용하여 cBot 생성하는 방법을 단계별 가이드에서 알아보세요.

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

지표 통합

Relative Strength Index (RSI)는 RSI cBot에서 사용되는 주요 지표입니다. RSI는 가격 변동의 속도와 변화를 측정하는 모멘텀 오실레이터입니다. 0에서 100 사이의 범위를 가지며 시장의 과매수 또는 과매도 상태를 식별하는 데 사용됩니다.

과매수 또는 과매도 상태에 대한 평가를 기반으로 RSI는 cBot이 매수할지 매도할지를 결정합니다. RSI cBot은 이동 평균이나 거래량과 같은 다른 지표나 요소에 의존하지 않고 오직 RSI 수준만을 거래 신호로 사용합니다.

cBot은 두 가지 주요 임계값에 초점을 맞춥니다:

  • RSI < 30은 시장이 과매도 상태임을 나타내며 매수 주문을 유발합니다.
  • RSI > 70은 시장이 과매수 상태임을 나타내며 매도 주문을 유발합니다.

cBot은 매 새로운 틱마다 RSI 값을 확인하여 지속적으로 모니터링합니다. 이를 통해 알고리즘은 RSI가 과매도 또는 과매수 영역으로 이동하는 즉시 항상 행동할 준비가 되어 있습니다.

로직

초기 설정

RSI 지표는 cBot이 시작될 때 호출되는 OnStart() 메서드에서 지정된 SourcePeriods 매개변수를 사용하여 초기화됩니다. 계산은 지표에 대한 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은 이후 통합 내에서 반전 지점을 포착할 수 있습니다.

사용 사례

블루칩 주식이 큰 랠리나 하락 이후 통합에 진입하는 시나리오를 고려해 보세요. 주가가 좁은 범위 내에서 오실레이션하기 시작합니다. 그러면 cBot은 이 단계에서 과매수(RSI > 70) 또는 과매도(RSI < 30) 상황을 감지하고 그에 따라 거래합니다.

모범 사례

  • 강한 추세 이후, 시장이 통합을 시작할 때까지 기다렸다가 cBot을 실행하세요.
  • 장기 지지선과 저항선을 모니터링하여 시장이 진정으로 통합에 진입했는지, 아니면 또 다른 브레이크아웃을 준비하고 있는지 확인하세요.

요약

RSI 지표는 cBot 전략의 핵심이며 모든 매수 및 매도 결정을 주도합니다. cBot은 과매도 및 과매수 시장에서 반전을 활용하기 위해 지표를 효과적으로 사용하지만, 단일 알고리즘에 의존하는 것은 거짓 신호와 제한된 시장 맥락의 위험이 있습니다.

주요 매개변수에 대한 값을 지정하고 데이터 소스를 선택할 수 있는 기능을 통해 사용자는 RSI cBot을 자신의 개별 거래 스타일, 위험 허용도 및 시장 상황에 맞게 조정할 수 있습니다. 스캘퍼, 스윙 트레이더 또는 장기 투자자 여부에 관계없이 cBot 매개변수를 조정하면 전략과의 정렬이 개선되고 성공 가능성이 높아질 수 있습니다.

트레이더는 선택한 심벌과 기간에 대해 최적 또는 수익성 있는 매개변수 조합을 찾기 위해 다양한 값, 설정 및 데이터로 cBot을 백테스트할 수 있습니다. 또한 cTrader 사용자는 cBot 코드를 수정하고 변동성 지표를 구현하여 강한 추세를 방지하고 비반전 신호를 필터링할 수 있습니다.