Często zautomatyzowane strategie muszą uwzględniać informacje z różnych okresów przed podjęciem decyzji handlowej. Na szczęście cTrader zapewnia wiele narzędzi, które umożliwiają algorytmom łatwy dostęp do danych z wielu okresów. W tym filmie i odpowiadającym mu artykule wyjaśnimy, jak możesz użyć tych narzędzi do stworzenia skutecznego cBota.
Zadeklaruj parametry cBota
Zaczniemy od zadeklarowania niezbędnych parametrów dla średniej ruchomej. Będziemy potrzebować okresu, przedziału czasowego i typu średniej ruchomej.
12345678
[Parameter("MA 1 Period", DefaultValue = 14, Group = "Moving Averages")]publicintMA1Period{get;set;}[Parameter("MA 1 Timeframe", DefaultValue = "Hour", Group = "Moving Averages")]publicTimeFrameMA1Timeframe{get;set;}[Parameter("MA 1 Type", Group = "Moving Averages")]publicMovingAverageTypeMA1Type{get;set;}
Następnie możemy zdefiniować średnią ruchomą.
1
privateMovingAverage_ma1;
Możemy zainicjować średnią ruchomą w metodzie OnStart(). Użyjemy metody MarketData.GetBars(), aby uzyskać słupki pierwszej średniej ruchomej i przekazać je do konstruktora wskaźnika. Metoda GetBars() jest przydatna do uzyskiwania danych słupkowych dla dowolnego okresu i dowolnego symbolu, którego potrzebujesz.
Parameter("MA 1 Period",DefaultValue=14,Group="Moving Averages")]publicintMA1Period{get;set;}[Parameter("MA 1 Timeframe", DefaultValue = "Hour", Group = "Moving Averages")]publicTimeFrameMA1Timeframe{get;set;}[Parameter("MA 1 Type", Group = "Moving Averages")]publicMovingAverageTypeMA1Type{get;set;}[Parameter("MA 2 Period", DefaultValue = 14, Group = "Moving Averages")]publicintMA2Period{get;set;}[Parameter("MA 2 Timeframe", DefaultValue = "Hour2", Group = "Moving Averages")]publicTimeFrameMA2Timeframe{get;set;}[Parameter("MA 2 Type", Group = "Moving Averages")]publicMovingAverageTypeMA2Type{get;set;}[Parameter("MA 3 Period", DefaultValue = 14, Group = "Moving Averages")]publicintMA3Period{get;set;}[Parameter("MA 3 Timeframe", DefaultValue = "Hour4", Group = "Moving Averages")]publicTimeFrameMA3Timeframe{get;set;}[Parameter("MA 3 Type", Group = "Moving Averages")]publicMovingAverageTypeMA3Type{get;set;}privateMovingAverage_ma1;privateMovingAverage_ma2;privateMovingAverage_ma3;protectedoverridevoidOnStart(){_ma1=Indicators.MovingAverage(MarketData.GetBars(MA1Timeframe).ClosePrices,MA1Period,MA1Type);_ma2=Indicators.MovingAverage(MarketData.GetBars(MA2Timeframe).ClosePrices,MA2Period,MA2Type);_ma3=Indicators.MovingAverage(MarketData.GetBars(MA3Timeframe).ClosePrices,MA3Period,MA3Type);}
Zaimplementuj logikę handlową
W tym momencie możemy zaimplementować logikę handlową. Nasza strategia będzie utrzymywać pozycję kupna, gdy wszystkie średnie ruchome rosną, oraz pozycję sprzedaży, gdy średnie ruchome spadają. Oto kod dla całej logiki strony kupna.
Na koniec powinniśmy przetestować naszego nowego cBota. Możemy zobaczyć, że cBot otwiera pozycje, gdy średnie ruchome są zsynchronizowane w tym samym kierunku i pozostaje poza rynkiem, gdy każdy wskaźnik wskazuje inny kierunek.