콘텐츠로 이동

Breakout cBot

전략 개요

Breakout cBot은 심볼 가격이 사전 정의된 지지선이나 저항선 수준을 넘어서는 순간을 활용합니다.

이 cBot은 상단과 하단 Bollinger Bands 사이의 거리를 사용자 정의 임계값과 비교하여 가격 통합을 모니터링한 후 다음을 수행합니다:

  • 심볼 가격이 지정된 기간 동안 통합 범위 내에 머물러 있으면 cBot은 시장이 통합 중이라고 식별합니다.
  • 가격이 상단 밴드 위로 돌파하면 매수 포지션을 엽니다. 가격이 하단 밴드 아래로 돌파하면 매도 포지션을 엽니다.
  • 포지션을 열 때 사용자 정의 손절매와 이익실현 값을 적용합니다.

cBot은 통합 단계 이후의 돌파 움직임을 활용하므로 명확한 통합 기간과 급격한 방향성 움직임을 보이는 시장이나 심볼에 적합합니다.

cBot 생성

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

Breakout 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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using cAlgo.API;
using cAlgo.API.Collections;
using cAlgo.API.Indicators;
using cAlgo.API.Internals;

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

        [Parameter("Stop Loss (pips)", Group = "Protection", DefaultValue = 20, MinValue = 1)]
        public int StopLossInPips { get; set; }

        [Parameter("Take Profit (pips)", Group = "Protection", DefaultValue = 40, MinValue = 1)]
        public int TakeProfitInPips { get; set; }

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

        [Parameter("Band Height (pips)", Group = "Bollinger Bands", DefaultValue = 40.0, MinValue = 0)]
        public double BandHeightPips { get; set; }

        [Parameter("Bollinger Bands Deviations", Group = "Bollinger Bands", DefaultValue = 2)]
        public double Deviations { get; set; }

        [Parameter("Bollinger Bands Periods", Group = "Bollinger Bands", DefaultValue = 20)]
        public int Periods { get; set; }

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

        [Parameter("Consolidation Periods", Group = "Bollinger Bands", DefaultValue = 2)]
        public int ConsolidationPeriods { get; set; }

        BollingerBands bollingerBands;
        string label = "Sample Breakout cBot";
        int consolidation;

        protected override void OnStart()
        {
            bollingerBands = Indicators.BollingerBands(Source, Periods, Deviations, MAType);
        }

        protected override void OnBar()
        {
            var top = bollingerBands.Top.Last(1);
            var bottom = bollingerBands.Bottom.Last(1);

            if (top - bottom <= BandHeightPips * Symbol.PipSize)
            {
                consolidation = consolidation + 1;
            }
            else
            {
                consolidation = 0;
            }

            if (consolidation >= ConsolidationPeriods)
            {
                var volumeInUnits = Symbol.QuantityToVolumeInUnits(Quantity);
                if (Ask > top)
                {
                    ExecuteMarketOrder(TradeType.Buy, SymbolName, volumeInUnits, label, StopLossInPips, TakeProfitInPips);
                    consolidation = 0;
                }
                else if (Bid < bottom)
                {
                    ExecuteMarketOrder(TradeType.Sell, SymbolName, volumeInUnits, label, StopLossInPips, TakeProfitInPips);
                    consolidation = 0;
                }
            }
        }
    }
}
 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
import clr

clr.AddReference("cAlgo.API")

# Import cAlgo API types
from cAlgo.API import *

# Import trading wrapper functions
from robot_wrapper import *

class SampleBreakoutcBot():
    Label = "Sample Breakout cBot"
    def on_start(self):
        self.bollingerBands = api.Indicators.BollingerBands(api.Source, api.Periods, api.Deviations, api.MAType)

    def on_bar(self):
        top = self.bollingerBands.Top.Last(1)
        bottom = self.bollingerBands.Bottom.Last(1)

        if top - bottom <= api.BandHeightPips * api.Symbol.PipSize:
            self.consolidation += 1
        else:
            self.consolidation = 0

        if self.consolidation >= api.ConsolidationPeriods:
            volumeInUnits = api.Symbol.QuantityToVolumeInUnits(api.Quantity)
            if api.Ask > top:
                api.ExecuteMarketOrder(TradeType.Buy, api.SymbolName, volumeInUnits, self.Label, api.StopLossInPips, api.TakeProfitInPips)
                self.consolidation = 0 
            elif api.Bid < bottom:
                api.ExecuteMarketOrder(TradeType.Sell, api.SymbolName, volumeInUnits, self.Label, api.StopLossInPips, api.TakeProfitInPips)
                self.consolidation = 0 

지표 통합

볼린저 밴드 지표는 Breakout cBot이 사용하는 전략의 핵심입니다.

cBot은 볼린저 밴드의 폭(상단과 하단 밴드 사이의 거리)을 사용하여 통합 기간을 식별합니다. 밴드가 좁을 때(낮은 변동성을 나타냄) cBot은 이를 통합 기간으로 간주합니다.

상단과 하단 밴드의 차이가 지정된 임계값(BandHeightPips) 이하일 경우, 통합 카운터(consolidation)가 증가합니다. cBot은 잠재적 돌파를 고려하기 전에 특정 수의 연속적인 통합 기간(ConsolidationPeriods)이 필요합니다.

cBot은 다음과 같은 방식으로 돌파를 위해 가격을 모니터링하고 해석합니다:

  • 강세 돌파 - 매수 호가가 상단 Bollinger Band를 초과하면 cBot은 이를 강세 돌파로 해석하고 매수 주문을 실행합니다.
  • 약세 돌파 - 매도 호가가 하단 Bollinger Band 아래로 떨어지면 cBot은 이를 약세 돌파로 해석하고 매도 주문을 실행합니다.

거래를 실행한 후에는 통합 카운터가 0으로 재설정됩니다.

계산 및 로직

볼린저 밴드 설정

\[ B_{\text{top}} = MA + (D \times \sigma), \quad B_{\text{bottom}} = MA - (D \times \sigma) \]

\(B_{\text{top}}\) – 상단 밴드

\(B_{\text{bottom}}\) – 하단 밴드

\(MA\) – 이동 평균

\(D\) – 표준편차 수

\(\sigma\) – 표준편차

통합 조건

\[ \text{만약 } (B_{\text{top}} - B_{\text{bottom}}) \leq (H \times P), \text{ 그러면 } C_{\text{counter}} = C_{\text{counter}} + 1 \]

그렇지 않으면,

\[ C_{\text{counter}} = 0 \]

\(H\) – 핍 단위의 밴드 높이

\(P\) – 핍 크기

\(C_{\text{Counter}}\) – 통합 카운터

통합 기간 확인

통합 카운터가 통합 기간보다 크면 돌파 로직을 실행합니다.

돌파 로직

매수 가격이 상단 밴드보다 크면 매수 주문을 냅니다. 매도 가격이 하단 밴드보다 작으면 매도 주문을 냅니다.

매개변수

매개변수 단위 정의
수량 각 거래의 거래량. 위험 성향이 낮은 트레이더는 잠재적 손실을 최소화하기 위해 적은 금액으로 시작할 수 있습니다.

위험 감수성이 높은 사용자는 더 큰 이익을 목표로 더 높은 수치를 설정할 수 있습니다.
손절매 거래가 자동으로 종료되어 추가 손실을 방지하는 핍 수입니다. 위험 회피 성향의 트레이더는 잠재적 손실을 제한하기 위해 좁은 손절매 값을 설정할 수 있습니다.

시장 변동을 감당할 수 있는 사용자는 더 넓은 손절매 값을 설정하여 거래가 종료되기 전에 더 많은 여유를 줄 수 있습니다.
이익실현 거래가 자동으로 종료되어 추가 손실을 방지하는 핍 수입니다. 빠른 청산을 선호하는 트레이더는 단기 움직임을 활용하기 위해 낮은 이익실현 값을 사용할 수 있습니다.

장기 추세를 목표로 하는 사용자는 거래가 더 오래 지속될 수 있도록 높은 이익실현 값을 설정할 수 있습니다.
밴드 높이 cBot이 낮은 변동성 기간을 식별할 수 있게 하는 통합 단계에서의 Bollinger Bands의 최대 폭입니다. 좁은 통합에 집중하는 트레이더는 낮은 변동성 기간에서 주요 돌파를 목표로 낮은 밴드 높이 값을 사용할 수 있습니다.

더 넓은 범위에 익숙한 사용자는 증가된 밴드 높이 값을 사용하여 cBot이 약간 더 넓은 통합을 잠재적 설정으로 고려할 수 있게 할 수 있습니다.
Bollinger Bands 편차 Bollinger Bands의 폭을 계산하는 데 사용되는 표준 편차 값입니다. 좁은 통합에 집중하는 트레이더는 낮은 변동성 기간에서 주요 돌파를 목표로 낮은 밴드 높이 값을 사용할 수 있습니다.

더 넓은 범위에 익숙한 사용자는 증가된 밴드 높이 값을 사용하여 cBot이 약간 더 넓은 통합을 잠재적 설정으로 고려할 수 있게 할 수 있습니다.
Bollinger Bands 기간 Bollinger Bands를 계산하는 데 사용되는 기간 수입니다. 단기 시장 움직임에 집중하는 트레이더는 작은 기간을 사용할 수 있으며, 이는 Bollinger Bands를 최근 가격 변화에 더 민감하게 만듭니다.

장기 추세에 관심이 있는 사용자는 큰 기간을 고려해야 하며, 이는 Bollinger Bands를 부드럽게 하고 단기 변동에 대한 민감도를 줄입니다.
통합 기간 돌파 거래가 고려되기 전에 통합 기준을 충족해야 하는 연속 봉의 수입니다. 더 빈번한 거래를 원하는 트레이더는 통합 기간을 줄여 cBot이 더 빨리 거래에 진입할 수 있게 할 수 있습니다.

확실한 돌파를 선호하는 사용자는 조치를 취하기 전에 가격이 더 오랫동안 통합 범위 내에 머물도록 통합 기간을 늘릴 수 있습니다.

응용

추세 시장

Breakout cBot은 추세가 있는 시장(상승 또는 하락)에서 잘 작동합니다. 이러한 시장에서는 돌파가 종종 통합 기간 후 전체 추세와 일치하여 상당한 가격 움직임으로 이어집니다.

사용 사례

EURUSD가 강한 상승 추세에 있지만 일시적으로 좁은 범위에서 통합되는 시나리오를 고려해보세요. Bollinger Bands가 좁아지면서 변동성 감소를 나타냅니다. cBot은 이 통합을 감지하고 돌파를 기다립니다. 추세가 재개되면 가격이 상단 Bollinger Band를 돌파합니다. cBot은 매수 주문을 실행하여 추세의 지속을 활용합니다.

모범 사례

  • 더 큰 기간을 사용하세요. cBot은 특히 추세가 있는 시장에서 더 큰 기간(1시간, 4시간 등)에 효과적입니다. 이 설정은 더 높은 수익을 낼 수 있는 중요한 가격 움직임을 포착하는 데 도움이 됩니다.
  • 짧은 통합 기간을 피하세요. 강한 추세가 있는 시장에서는 짧은 통합 기간을 유발하는 설정을 피하고 싶을 수 있습니다. 이는 거짓 돌파로 이어질 수 있기 때문입니다.

패턴 이후의 돌파

cBot은 삼각형, 깃발 또는 페넌트와 같이 일반적으로 강한 가격 움직임으로 이어지는 차트 패턴에서의 돌파를 거래하는 데 사용될 수 있습니다. 이러한 패턴은 종종 통합 단계 후 돌파로 이어집니다.

사용 사례

EURGBP 심볼이 1시간 차트에서 대칭 삼각형 패턴을 형성하는 시나리오를 고려해보세요. 삼각형이 좁아짐에 따라 Bollinger Bands도 좁아지면서 변동성 감소를 나타냅니다. cBot은 삼각형 패턴 내의 통합을 식별합니다. 가격이 삼각형 패턴을 벗어나면서 상단 Bollinger Band를 돌파하면 cBot은 돌파를 포착하기 위해 매수 주문을 실행합니다.

모범 사례

  • cBot을 다른 패턴과 결합하세요. 중요한 차트 패턴을 수동으로 식별한 다음 패턴이 완성되면 cBot을 사용하여 돌파 거래를 자동화하세요.
  • 통합 기간을 연장하세요. 더 긴 기간에 걸쳐 형성되는 패턴의 경우, cBot이 패턴이 완전히 형성된 후에만 트리거되도록 통합 기간을 늘리는 것을 고려하세요.

뉴스 이후 거래

cBot은 주요 경제 뉴스, 이벤트 또는 발표가 있는 날에 효과적일 수 있습니다. 특정 뉴스 이후, 일부 시장은 트레이더들이 정보를 소화하는 동안 시간을 들여 통합됩니다. 시장 방향이 명확해지면 돌파가 발생할 수 있습니다.

사용 사례

미국 비농업 고용 지표 발표 후 JPYUSD 페어가 통합되는 시나리오를 고려해보세요. 트레이더들이 보고서의 의미를 평가하고 있습니다. Bollinger Bands가 좁아지면서 낮은 변동성을 나타냅니다. cBot은 이 통합을 식별하고 돌파를 기다립니다. 시장이 방향을 정하면(예: 예상보다 좋은 데이터로 인한 강한 USD), 가격이 하단 Bollinger Band 아래로 돌파합니다. cBot은 이 움직임을 포착하기 위해 매도 주문을 실행합니다.

모범 사례

  • 경제 캘린더를 모니터링하세요. 주요 경제 발표 주변에서 실행되도록 cBot을 구성하세요. 돌파 전 뉴스 이후 통합 단계를 포착하도록 통합 기간 설정을 조정하세요.
  • 손절매를 조정하세요. 뉴스 이벤트 이후 증가된 변동성으로 인해 돌파가 완전히 실현되기 전에 발생할 수 있는 잠재적 시장 변동을 수용하기 위해 손절매를 넓히는 것을 고려하세요.

Summary

Breakout cBot은 트레이더가 시장 변동성, 높은 거래량 및 증가된 활동을 활용할 수 있도록 지원합니다. cBot이 돌파 전략을 실행하는 데 효율적이지만, Bollinger Bands에 대한 의존도로 인해 특정 시장 조건에서 성능 문제가 발생할 수 있습니다.

Breakout cBot을 특정 심볼과 귀하의 거래 선호도에 맞게 조정하면 그 효과를 크게 향상시킬 수 있습니다. cBot에 자신만의 전략을 통합하고 추가 지표를 활용할 수 있도록 코드를 수정함으로써 정확성과 성능을 더욱 향상시킬 수 있습니다.