5분 만에 cTrader용 cBot 만들기
이 글과 해당 동영상에서는 cTrader Algo에서 cBot을 빠르게 만드는 방법을 설명합니다. 우리가 만들 cBot은 three white soldiers와 three black crows라는 간단한 트레이딩 전략을 구현할 것입니다. 이 전략에 대해 더 자세히 알고 싶다면 우리의 지식 베이스를 참조하세요.
우리의 지시를 따르기 전에 공식 웹사이트에서 cTrader Windows 또는 Mac 애플리케이션을 다운로드하고 설치했는지 확인하세요. 애플리케이션을 실행하고 cTrader Algo 섹션으로 이동하세요. 왼쪽 패널에서 찾을 수 있습니다. Algo 탭을 클릭하면 cTrader Algo 섹션이 나타납니다.
새 cBot 추가
cTrader Algo에서 New 버튼을 클릭하여 새 cBot 만들기를 시작하세요. 이름을 입력하고, C#과 Python 중 프로그래밍 언어를 선택한 후 코드 편집기가 열릴 때까지 진행하세요.
cBot 설정 추가
트레이딩 전략을 구현하기 전에 기본 cBot 매개변수와 메서드를 살펴보겠습니다. 다양한 매개변수와 메서드가 무엇을 하는지 익히기 위해 우리의 문서를 참조할 수도 있습니다.
-
cBot 매개변수 – 거래량 또는 손절매/이익실현 거리와 같은 구성 가능한 속성을 정의할 수 있습니다.
-
cBot 메서드 – 특정 이벤트가 발생할 때 cBot이 어떻게 동작하는지 정의합니다. cTrader cBot을 개발할 때 처리해야 하는 네 가지 주요 이벤트가 있으며, 각 이벤트는 cTrader에서 제공하는 해당 메서드로 관리됩니다. 이 메서드들은 C#의
OnStart(),OnTick(),OnBar(),OnStop()과 Python의on_start(),on_tick(),on_bar_closed(),on_stop()입니다. C#의OnBar()와 Python의on_bar_closed()메서드는 기본 코드 템플릿에 포함되어 있지 않다는 점에 유의하세요.
다음 표는 이 네 가지 메서드를 자세히 정의합니다.
| C# | Python | 목적 |
|---|---|---|
OnStart() | on_start() | cBot 인스턴스가 작동을 시작할 때 트리거됩니다. cBot에서 사용할 변수(예: 지표, 카운터, 이벤트 핸들러 또는 타이머)를 초기화하는 데 사용됩니다. |
OnTick() | on_tick() | 트레이딩 차트에서 매 틱(가격 업데이트)마다 트리거됩니다. 실시간 데이터를 기반으로 빠른 진입 또는 퇴장 로직에 일반적으로 사용됩니다. 이 메서드 내에서 새로운 틱이 도착할 때 실행할 사용자 정의 진입 및 퇴장 조건 또는 기타 보조 기능을 프로그래밍할 수 있습니다. |
OnBar() | on_bar_closed() | 각 바가 닫힐 때 트리거됩니다. 이 메서드 내에서 새로운 바가 형성될 때 실행할 사용자 정의 진입 및 퇴장 조건 또는 기타 기능을 프로그래밍할 수 있습니다. |
OnStop() | on_stop() | cBot이 중지될 때 호출됩니다. 포지션 종료, 상태 저장 등 최종 작업을 수행하는 데 사용됩니다. |
트레이딩 로직 추가
이제 우리의 트레이딩 전략을 위한 코드를 추가하겠습니다. 우리의 cBot은 차트에 녹색 바가 세 개 형성될 때 매수 포지션을 열고, 연속된 빨간색 바가 세 개 형성될 때 매도 포지션을 열어야 합니다.
먼저, 우리 cBot의 매개변수를 정의해야 합니다. 이 매개변수는 cTrader UI에서 완전히 사용자 정의할 수 있습니다. 우리 cBot에서 세 가지 매개변수를 정의할 것입니다.
- 각 거래의 거래량.
- 핍 단위의 손절매.
- 핍 단위의 이익실현.
클래스 선언(public class NewcBot : Robot) 뒤의 중괄호 아래에 다음 코드를 코드 편집기에 붙여넣으세요.
1 2 3 4 5 6 7 8 | |
참고
Python cBot은 .cs 파일에 선언된 사용자 정의 매개변수를 사용합니다.
1 2 3 4 5 6 7 8 | |
이제 우리의 트레이딩 전략 뒤의 로직을 구현해야 합니다. OnBar() 또는 on_bar_closed() 메서드에 다음 코드를 붙여넣으세요. 이 메서드는 새로운 바가 형성될 때마다 호출된다는 것을 기억하세요.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | |
1 2 3 4 5 6 7 8 9 10 11 | |
이제 코드를 더 자세히 살펴보겠습니다. cTrader는 차트의 과거 바에 대한 접근을 제공하므로, 마지막 세 개의 바가 모두 녹색인지 빨간색인지 확인할 수 있습니다. 위의 C# OnBar() 및 Python on_bar_closed() 메서드에서 먼저 마지막 세 개의 바가 모두 녹색인지 확인합니다. 그런 다음 이 바들이 모두 빨간색인지 평가합니다.
두 조건 중 하나가 참이면 ExecuteMarketOrder() 메서드를 사용하여 시장 주문을 실행합니다. 이 메서드는 여러 입력(인수)을 받으며, 가장 중요한 것은 거래 방향, 심볼, 거래량, 손절매, 이익실현입니다.
우리의 경우, 주문 방향(TradeType.Buy, TradeType.Sell)은 트레이딩 전략 조건에 의해 결정됩니다. 심볼 이름은 cBot이 실행 중인 차트에서 직접 가져옵니다 SymbolName. 거래량, 손절매 및 이익실현(C#의 Volume, StopLoss, TakeProfit 및 Python의 VolumeInLots, StopLossInPips, TakeProfitInPips)은 모두 우리가 정의한 cBot 매개변수에서 가져옵니다.
cBot을 빌드하고 실행하기
이제 우리의 cBot이 성공적으로 빌드되는지 확인해야 합니다. 기본적으로 빌드 결과 창은 코드 편집기 바로 아래에 위치합니다. 보이지 않는다면, cTrader UI의 최상단 바에 있는 레이아웃 버튼을 클릭하고 빌드 결과를 선택하세요. 이 작업의 키보드 단축키는 Ctrl + W입니다.
그런 다음, cTrader UI의 최상단 바에 있는 빌드 버튼을 클릭하세요. 또는 cBot을 마우스 오른쪽 버튼으로 클릭하고 새로 나타난 메뉴에서 빌드를 클릭하거나, Ctrl + B를 누르세요.

빌드가 성공하면 코드 편집기 하단의 빌드 결과 영역에 초록색 메시지가 표시됩니다.

반대로 코드에 문제가 있다면 빨간색 메시지와 모든 빌드 오류에 대한 상세 요약이 표시됩니다.

cBot이 성공적으로 빌드된 후에는 이를 사용할 수 있습니다. 인스턴스 추가를 통해 거래 차트에 추가하기만 하면 됩니다. 이를 위해 cBot 이름 오른쪽에 있는 + 아이콘을 클릭하세요. cBot을 실행할 수 있는 모든 심볼 목록이 표시됩니다.

EURUSD를 선택하겠습니다. 심볼을 선택하면 새로운 cBot 인스턴스가 추가됩니다. cBot 목록에 심볼 이름과 거래하려는 시간대가 포함된 새로운 항목이 표시됩니다.
또한 거래 차트 바로 아래에 있는 매개변수 탭에서 코딩한 매개변수를 확인할 수 있습니다.

이 매개변수는 원하는 대로 변경하거나 기본값으로 그대로 둘 수 있습니다.
추가적으로 EURUSD 차트 상단에 재생 버튼이 표시됩니다.

인스턴스를 실행하려면 이 버튼을 누르세요. 또는 이 버튼의 복사본이 왼쪽의 cBot 목록에서 인스턴스 오른쪽에 위치합니다. 이 버튼 중 하나를 누르면 cBot이 시작됩니다.
버튼을 클릭한 후 주황색으로 변하면 cBot 인스턴스가 실행 중임을 의미합니다. 로그 탭에서도 cBot이 시작되었다는 새로운 줄이 표시됩니다.
cBot 백테스트
실제 거래 차트에서 포지션을 열기까지 시간이 오래 걸릴 수 있습니다. 역사적 데이터에서 cBot이 작동하는지 확인하기 위해 빠른 백테스트를 실행하겠습니다. 이를 위해 백테스트 탭을 엽니다.

화면 상단에 있는 캘린더 슬라이더를 사용하여 백테스트에 사용할 날짜 범위를 선택하세요. 시각적 모드 플래그를 활성화하여 백테스트 결과를 실시간으로 추적하세요.
슬라이더를 한 달 뒤로 이동하겠습니다. 재생 버튼을 클릭하여 선택한 역사적 데이터에서 cBot을 실행하세요.
그 후, 거래 차트 바로 아래와 매개변수 섹션 오른쪽에 있는 탭에서 새로운 포지션이 열리고/닫히는 것을 확인할 수 있습니다. 특히, 우리가 코딩한 두 가지 패턴 중 하나를 감지하면 cBot이 매수 또는 매도 주문을 실행합니다.
백테스트를 실행하는 것은 cBot이 올바르게 작동하는지 분석하는 유용한 방법입니다.
요약
이 글이 cTrader를 사용하여 자동화된 트레이딩 로봇을 만드는 방법을 설명하는 데 도움이 되었기를 바랍니다.
