Zum Inhalt

Sleep-Funktionalität

Die Fähigkeit, bis zu einem bestimmten Zeitpunkt zu warten, ist für cBots unerlässlich, insbesondere für solche, die geplant oder bei Eintreten eines Ereignisses (z. B. einer öffentlichen Ankündigung) aktiviert werden sollen. Die Methode Sleep() in cTrader ermöglicht es, Algorithmen anzuhalten, bis die angegebene Zeit abgelaufen ist oder näher rückt.

Hinweis

Die Sleep-Funktionalität ist nur für cBots und Indikatoren verfügbar.

Dieser API-Leitfaden führt Sie in die Methode Sleep() ein und zeigt Ihnen, wie Sie sie richtig verwenden.

Die Methode Sleep() in einer Minute!

  • Die Methode Sleep() ermöglicht es Entwicklern, die Ausführung eines Algorithmus mit festgelegten flexiblen Zeitparametern anzuhalten.
  • Wenn Sie das Datum und die Uhrzeit eines bestimmten Ereignisses kennen, auf das Ihr cBot mit einer maßgeschneiderten Strategie reagieren soll, verwenden Sie die Sleep-Funktionalität, um auf Nachrichten zu handeln und auf geplante Ereignisse zu reagieren.
  • Legen Sie einen Zeitraum für die Sleep-Funktionalität fest, von Millisekunden bis zu einer beliebigen Zeitspanne.
  • Die Methode Sleep() ist nur für .NET 6-Algorithmen verfügbar und funktioniert wie vorgesehen beim Backtesting.

Wie die Methode sleep() funktioniert

Die Sleep-Funktionalität ist nur für .NET 6-Algorithmen verfügbar. Während sich ein cBot im Sleep-Modus befindet, werden alle anderen Ereignisse im Code ignoriert.

Beispiel

Wenn das Ereignis BarOpened während des Sleep-Modus fünfmal aufgetreten ist, wird keiner der verpassten OnBar()-Handler aufgerufen, nachdem der cBot aufgewacht ist. Nur neue bevorstehende Ereignisse werden in diesem Fall ausgelöst.

Dennoch verarbeiten cBots alle Datennachrichten, während sie sich im Sleep-Modus befinden (z. B. wenn RefreshData() aufgerufen wird).

Hinweis

Wenn Sie die Sleep-Zeit angeben, legen Sie ein Mindestintervall für die Aussetzung des Algorithmus fest. Die tatsächliche Sleep-Zeit ist immer gleich oder größer als die angeforderte Aussetzungszeit.

Um die Methode Sleep() anzuwenden, sollten Algorithmusentwickler je nach Zweck eine dieser Signaturen verwenden.

Um den Algorithmus anzuhalten, bis die angegebene Zeitspanne abgelaufen ist:

void Sleep(Timespan timespan)

Um den Algorithmus anzuhalten, bis die angegebene Anzahl von Millisekunden abgelaufen ist:

void Sleep(int milliseconds)

Um den Algorithmus anzuhalten, bis die angegebene Uhrzeit und das angegebene Datum näher rücken:

void Sleep(DateTime dateTime)

Beispiel

Wir gehen davon aus, dass die nächste Rede des derzeitigen Vorsitzenden der Federal Reserve, Jerome Powell, für den 11. Dezember 2023 um 11:00 Uhr geplant ist. Sie erwarten einige Ankündigungen, die den EURUSD-Trend beeinflussen würden, und haben einen cBot entwickelt, der genau zu Beginn der Rede eine entsprechende Strategie verfolgen würde. In diesem Fall können Sie die Methode Sleep() wie folgt anwenden.

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

Warnung

Wenn der Parameter DateTime nicht aus der Zeitzone des Algorithmus stammt, wird eine ArgumentException ausgelöst.

Die Methode Sleep() funktioniert wie vorgesehen beim Backtesting. Wenn Sie einen schlafenden cBot über die Benutzeroberfläche stoppen möchten, müssen Sie nicht warten, bis er aufwacht. Klicken Sie auf den Button Stoppen und er wird ohne Zeitüberschreitung den Betrieb einstellen.

Beispiel-cBot erstellen

Der folgende Beispiel-cBot schläft nach seinem Start 30 Sekunden lang, wobei die entsprechende Meldung im Protokoll ausgegeben wird. Danach platziert er eine Kauf-Market-Order für 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

Zusammenfassung

Die Sleep-Funktionalität ermöglicht es Algorithmusentwicklern, die Ausführung anderer Methoden auszusetzen, selbst wenn der cBot gestartet wurde. Durch Anwendung der Methode Sleep() mit ihren flexiblen Zeitparametern reagieren Sie immer rechtzeitig mit Ihrer maßgeschneiderten Strategie auf geplante Ereignisse.