cBot 작업¶
이 문서에서는 cTrader CLI에서 cBot의 실행 수명 주기를 설명합니다. 터미널에서 cBot을 실행하고, 실행 중인 인스턴스를 조회하거나 중지하고, Docker를 사용해 VPS 또는 클라우드 서버에서 cBot을 호스팅하고, 과거 데이터로 백테스트하는 방법을 알아보세요.
사전 요구 사항 ¶
- cTrader CLI가 설치되어 있어야 합니다.
- cTrader ID, 인증 정보 파일 및 계정 번호를 준비해야 합니다.
- cBot이 .NET 8용으로 빌드된
.algo파일로 내보내져 있어야 합니다.
cBot 메타데이터 확인 ¶
cBot을 실행하기 전에 metadata로 cBot이 지원하는 매개변수를 나열하세요. 출력에는 각 cBot 속성의 이름과 유형이 표시됩니다.
ctrader-cli metadata <path-to-algo-file>
명령줄이나 .cbotset 파일로 매개변수를 지정할 때는 메타데이터 출력에 표시된 매개변수 이름을 사용하세요.
cBot 실행 ¶
run으로 cBot을 시작하세요. .algo 파일 경로를 첫 번째 인수로 지정합니다. --account, --symbol, --period는 필수입니다.
ctrader-cli run <path-to-algo-file> --account=<account-id> --symbol=<symbol> --period=<period>
매개변수를 전달하는 세 가지 방법이 있습니다.
| 입력 방식 | 사용하는 경우 | 예시 |
|---|---|---|
| 기본값 | cBot의 기본 매개변수가 이미 원하는 대로 작동하는 경우입니다. | ctrader-cli run /opt/mycbot.algo --account=1234567 --symbol=EURUSD --period=h1 |
| 명령줄에서 | 파일을 만들지 않고 한두 개의 값을 변경할 때 사용합니다. | ctrader-cli run /opt/mycbot.algo --account=1234567 --symbol=EURUSD --period=h1 --Periods=15 --ConsolidationPeriods=3 |
.cbotset 파일 | 여러 번 실행할 때 동일한 값을 재사용하려는 경우입니다. cTrader 데스크톱 애플리케이션에서 파일을 내보내세요. | ctrader-cli run /opt/mycbot.algo /opt/mysettings.cbotset --account=1234567 --symbol=EURUSD --period=h1 |
자동 실행 시 유용한 선택적 옵션 두 가지가 있습니다.
| 옵션 | 용도 |
|---|---|
--full-access | cBot이 로컬 파일을 읽거나 쓰거나 네트워크에 접근해야 할 때 접근 권한 제한 없이 실행합니다. |
--exit-on-stop | cBot이 자체적으로 중지되면 cTrader CLI 프로세스를 종료합니다. 스크립트와 컨테이너에 유용합니다. |
VPS 또는 클라우드 서버에서 cBot 실행 ¶
터미널만 사용하는 도구는 소규모 Linux 인스턴스에서도 원활하게 실행됩니다. 따라서 데스크톱 컴퓨터보다 적은 비용으로 cBot을 계속 실행할 수 있습니다. 이를 위한 가장 이식성 높은 방법은 cTrader CLI Docker 이미지를 사용하는 것입니다.
최신 이미지를 가져오세요:
docker pull ghcr.io/spotware/ctrader-console:latest
컨테이너에서 cBot을 실행하세요. --mount 옵션은 호스트 폴더를 컨테이너에 연결하고, -e 옵션은 환경 변수를 통해 설정을 전달합니다:
docker run -d -it \
--name ctrader.console.run.mybot \
--mount type=bind,src=/cAlgo/Robots,dst=/mnt/Robots \
-e CTID='mycid' \
-e PWD-FILE='/mnt/Robots/ctrader-cli.pwd' \
-e ACCOUNT='9102302' \
-e SYMBOL='EURUSD' \
-e PERIOD='H1' \
ghcr.io/spotware/ctrader-console:latest run "/mnt/Robots/My bot.algo" --environment-variables
| 구성 요소 | 의미 |
|---|---|
--name ctrader.console.run.mybot | 컨테이너 이름을 설정합니다. |
--mount type=bind,src=...,dst=... | 호스트 폴더를 컨테이너의 /mnt/Robots 경로에 연결합니다. |
-e CTID='mycid' | cTrader ID를 환경 변수로 설정합니다. |
-e PWD-FILE='/mnt/Robots/ctrader-cli.pwd' | 컨테이너 내부에서 비밀번호 파일의 경로를 설정합니다. |
-e ACCOUNT='9102302' | 거래 계정 번호를 설정합니다. |
-e SYMBOL='EURUSD' | 심벌을 설정합니다. |
-e PERIOD='H1' | 시간 프레임을 설정합니다. |
"<path>" | 컨테이너 내부의 cBot 파일 경로입니다. |
--environment-variables | cTrader CLI가 환경 변수에서 설정을 읽도록 지정합니다. |
참고
Docker 이미지에서는 백테스트와 최적화를 포함한 모든 cTrader CLI 기능을 사용할 수 있습니다.
cTrader 데스크톱 애플리케이션에서 시작 ¶
cTrader CLI를 사용하기 위해 명령줄 사용법을 익힐 필요는 없습니다.
- cTrader 데스크톱 애플리케이션에서 원하는 매개변수로 cBot을 준비하세요.
- 로컬 cBot 인스턴스를 마우스 오른쪽 버튼으로 클릭하고 외부 프로세스에서 시작을 선택하세요. cTrader CLI가 자동으로 시작되어 해당 인스턴스를 독립적으로 실행합니다.
- CPU와 RAM 사용량을 줄이려면 데스크톱 애플리케이션을 종료하세요. cBot은 cTrader CLI 프로세스에서 계속 실행됩니다.
cBot 목록 조회 및 중지 ¶
계정에서 현재 실행 중인 cBot 인스턴스를 나열하세요:
ctrader-cli cbots --ctid=letstrade --password=secret --account=1234567 -q
run의 출력에 표시되는 식별자를 사용해 실행 중인 인스턴스를 중지하세요:
ctrader-cli stop --ctid=letstrade --password=secret --account=1234567 -q --instance=<instance-id>
실행 중인 모든 cBot을 한 번에 중지하려면 대화형 셸을 열고 stop all yes를 실행하세요. 마지막 인스턴스가 중지되면 cTrader CLI 프로세스도 종료됩니다.
cBot 백테스트 ¶
backtest로 cBot을 과거 데이터에 대해 테스트하세요. .algo 파일 경로가 첫 번째 인수이며, 선택적으로 .cbotset 파일을 이어서 지정할 수 있습니다. 테스트에는 심벌, 시간 프레임, 날짜 범위도 필요합니다:
ctrader-cli backtest <path-to-algo-file> [<path-to-cbotset-file>] --account=<account-id> --symbol=<symbol> --period=<period> --start=<start-date> --end=<end-date> --data-mode=<data-mode>
테스트 환경 옵션 ¶
테스트 환경 옵션은 CLI 참조 문서의 backtest 항목 아래에 나와 있습니다. 필수 입력값은 --start, --end, --data-mode뿐입니다. 선택적 옵션을 사용하면 시작 잔액, 수수료, 스프레드, 데이터 소스 및 보고서 출력을 지정할 수 있습니다.
데이터 모드 ¶
| 값 | 설명 |
|---|---|
open | 기본 시간 프레임의 시가를 사용합니다. 빠르지만 각 바 내부의 가격 변동을 반영하는 정확도는 낮습니다. |
m1 | 서버에서 다운로드한 1분 단위 데이터를 사용합니다. |
m1-csv | --data-file로 제공된 1분 단위 데이터를 사용합니다. |
tick-csv | --data-file로 제공된 틱 데이터를 사용합니다. |
ticks | 서버에서 다운로드한 틱 데이터를 사용합니다. 가장 정확하지만 가장 느린 모드이며, 틱, 레인지 및 Renko 시간 프레임에 필요합니다. |
팁
--data-dir을 실행 간에 유지되는 폴더로 설정하면 cTrader CLI가 백테스트마다 가격 데이터를 다시 다운로드하지 않고 이미 다운로드한 데이터를 재사용합니다. Docker에서는 컨테이너가 중지된 후에도 데이터가 남도록 이 폴더를 호스트 디렉터리에 연결하세요.
실습 예시 ¶
하나의 .cbotset 매개변수 파일을 사용해 예제 cBot의 백테스트를 실행하세요:
ctrader-cli backtest "C:/test/sample martingale.algo" C:/test/special-parameters.cbotset \
--ctid=letstrade --pwd-file=C:/test/password.pwd --account=1234567 --symbol=EURUSD --period=h1 \
--start="01/01/2025 12:34" --end="31/01/2025 20:56" \
--balance=10000 --commission=30 --commission-type=UsdPerMillionUsdVolume --spread=1 --data-mode=m1
백테스트 출력 ¶
cTrader CLI는 진행 상황을 터미널에 실시간으로 출력하고 완료되면 요약을 표시합니다. 전체 결과는 .algo 파일 옆의 Backtesting 폴더에 저장되며 실행할 때마다 별도의 하위 폴더가 생성됩니다:
…/data/{cBotName}/{BacktestingInstanceID}/Backtesting
| 파일 | 내용 |
|---|---|
| 이벤트(JSON) | 포지션 개설 및 청산 등 주요 거래 이벤트를 기록합니다. |
| 로그(TXT) | cBot 시작 및 중지, 거래 작업과 그 결과를 기록합니다. |
매개변수(.cbotset) | 백테스트에서 사용한 매개변수와 값입니다. |
| 보고서(HTML) | 거래 통계와 주문 내역을 보여 주는 시각적 보고서로, 웹 브라우저에서 열 수 있습니다. |
--report와 --report-json을 사용하면 위 폴더뿐 아니라 지정된 경로에도 보고서를 저장할 수 있습니다.
cTrader CLI에서 Algo API의 동작 ¶
cTrader CLI에는 그래픽 인터페이스가 없으므로 cBot을 실행할 때 일부 cTrader Algo API 멤버의 동작이 달라집니다.
| API 멤버 | cTrader CLI에서의 동작 |
|---|---|
MessageBox | MessageBoxResult.None을 반환합니다. |
Window | 모든 메서드가 무시되며 창은 표시되지 않습니다. |
Notifications.PlaySound | Ignored. |
Chart.TakeChartshot | null을 반환합니다. |