Przejdź do treści

Jak stworzyć cBota dla cTrader w 5 minut

W tym artykule i odpowiadającym mu filmie opiszemy szybki sposób tworzenia cBota w cTrader Algo. cBot, który stworzymy, będzie implementował prostą strategię handlową o nazwie Three white soldiers i three black crows. Więcej informacji o tej strategii można znaleźć w naszej bazie wiedzy.

Przed wykonaniem naszych instrukcji upewnij się, że pobrałeś(-aś) i zainstalowałeś(-aś) aplikację cTrader Windows lub Mac z oficjalnej strony internetowej. Uruchom ją i przejdź do sekcji cTrader Algo. Znajdziesz ją w lewym panelu. Kliknij zakładkę Algo, a sekcja cTrader Algo powinna się pojawić.

Dodaj nowego cBota

Kliknij przycisk Nowy w cTrader Algo, aby rozpocząć tworzenie nowego cBota. Wprowadź nazwę, wybierz język programowania między C# a Python i kontynuuj, aż otworzy się edytor kodu.

Dodaj ustawienia cBota

Zanim zaczniemy implementować strategię handlową, przyjrzymy się podstawowym parametrom i metodom cBotów. Możesz również zapoznać się z naszą dokumentacją, aby zapoznać się z tym, co robią różne parametry i metody.

  • Parametry cBota – pozwalają zdefiniować konfigurowalne atrybuty, takie jak wolumen handlowy lub odległości stop-loss/take-profit.

  • Metody cBota – definiują, jak Twój cBot zachowuje się, gdy występują określone zdarzenia. Istnieją cztery główne zdarzenia, które musisz obsłużyć podczas tworzenia cBota cTrader, a każde z nich jest zarządzane przez odpowiednią metodę dostarczoną przez cTrader. Tymi metodami są OnStart(), OnTick(), OnBar(), OnStop() w C# oraz on_start(), on_tick(), on_bar_closed(), on_stop() w Pythonie. Należy zauważyć, że metoda OnBar() w C# i on_bar_closed() w Pythonie nie jest uwzględniona w domyślnym szablonie kodu.

Poniższa tabela szczegółowo definiuje te cztery metody.

C# Python Cel
OnStart() on_start() Wywoływana, gdy instancja cBota rozpoczyna działanie. Służy do inicjalizacji wszelkich zmiennych, których planujesz użyć w swoim cBocie, takich jak wskaźniki, liczniki, procedury obsługi zdarzeń lub timery.
OnTick() on_tick() Wywoływana przy każdym tiku (aktualizacji ceny) na wykresie handlowym, na którym działa instancja cBota. Powszechnie używana do logiki szybkiego wejścia lub wyjścia opartej na danych w czasie rzeczywistym. Wewnątrz tej metody możesz zaprogramować niestandardowe warunki wejścia i wyjścia, a także wszelkie inne funkcje pomocnicze, które muszą być uruchamiane po nadejściu nowego tiku.
OnBar() on_bar_closed() Wywoływana przy zamknięciu każdego słupka. Wewnątrz tej metody możesz zaprogramować niestandardowe warunki wejścia i wyjścia lub wszelkie inne funkcje, które muszą być uruchamiane przy tworzeniu każdego nowego słupka.
OnStop() on_stop() Wywoływana, gdy cBot się zatrzymuje. Służy do wykonywania końcowych operacji, takich jak zamykanie pozycji, zapisywanie stanu i inne

Dodaj logikę handlową

Teraz dodamy kod dla naszej strategii handlowej. Nasz cBot powinien otworzyć pozycję kupna, gdy na wykresie utworzą się trzy zielone słupki, oraz pozycję sprzedaży, gdy pojawią się trzy kolejne czerwone słupki.

Najpierw musimy zdefiniować parametry naszego cBota. Te parametry będą w pełni konfigurowalne z interfejsu użytkownika cTrader. Zdefiniujemy trzy parametry w naszym cBocie.

  1. Wolumen każdej transakcji.
  2. Stop loss w pipsach.
  3. Take profit w pipsach.

Wklej następujący kod do edytora kodu tuż poniżej nawiasów klamrowych po deklaracji klasy (public class NewcBot : Robot)

1
2
3
4
5
6
7
8
[Parameter(DefaultValue = 1000)]
public double Volume { get; set; }
        
[Parameter(DefaultValue = 10)]
public double TakeProfit { get; set; }
        
[Parameter(DefaultValue = 10)]
public double StopLoss { get; set; }

Uwaga

cBoty Pythona używają konfigurowalnych parametrów zadeklarowanych w ich plikach .cs.

1
2
3
4
5
6
7
8
[Parameter(DefaultValue = 1000)]
public double Volume { get; set; }
        
[Parameter(DefaultValue = 10)]
public double TakeProfit { get; set; }
        
[Parameter(DefaultValue = 10)]
public double StopLoss { get; set; }

Teraz musimy zaimplementować logikę stojącą za naszą strategią handlową. Wklej następujący kod w swojej metodzie OnBar() lub on_bar_closed(). Pamiętaj, że ta metoda jest wywoływana za każdym razem, gdy tworzy się nowy słupek.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
//Three White Soldiers
if(Bars.ClosePrices.Last(1) > Bars.OpenPrices.Last(1) 
&& Bars.ClosePrices.Last(2) > Bars.OpenPrices.Last(2)  
&& Bars.ClosePrices.Last(3) > Bars.OpenPrices.Last(3))
{
    ExecuteMarketOrder(TradeType.Buy, SymbolName, Volume, "", StopLoss, TakeProfit);
}
            
//Three Black Crows
if(Bars.ClosePrices.Last(1) < Bars.OpenPrices.Last(1) 
&& Bars.ClosePrices.Last(2) < Bars.OpenPrices.Last(2)  
&& Bars.ClosePrices.Last(3) < Bars.OpenPrices.Last(3))
{
    ExecuteMarketOrder(TradeType.Sell, SymbolName, Volume, "", StopLoss, TakeProfit);
}
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# Three White Soldiers
if (close.Last(1) > open_.Last(1) and
    close.Last(2) > open_.Last(2) and
    close.Last(3) > open_.Last(3)):
    api.ExecuteMarketOrder(TradeType.Buy, api.SymbolName, api.Volume, "", api.StopLoss, api.TakeProfit)

# Three Black Crows
elif (close.Last(1) < open_.Last(1) and
      close.Last(2) < open_.Last(2) and
      close.Last(3) < open_.Last(3)):
    api.ExecuteMarketOrder(TradeType.Sell, api.SymbolName, api.Volume, "", api.StopLoss, api.TakeProfit)

Teraz przyjrzymy się kodowi bliżej. cTrader zapewnia dostęp do historycznych słupków wykresu, umożliwiając nam sprawdzenie, czy ostatnie trzy słupki są wszystkie zielone lub wszystkie czerwone. W metodzie OnBar() w C# i on_bar_closed() w Pythonie powyżej najpierw sprawdzamy, czy ostatnie trzy słupki były wszystkie zielone. Następnie oceniamy, czy te słupki były wszystkie czerwone.

Jeśli jeden z dwóch warunków jest prawdziwy, składamy zlecenie rynkowe za pomocą metody ExecuteMarketOrder(). Przyjmuje ona kilka danych wejściowych (argumentów), z których najważniejsze to kierunek transakcji, symbol, wolumen handlowy, stop loss i take profit.

W naszym przypadku kierunek zlecenia (TradeType.Buy, TradeType.Sell) jest określany przez warunki strategii handlowej. Nazwa symbolu jest pobierana bezpośrednio z wykresu, na którym działa nasz cBot SymbolName. Wolumen handlowy, stop loss i take profit (Volume, StopLoss, TakeProfit w C# oraz VolumeInLots, StopLossInPips, TakeProfitInPips w Pythonie) są wszystkie pobierane z parametrów cBota, które zdefiniowaliśmy.

Zbuduj i uruchom cBota

Teraz musimy sprawdzić, czy nasz cBot buduje się pomyślnie. Domyślnie okno wyniku kompilacji znajduje się bezpośrednio pod edytorem kodu. Jeśli go nie widzisz, kliknij przycisk Układ w górnym pasku interfejsu użytkownika cTrader i wybierz Wynik kompilacji. Skrót klawiaturowy dla tej akcji to Ctrl + W

Następnie kliknij przycisk Kompiluj znajdujący się w górnym pasku interfejsu użytkownika cTrader. Alternatywnie kliknij prawym przyciskiem myszy swojego cBota i kliknij Kompiluj w nowo pojawionym się menu lub po prostu naciśnij Ctrl + B.

Image title

Jeśli kompilacja zakończy się pomyślnie, zobaczysz zielony komunikat w obszarze Wynik kompilacji u dołu edytora kodu.

Image title

Alternatywnie, jeśli wystąpią problemy z Twoim kodem, zobaczysz czerwony komunikat i szczegółowe podsumowanie wszystkich błędów kompilacji.

Image title

Po pomyślnym zbudowaniu cBota możesz zacząć go używać. Wszystko, co musisz zrobić, to dodać instancję na wykresie handlowym. Aby to zrobić, po prostu kliknij ikonę + po prawej stronie nazwy Twojego cBota. Zobaczysz listę wszystkich symboli, na których możesz uruchomić swojego cBota.

Image title

Wybierzemy EURUSD. Po wybraniu symbolu zostanie dodana nowa instancja cBota. Zobaczysz nowy element na liście cBotów z nazwą symbolu i ramą czasową, którą chcesz handlować.

Powinieneś również zobaczyć parametry, które zakodowałeś(-aś) w zakładce Parametry bezpośrednio pod wykresem handlowym.

Image title

Możesz zmienić te parametry według własnego uznania lub po prostu pozostawić je przy wartościach domyślnych.

Dodatkowo zobaczysz przycisk Odtwórz u góry wykresu EURUSD.

Image title

Aby uruchomić swoją instancję, naciśnij ten przycisk. Alternatywnie kopia tego przycisku znajduje się również po prawej stronie Twojej instancji na liście cBotów po lewej stronie. Każdy z tych przycisków uruchomi cBota.

Po kliknięciu któregokolwiek z przycisków powinieneś zobaczyć, jak zmienia kolor na pomarańczowy, co oznacza, że instancja naszego cBota jest teraz uruchomiona i działa. W zakładce Dziennik powinieneś również zobaczyć nową linię informującą, że cBot został teraz uruchomiony.

Przeprowadź backtesting cBota

Nasz cBot może potrzebować dużo czasu, aby otworzyć pozycję na prawdziwym wykresie handlowym. Przeprowadzimy szybki backtest, aby zobaczyć go w akcji na danych historycznych. Aby to zrobić, otwórz zakładkę Backtest.

Image title

Użyj suwaka kalendarza bliżej górnej części ekranu, aby wybrać zakres dat, którego chcesz użyć do backtestingu. Włącz flagę Tryb wizualny, aby śledzić wyniki backtestingu w miarę ich występowania.

Cofniemy suwak o jeden miesiąc. Kliknij przycisk Odtwórz, aby uruchomić cBota na wybranych danych historycznych.

Następnie będziesz mógł zobaczyć nowe pozycje otwierane i/lub zamykane w zakładce bezpośrednio pod wykresem handlowym i po prawej stronie sekcji Parametry. W szczególności, po wykryciu któregokolwiek z dwóch zakodowanych przez nas wzorców, cBot złoży zlecenie kupna lub sprzedaży.

Uruchomienie backtestingu to przydatny sposób na przeanalizowanie, czy Twój cBot działa poprawnie.

Podsumowanie

Mamy nadzieję, że ten artykuł był pomocny w pokazaniu, jak możesz stworzyć zautomatyzowanego robota handlowego za pomocą cTrader.

Image title