콘텐츠로 이동

Trend cBot

전략 개요

Trend cBot은 두 개의 이동 평균(MA)을 사용하여 추세를 감지하고 거래 결정을 내리는 전략을 구현합니다. 알고리즘은 빠른 MA와 느린 MA를 계산하고, 시간에 따른 값을 비교하며, 교차점을 식별하여 매수 또는 매도 신호를 생성합니다.

Trend cBot은 MA 교차를 사용하여 모멘텀 변화를 감지하므로 명확하고 지속적인 추세가 있는 시장에서 가장 효과적입니다. 다시 말해, 이 알고리즘은 상승 또는 하락의 강한 방향성 움직임을 보이는 심벌에서 잘 작동합니다.

cBot 생성

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

Trend 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
55
56
57
58
59
60
61
62
63
64
65
66
using cAlgo.API;
using cAlgo.API.Indicators;

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

        [Parameter("MA Type", Group = "Moving Average")]
        public MovingAverageType MAType { get; set; }

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

        [Parameter("Slow Periods", Group = "Moving Average", DefaultValue = 10)]
        public int SlowPeriods { get; set; }

        [Parameter("Fast Periods", Group = "Moving Average", DefaultValue = 5)]
        public int FastPeriods { get; set; }


        private MovingAverage slowMa;
        private MovingAverage fastMa;
        private const string label = "Sample Trend cBot";

        protected override void OnStart()
        {
            fastMa = Indicators.MovingAverage(SourceSeries, FastPeriods, MAType);
            slowMa = Indicators.MovingAverage(SourceSeries, SlowPeriods, MAType);
        }

        protected override void OnTick()
        {
            var longPosition = Positions.Find(label, SymbolName, TradeType.Buy);
            var shortPosition = Positions.Find(label, SymbolName, TradeType.Sell);

            var currentSlowMa = slowMa.Result.Last(0);
            var currentFastMa = fastMa.Result.Last(0);
            var previousSlowMa = slowMa.Result.Last(1);
            var previousFastMa = fastMa.Result.Last(1);

            if (previousSlowMa > previousFastMa && currentSlowMa <= currentFastMa && longPosition == null)
            {
                if (shortPosition != null)
                    ClosePosition(shortPosition);

                ExecuteMarketOrder(TradeType.Buy, SymbolName, VolumeInUnits, label);
            }
            else if (previousSlowMa < previousFastMa && currentSlowMa >= currentFastMa && shortPosition == null)
            {
                if (longPosition != null)
                    ClosePosition(longPosition);

                ExecuteMarketOrder(TradeType.Sell, SymbolName, VolumeInUnits, label);
            }
        }

        private double VolumeInUnits
        {
            get { return Symbol.QuantityToVolumeInUnits(Quantity); }
        }
    }
}
 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
import clr

clr.AddReference("cAlgo.API")

# Import cAlgo API types
from cAlgo.API import *

# Import trading wrapper functions
from robot_wrapper import *

class SampleTrendcBot():
    Label = "Sample Trend cBot"

    def on_start(self):
        self.volume_in_units = api.Symbol.QuantityToVolumeInUnits(api.Quantity)
        self.fastMa = api.Indicators.MovingAverage(api.SourceSeries, api.FastPeriods, api.MAType)
        self.slowMa = api.Indicators.MovingAverage(api.SourceSeries, api.SlowPeriods, api.MAType)

    def on_tick(self):
        longPosition = api.Positions.Find(self.Label, api.SymbolName, TradeType.Buy)
        shortPosition = api.Positions.Find(self.Label, api.SymbolName, TradeType.Sell)

        currentSlowMa = self.slowMa.Result.Last(0)
        currentFastMa = self.fastMa.Result.Last(0)
        previousSlowMa = self.slowMa.Result.Last(1)
        previousFastMa = self.fastMa.Result.Last(1)

        if previousSlowMa > previousFastMa and currentSlowMa <= currentFastMa and longPosition is None:
            if shortPosition is not None:
                api.ClosePosition(shortPosition)
            api.ExecuteMarketOrder(TradeType.Buy, api.SymbolName, self.volume_in_units, self.Label)
        elif previousSlowMa < previousFastMa and currentSlowMa >= currentFastMa and shortPosition is None:
            if longPosition is not None:
                api.ClosePosition(longPosition)
            api.ExecuteMarketOrder(TradeType.Sell, api.SymbolName, self.volume_in_units, self.Label)

지표 통합

이동 평균은 특정 기간 동안의 추세를 식별하기 위해 가격 데이터를 평활화하는 인기 있는 기술적 지표입니다. 이동 평균 지표에는 Simple Moving Average (SMA), Exponential Moving Average (EMA), Time Series, Triangular, Weighted, Welles Wilder Smoothing, Hull 등이 포함됩니다.

Trend cBot은 시장의 추세를 모니터링하기 위해 두 개의 MA를 사용합니다:

  • Fast MA – 가격 변화에 더 빠르게 반응하며 일반적으로 단기 추세를 나타냅니다.
  • Slow MA – 가격 변화에 더 느리게 반응하며 장기 추세를 나타냅니다.

cBot은 빠른 MA와 느린 MA 사이의 교차 이벤트를 주시하고 이를 사용하여 신호를 생성합니다:

  • 매수 신호 – Slow MA가 Fast MA 아래로 교차할 때 상승 모멘텀으로 해석되며 매수 신호가 생성됩니다.
  • 매도 신호 – Fast MA가 Slow MA 아래로 교차할 때 하락 모멘텀으로 해석되며 매도 신호가 생성됩니다.

매도 포지션이 열려 있을 때 매수 신호가 생성되는 것과 같이 반대 거래 포지션이 열려 있는 동안 새로운 신호가 생성되면, cBot은 기존 포지션을 닫고 새로운 포지션을 엽니다. 이 설정은 한 번에 하나의 포지션만 열려 있도록 보장합니다.

계산 및 로직

초기 설정

cBot은 OnStart() 메서드에서 두 MA를 초기화하며, 이는 cBot이 시작될 때 호출됩니다.

MA는 데이터 시리즈에 대해 서로 다른 기간을 사용하여 계산됩니다. fastMAFastPeriods로 계산되고, slowMASlowPeriods로 계산됩니다.

실시간 MA 계산

거래 결정을 위한 주요 로직은 새로운 틱(가격 데이터)이 수신될 때마다 호출되는 OnTick() 메서드에서 실행됩니다. 두 MA는 선택된 MAType에 대한 cTrader 내장 공식을 사용하여 지속적으로 계산되며 각 틱마다 업데이트됩니다.

cBot은 MA의 현재 값과 이전 값을 검색한 다음 교차 조건으로 진행합니다. cBot은 MA의 현재 값과 이전 값을 비교하여 교차가 있었는지 확인합니다:

  • 상승 추세 감지slowMAfastMA 아래로 교차하면 상승 모멘텀으로 해석되어 매수 신호가 발생합니다.
  • 하락 추세 감지fastMAslowMA 아래로 교차하면 하락 모멘텀으로 해석되어 매도 신호가 발생합니다.

거래 실행

교차를 감지한 후, cBot은 생성된 신호에 따라 거래를 실행합니다:

  • 매수 신호에 대한 거래 실행 – cBot은 열려 있는 모든 매도 포지션을 확인하고 종료합니다. 그런 다음 새로운 매수 포지션을 엽니다.
  • 매도 신호에 대한 거래 실행 – cBot은 열려 있는 모든 매수 포지션을 확인하고 종료합니다. 그런 다음 새로운 매도 포지션을 엽니다.

매개변수

매개변수 단위 정의
수량 각 거래의 거래량. 작은 가격 움직임에 집중하는 스캘핑 트레이더는 짧은 기간 동안 많은 거래를 하면서 위험을 최소화하기 위해 작은 로트 크기를 선택할 수 있습니다.

포지션을 더 오래 유지하는 스윙 트레이더는 시장의 큰 움직임을 예상하고 잠재적 이익을 극대화하고자 하므로 큰 로트 크기를 사용할 수 있습니다.
MA 유형 이동 평균선의 유형입니다. 변동성이 낮은 시장에서는 트레이더들이 SMA를 선호할 수 있습니다. SMA는 가격 데이터를 더 효과적으로 평활화하고 단기 변동으로 인해 cBot이 오도될 가능성을 줄이기 때문입니다.

변동성이 높은 시장에서는 사용자들이 EMA를 선호할 수 있습니다. EMA는 가격 변화에 빠르게 반응하고 초기 추세 반전을 포착할 수 있기 때문입니다.
출처 이동 평균선을 계산하는 데 사용되는 가격 데이터입니다. 사용 가능한 옵션에는 종가, 시가, 고가 및 저가가 포함됩니다. 보수적인 트레이더들은 종가를 소스로 사용할 수 있습니다. 종가는 캔들의 최종 가격을 나타내며 일반적으로 더 신뢰할 수 있기 때문입니다.

더 공격적인 트레이더들은 가격 범위의 극단점에서 추세 반전이나 돌파 기회를 포착하고 싶다면 고가나 저가를 선호할 수 있습니다.
느린 기간 느린 이동 평균선을 계산하는 데 사용되는 기간의 수입니다. 데이 트레이더들은 단기 추세에 집중하고 하루 동안 빈번한 기회를 포착하기 위해 낮은 값을 설정할 수 있습니다.

장기 추세를 목표로 하는 트레이더들은 강력하고 확실한 추세가 있을 때만 cBot이 거래에 진입하도록 높은 값을 설정할 수 있습니다.
빠른 기간 빠른 이동 평균선을 계산하는 데 사용되는 기간의 수입니다. 빠른 진입과 퇴출을 원하는 트레이더들은 cBot이 단기 가격 움직임에 빠르게 반응하도록 낮은 값을 설정할 수 있습니다.

더 넓은 시장 추세를 따르는 트레이더들은 거짓 신호의 수를 줄이고 실질적인 가격 움직임에 집중하기 위해 높은 값을 설정할 수 있습니다.

응용

추세 시장

Trend cBot은 가격 움직임이 일관되고 지속적인 추세 시장에서 잘 작동합니다. 이러한 시장에서 이동 평균선은 종종 추세를 포착하여 매수 및 매도 신호에 대한 효과적인 지표가 됩니다.

사용 사례

EURUSD가 강한 상승 추세에 있어 차트에 매일 고점과 저점이 높아지는 시나리오를 고려해 보세요. 이동 평균선 교차가 추세를 감지하고, cBot은 빠른 MA가 느린 MA를 상향 교차할 때마다 매수 신호를 시작합니다.

모범 사례

  • 더 긴 기간에서 거래할 때는 노이즈를 피하고 지속적인 추세를 포착하기 위해 MA에 높은 기간 값을 사용하세요.
  • 상대적으로 변동성이 낮은 상품(예: 금)의 추세 시장에서는 단순 이동 평균선을 사용하여 사소한 가격 변동이 필터링되도록 하세요.

고변동성 자산

급격하고 중요한 가격 움직임을 경험하는 자산은 적절한 이동 평균선이 선택되었을 때 cBot이 빠르게 움직이는 추세에 대응할 수 있는 능력의 혜택을 받는 경향이 있습니다.

사용 사례

비트코인이 암호화폐 강세장 또는 시즌 중에 있는 시나리오를 고려해 보세요. BTC는 급격한 가격 변동을 경험하며, 때로는 며칠 만에 수천 달러씩 상승 추세를 보입니다. cBot은 빠른 MA가 느린 MA를 상향 교차할 때 롱 포지션에 진입함으로써 급격한 상승 추세를 활용합니다.

모범 사례

  • cBot이 최근 가격 변화에 더 빠르게 반응할 수 있도록 지수 이동 평균선을 사용하세요.
  • 초기 모멘텀을 포착하기 위해 짧은 빠른 기간과 느린 기간을 설정하는 것을 고려하세요.

스윙 트레이딩

며칠 또는 몇 주 동안 포지션을 유지하는 스윙 트레이더들은 적절한 설정을 사용할 때 cBot이 중기 추세를 감지하는 능력의 혜택을 받습니다. 이동 평균선 교차는 주기적인 가격 변동이 있는 시장에서 거래의 명확한 진입 및 퇴출 지점을 제공합니다.

사용 사례

스윙 트레이더가 GBPUSD의 주기적인 추세를 식별하고 4시간 차트에서 cBot을 사용하여 며칠 동안 지속되는 추세를 포착하는 시나리오를 고려해 보세요. 빠른 MA가 느린 MA를 상향 교차할 때 cBot은 매수 포지션에 진입하고 추세가 반전될 때까지 이를 유지합니다.

모범 사례

cBot이 사소한 변동은 무시하면서 중요한 시장 움직임을 포착할 수 있도록 빠른 MA와 느린 MA에 중간 길이의 기간을 사용하세요.

돌파 전략

Trend cBot은 가격이 통합 범위를 벗어나 새로운 추세로 진입하는 돌파 이벤트에서 유용합니다. 이동 평균선 교차는 돌파가 발생할 때 강한 움직임의 시작을 알릴 수 있습니다.

사용 사례

주요 주식이 며칠 또는 몇 주 동안 좁은 범위에서 거래되고 있고 돌파가 예상되는 시나리오를 고려해 보세요. cBot을 배치하여 돌파를 포착할 수 있습니다. 주가가 저항선을 돌파할 때 빠른 MA가 느린 MA를 교차하여 매수 신호를 발생시킵니다.

모범 사례

cBot이 추세를 조기에 포착할 수 있도록 빠른 MA 기간에 낮은 값을 사용하여 거래에 유리한 진입 지점을 확보하세요.

Summary

Trend cBot은 이동 평균선 교차를 기반으로 한 간단한 수학적 과정을 따라 추세 변화를 감지하고 거래를 실행합니다. 빠른 MA와 느린 MA의 현재 값과 이전 값을 비교하여 cBot은 매수 또는 매도 여부를 결정하며, 포지션이 항상 감지된 추세와 일치하도록 합니다.

cBot은 다른 지표와 결합될 때 성능이 향상될 수 있습니다. Relative Strength Index (RSI) 또는 Moving Average Convergence Divergence (MACD)는 잘못된 신호를 걸러내고 추세 강도를 확인하는 데 사용할 수 있습니다. 예를 들어, RSI를 사용하여 MA 교차가 실행되기 전에 과매수 또는 과매도 상태를 확인할 수 있습니다.

cBot의 사용자 정의 가능한 매개변수를 사용하여 귀하의 거래 요구 사항과 위험 성향에 맞게 알고리즘을 미세 조정할 수 있습니다. 또한 다양한 값, 설정 및 데이터로 cBot을 백테스트하여 특정 심벌과 기간에 대한 최적 또는 수익성 있는 매개변수 조합을 찾을 수 있습니다.