Erstellt einen cBot, der den CRTIndicator verwendet, um Stop-Loss- und Take-Profit-Niveaus festzulegen.
Die Idee ist, die CRT-Niveaus (hoch, mittel, niedrig) einer vorherigen Kerze (festgelegt durch CandleIndex) zu verwenden, um den Stop-Loss und Take-Profit für einen neuen Trade zu setzen.
Schritte:
- Wir erstellen einen cBot, der einen Trade öffnet (entweder Kauf oder Verkauf) basierend auf einer Bedingung (die wir als Parameter zum Testen definieren).
- Wir verwenden den CRTIndicator, um die Niveaus einer vorherigen Kerze zu erhalten (der Kerzenindex wird vom Benutzer festgelegt).
- Für einen Kauf-Trade setzen wir den Stop-Loss auf das CRT-Niedrig und den Take-Profit auf das CRT-Hoch der Referenzkerze.
- Für einen Verkauf-Trade setzen wir den Stop-Loss auf das CRT-Hoch und den Take-Profit auf das CRT-Niedrig der Referenzkerze.
Beachten Sie jedoch, dass der CRTIndicator, den wir haben, nur die Niveaus für jede Kerze berechnet und diese darstellt.
Wir müssen vom cBot aus auf den Indikator zugreifen und die Werte für die spezifische Kerze erhalten, an der wir interessiert sind.
Lassen Sie uns den cBot entwerfen:
Parameter:
- CandleIndex: welche vorherige Kerze verwendet werden soll (0 = aktuell, 1 = vorherige, usw.)
- TradeType: wir können einen Parameter setzen, um zwischen Kauf und Verkauf zum Testen zu wählen, oder wir können ein Signal (wie einen gleitenden Durchschnitts-Crossover) verwenden, um zu entscheiden.
Zur Vereinfachung machen wir einen Parameter, um den Trade-Typ auszuwählen.
Aber beachten Sie: Im Live-Handel würden wir einige Bedingungen zum Einstieg verwenden. Wir machen einen einfachen cBot, der einen Trade bei der aktuellen Kerze öffnet, wenn keine Position besteht.
Wir gehen davon aus, dass wir im Zeitrahmen des Charts handeln.
Schritte im cBot:
- Prüfen, ob eine Position offen ist. Wenn nicht, dann Öffnen in Betracht ziehen.
- Die CRTIndicator-Werte für den angegebenen CandleIndex abrufen (welcher eine vergangene Kerze relativ zur aktuellen ist).
- Für einen Kauf-Trade:
Stop Loss = CRT Niedrig der Referenzkerze
Take Profit = CRT Hoch der Referenzkerze - Für einen Verkauf-Trade:
Stop Loss = CRT Hoch der Referenzkerze
Take Profit = CRT Niedrig der Referenzkerze
Beachten Sie jedoch, dass der Indikator für jeden Index berechnet. Wir zeichnen dieselben Werte für jeden Index (weil wir einen festen CandleIndex-Offset verwenden).
Im cBot wollen wir jedoch die Niveaus vom Indikator zur aktuellen Zeit (der zuletzt abgeschlossenen Kerze) für den angegebenen CandleIndex erhalten.
Wichtig: Die Calculate-Methode des Indikators wird für jeden Index aufgerufen und speichert die Werte für die Referenzkerze (Index - CandleIndex) am aktuellen Index.
Wenn wir also die CRT-Niveaus für eine bestimmte historische Kerze erhalten wollen, können wir einfach die Ausgabereihe des Indikators am Index dieser Kerze lesen?
Aber beachten Sie: Die Indikator-Ausgaben sind mit dem aktuellen Index ausgerichtet. Tatsächlich zeichnet der Indikator denselben Wert für jede Kerze, weil wir setzen:
CRTHigh[index] = crtHigh; // wobei crtHigh das Hoch der (index - CandleIndex) Kerze ist
Wenn wir also bei Index 100 sind und CandleIndex=1, dann erhalten wir das Hoch von Index 99 und zeichnen es bei Index 100.
Das bedeutet, wenn wir die CRT-Niveaus für die Kerze wollen, die CandleIndex Kerzen zurückliegt, können wir die Indikator-Ausgabe bei der aktuellen Kerze (Index) nehmen und das gibt uns die Niveaus von CandleIndex Kerzen zurück.
Aber warten Sie, im cBot werden wir OnBar oder OnTick ausführen. Wir interessieren uns für die zuletzt abgeschlossene Kerze (Index = MarketSeries.Close.Count - 2) und die Kerze, die wir wollen, ist (aktueller Index - CandleIndex).
Alternativ können wir den Indikator ändern, um die Niveaus am gleichen Index wie die Referenzkerze auszugeben, aber dann müssten wir die Darstellung um CandleIndex verschieben.
Der aktuelle Indikator ist jedoch so konzipiert, dass er die Niveaus bei der aktuellen Kerze von einer vorherigen Kerze darstellt. Wenn wir also CandleIndex=1 setzen, zeichnen wir bei jeder Kerze die Niveaus der vorherigen Kerze.
Wie wir ihn im cBot verwenden können:
Wir fügen den Indikator dem cBot hinzu und holen dann die Werte für die letzte Kerze (Index = MarketSeries.Close.Count - 1), und das gibt uns die Niveaus von CandleIndex Kerzen zurück.
Beispiel:
Aktueller Kerzenindex = letzte Kerze (Index = MarketSeries.Close.Count - 1)
Dann ist die Indikator-Ausgabe an diesem Index (CRTHigh[MarketSeries.Close.Count-1]) das Hoch der (aktueller Index - CandleIndex) Kerze.
Beachten Sie: Die Calculate-Methode des Indikators wird für jede historische Kerze und dann für jede neue Kerze aufgerufen. Die Ausgabereihe für die letzte Kerze enthält den Wert, den wir wollen.
Lassen Sie uns den cBot programmieren:
Wir haben Parameter:
[Parameter("Candle Index", DefaultValue = 1, MinValue = 0)]
public int CandleIndex { get; set; }
[Parameter("Trade Type", DefaultValue = TradeType.Buy)]
public TradeType SelectedTradeType { get; set; }
[Parameter("Volume (Lots)", DefaultValue = 1, MinValue = 0.01, Step = 0.01)]
public double Volume { get; set; }
Wir erstellen auch eine Instanz des CRTIndicator.
Schritte in OnBar:
Wenn keine Position besteht, dann öffne eine neue Position mit Stop-Loss und Take-Profit, die aus der Indikator-Ausgabe für die aktuelle Kerze gesetzt werden (was den Niveaus von CandleIndex Kerzen zurück entspricht).
Beachten Sie jedoch: Die Indikator-Ausgabe für die aktuelle Kerze (letzte Kerze) ist auf die Niveaus der (aktuellen Kerzenindex - CandleIndex) gesetzt. Aber am Anfang müssen wir sicherstellen, dass genügend Kerzen vorhanden sind.