Przejdź do treści

Funkcja uśpienia

Możliwość oczekiwania do określonego czasu jest niezbędna dla cBotów, szczególnie dla tych, które powinny być zaplanowane lub aktywowane po wystąpieniu jakiegoś zdarzenia (na przykład publicznego ogłoszenia). Metoda Sleep() w cTrader umożliwia zawieszenie algorytmów do momentu upływu lub zbliżenia się określonego czasu.

Uwaga

Funkcja uśpienia jest dostępna tylko dla cBotów i wskaźników.

Ten przewodnik API wprowadzi Cię do metody Sleep() i sposobu jej prawidłowego użycia.

Metoda Sleep() w jedną minutę!

  • Metoda Sleep() umożliwia programistom zawieszenie wykonywania algorytmu z ustalonymi elastycznymi parametrami czasowymi.
  • Jeśli znasz datę i godzinę konkretnego zdarzenia, na które Twój cBot powinien zareagować dostosowaną strategią, użyj funkcji uśpienia, aby handlować na wiadomościach i reagować na zaplanowane wydarzenia.
  • Ustaw okres do upływu dla funkcji uśpienia, od milisekund do dowolnego przedziału czasowego.
  • Metoda Sleep() jest dostępna tylko dla algorytmów .NET 6 i działa zgodnie z przeznaczeniem w backtestingu.

Jak działa metoda sleep()

Funkcja uśpienia jest dostępna tylko dla algorytmów .NET 6. Podczas gdy cBot pozostaje w trybie uśpienia, wszystkie inne zdarzenia w kodzie będą ignorowane.

Przykład

Jeśli zdarzenie BarOpened wystąpiło pięć razy podczas trybu uśpienia, żadna z pominiętych procedur obsługi OnBar() nie zostanie wywołana po przebudzeniu cBota. W tym przypadku zostaną wywołane tylko nowe nadchodzące zdarzenia.

Mimo to cBoty przetwarzają wszystkie komunikaty danych podczas pozostawania w trybie uśpienia (na przykład, jeśli zostanie wywołana metoda RefreshData()).

Uwaga

Określając czas uśpienia, ustawiasz minimalny interwał zawieszenia algorytmu. Rzeczywisty czas uśpienia będzie zawsze równy lub większy niż żądany czas zawieszenia.

Aby zastosować metodę Sleep(), programiści algorytmów powinni użyć jednej z tych sygnatur w zależności od celu.

Aby zawiesić algorytm do momentu upływu określonego przedziału czasowego:

void Sleep(Timespan timespan)

Aby zawiesić algorytm do momentu upływu określonej liczby milisekund:

void Sleep(int milliseconds)

Aby zawiesić algorytm do momentu zbliżenia się określonej godziny i daty:

void Sleep(DateTime dateTime)

Przykład

Załóżmy, że następne przemówienie obecnego przewodniczącego Rezerwy Federalnej Jerome'a Powella jest zaplanowane na 11 grudnia 2023 r. o godzinie 11:00. Spodziewasz się pewnych ogłoszeń, które wpłyną na trend EURUSD i opracowałeś cBota, który będzie realizował odpowiednią strategię dokładnie w momencie rozpoczęcia przemówienia. W tym przypadku możesz zastosować metodę Sleep() w następujący sposób.

DateTime doomsday = new DateTime(2023, 12, 11, 11, 0, 0); 
Sleep(doomsday)

Ostrzeżenie

Jeśli parametr DateTime nie pochodzi ze strefy czasowej algorytmu, zostanie zgłoszony wyjątek ArgumentException.

Metoda Sleep() działa zgodnie z przeznaczeniem w backtestingu. Jeśli chcesz zatrzymać uśpionego cBota z interfejsu użytkownika, nie musisz czekać, aż się obudzi. Kliknij przycisk Stop, a przestanie działać bez limitu czasu.

Utwórz przykładowego cBota

Poniższy przykładowy cBot śpi przez 30 sekund po uruchomieniu, z odpowiednim komunikatem wyświetlanym w dzienniku. Następnie składa zlecenie rynkowe kupna dla USDJPY.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using cAlgo.API;
using cAlgo.API.Collections;
using cAlgo.API.Indicators;
using cAlgo.API.Internals;

namespace cAlgo.Robots
{
    [Robot(TimeZone = TimeZones.UTC, AccessRights = AccessRights.None)]
    public class SleepAndExecuteBot : Robot
    {
        protected override void OnStart()
        {
            Print("cBot will sleep for 30 seconds");
            Sleep(30000);

            var symbol = Symbols.GetSymbol("USDJPY");
            ExecuteMarketOrder(TradeType.Buy, symbol, 1000);
        }        
    }
}

Image title

Podsumowanie

Funkcja uśpienia pozwala programistom algorytmów zawiesić wykonywanie innych metod, nawet jeśli cBot został uruchomiony. Stosując metodę Sleep() z jej elastycznymi parametrami czasowymi, zawsze zareagujesz na zaplanowane wydarzenia z dostosowaną strategią na czas.