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
.algoskompilowany 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.
- W aplikacji komputerowej cTrader przygotuj cBota z wybranymi parametrami.
- 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.
- 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. |