Przejdź do treści

Operacje na cBotach

Ten artykuł opisuje cykl życia cBota w cTrader CLI. Dowiesz się, jak uruchamiać cBota z terminala, wyświetlać i zatrzymywać działające instancje, hostować cBota na VPS lub serwerze w chmurze za pomocą Dockera oraz testować go na danych historycznych.

Wymagania wstępne

  • cTrader CLI jest zainstalowany.
  • Masz przygotowane cTrader ID, plik z danymi uwierzytelniającymi i numer konta.
  • cBot został wyeksportowany jako plik .algo skompilowany dla .NET 8.

Odczytywanie metadanych cBota

Przed uruchomieniem cBota użyj metadata, aby wyświetlić obsługiwane przez niego parametry. Wynik zawiera nazwę i typ każdej właściwości cBota.

ctrader-cli metadata <path-to-algo-file>

Przy podawaniu parametrów w wierszu poleceń lub pliku .cbotset używaj nazw z wyników metadanych.

Uruchamianie cBota

Uruchom cBota poleceniem run. Ścieżka do pliku .algo jest pierwszym argumentem. Opcje --account, --symbol i --period są wymagane.

ctrader-cli run <path-to-algo-file> --account=<account-id> --symbol=<symbol> --period=<period>

Trzy sposoby przekazywania parametrów.

Źródło Kiedy używać Przykład
Wartości domyślne Parametry domyślne cBota już działają zgodnie z oczekiwaniami. ctrader-cli run /opt/mycbot.algo --account=1234567 --symbol=EURUSD --period=h1
W wierszu poleceń Zmień jedną lub dwie wartości bez tworzenia pliku. ctrader-cli run /opt/mycbot.algo --account=1234567 --symbol=EURUSD --period=h1 --Periods=15 --ConsolidationPeriods=3
Plik .cbotset Wykorzystuj ten sam zestaw wartości w kolejnych uruchomieniach; wyeksportuj plik z aplikacji komputerowej cTrader. ctrader-cli run /opt/mycbot.algo /opt/mysettings.cbotset --account=1234567 --symbol=EURUSD --period=h1

Przy uruchamianiu bez nadzoru przydają się dwie opcjonalne flagi.

Opcja Przeznaczenie
--full-access Uruchamia cBota bez ograniczeń uprawnień dostępu, jeśli musi odczytywać lub zapisywać pliki lokalne albo korzystać z sieci.
--exit-on-stop Kończy proces cTrader CLI, gdy cBot sam się zatrzyma. Przydatne w skryptach i kontenerach.

Uruchamianie cBota na VPS lub serwerze w chmurze

Narzędzie obsługiwane wyłącznie z terminala może sprawnie działać na niewielkiej instancji Linuksa. Dzięki temu cBot może pracować nieprzerwanie taniej niż na komputerze stacjonarnym. Najbardziej przenośnym sposobem jest użycie obrazu Docker cTrader CLI.

Pobierz najnowszy obraz:

docker pull ghcr.io/spotware/ctrader-console:latest

Uruchom cBota w kontenerze. Opcja --mount mapuje folder hosta do kontenera, a opcje -e przekazują konfigurację za pośrednictwem zmiennych środowiskowych:

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
Element Znaczenie
--name ctrader.console.run.mybot Nadaje nazwę kontenerowi.
--mount type=bind,src=...,dst=... Mapuje folder hosta do ścieżki /mnt/Robots w kontenerze.
-e CTID='mycid' Ustawia cTrader ID jako zmienną środowiskową.
-e PWD-FILE='/mnt/Robots/ctrader-cli.pwd' Ustawia ścieżkę do pliku z hasłem wewnątrz kontenera.
-e ACCOUNT='9102302' Ustawia numer konta handlowego.
-e SYMBOL='EURUSD' Ustawia symbol.
-e PERIOD='H1' Ustawia ramy czasowe.
"<path>" Ścieżka do pliku cBota wewnątrz kontenera.
--environment-variables Nakazuje cTrader CLI odczytywać konfigurację ze zmiennych środowiskowych.

Uwaga

W obrazie Docker dostępne są wszystkie funkcje cTrader CLI, w tym backtesting i optymalizacja.

Uruchamianie z aplikacji komputerowej cTrader

Nie musisz znać wiersza poleceń, aby korzystać z cTrader CLI.

  1. W aplikacji komputerowej cTrader przygotuj cBota z wybranymi parametrami.
  2. Kliknij prawym przyciskiem myszy lokalną instancję cBota i wybierz Uruchom w procesie zewnętrznym. cTrader CLI uruchomi się automatycznie i będzie wykonywać instancję niezależnie od aplikacji.
  3. Zamknij aplikację komputerową, aby ograniczyć zużycie procesora i pamięci RAM. cBot będzie nadal działać w procesie cTrader CLI.

Wyświetlanie i zatrzymywanie cBotów

Wyświetl instancje cBotów aktualnie działające na koncie:

ctrader-cli cbots --ctid=letstrade --password=secret --account=1234567 -q

Zatrzymaj działającą instancję za pomocą jej identyfikatora, który polecenie run podaje w wyniku:

ctrader-cli stop --ctid=letstrade --password=secret --account=1234567 -q --instance=<instance-id>

Aby zatrzymać wszystkie działające cBoty jednocześnie, otwórz powłokę interaktywną i wykonaj stop all yes. Proces cTrader CLI kończy działanie po zatrzymaniu ostatniej instancji.

Backtesting cBota

Przetestuj cBota na danych historycznych za pomocą backtest. Pierwszym argumentem jest ścieżka do pliku .algo. Może po niej występować opcjonalny plik .cbotset. Do testu potrzebne są też symbol, ramy czasowe i zakres dat:

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>

Opcje środowiska testowego

Flagi środowiska testowego znajdują się przy pozycji backtest w dokumentacji referencyjnej CLI. Wymagane są tylko --start, --end i --data-mode. Opcjonalne flagi pozwalają ustawić saldo początkowe, prowizje, spread, źródła danych i pliki raportów.

Tryby danych

Wartość Opis
open Korzysta z cen otwarcia bazowych ram czasowych; działa szybko, ale z mniejszą dokładnością wewnątrz każdego słupka.
m1 Korzysta z danych jednominutowych pobranych z serwera.
m1-csv Korzysta z danych jednominutowych podanych przez --data-file.
tick-csv Korzysta z danych tickowych podanych przez --data-file.
ticks Korzysta z danych tickowych pobranych z serwera; to najdokładniejszy, ale też najwolniejszy tryb. Wymagany dla ram czasowych opartych na tickach, zakresach i Renko.

Wskazówka

Ustaw --data-dir na folder, którego zawartość jest zachowywana między uruchomieniami, aby cTrader CLI ponownie wykorzystywał pobrane dane cenowe zamiast pobierać je do każdego backtestu. W Dockerze zmapuj ten folder na katalog hosta, aby zachować dane po zatrzymaniu kontenera.

Praktyczny przykład

Wykonaj backtest przykładowego cBota z jednym plikiem parametrów .cbotset:

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

Wyniki backtestu

cTrader CLI na bieżąco pokazuje postęp w terminalu, a po zakończeniu wyświetla podsumowanie. Pełne wyniki znajdują się w folderze Backtesting obok pliku .algo, w osobnym podfolderze dla każdego uruchomienia:

…/data/{cBotName}/{BacktestingInstanceID}/Backtesting
Plik Zawartość
Zdarzenia (JSON) Wszystkie istotne zdarzenia handlowe, takie jak otwarcie i zamknięcie pozycji.
Dziennik (TXT) Uruchomienie i zatrzymanie cBota, operacje handlowe i ich wyniki.
Parametry (.cbotset) Parametry i wartości wykorzystane w backteście.
Raport (HTML) Wizualny raport ze statystykami handlowymi i historią zleceń, który można otworzyć w przeglądarce.

--report i --report-json zapisują raporty również we wskazanej ścieżce, oprócz folderu wymienionego powyżej.

Zachowanie interfejsu Algo API w cTrader CLI

Niektóre elementy interfejsu cTrader Algo API działają inaczej, gdy cBot jest uruchomiony przez cTrader CLI, ponieważ nie ma interfejsu graficznego.

Element API Zachowanie w cTrader CLI
MessageBox Zwraca MessageBoxResult.None.
Window Wszystkie metody są ignorowane i nie jest wyświetlane żadne okno.
Notifications.PlaySound Ignored.
Chart.TakeChartshot Zwraca null.