Stairs-Gegentrendstrategie
Überblick
StairsCountertrendStrategy ist eine Gegentrend-Handelsstrategie, die Positionen gegen einen etablierten Trend einer bestimmten Länge eröffnet.
Hauptkomponenten
public class StairsCountertrendStrategy : Strategy
{
private readonly StrategyParam<int> _length;
private readonly StrategyParam<DataType> _candleType;
private int _bullLength;
private int _bearLength;
}
Strategieparameter
Die Strategie erlaubt die Anpassung der folgenden Parameter:
- Length - Anzahl aufeinanderfolgender Kerzen in eine Richtung zur Erkennung eines Trends (Standardwert 3)
- CandleType - Kerzentyp, mit dem gearbeitet wird (standardmäßig 5 Minuten)
Der Parameter Length steht für die Optimierung im Bereich von 2 bis 10 mit einer Schrittweite von 1 zur Verfügung.
Initialisierung der Strategie
In der Methode OnStarted2 werden die Zähler zurückgesetzt, das Kerzenabonnement erstellt und die Visualisierung vorbereitet:
protected override void OnStarted2(DateTime time)
{
base.OnStarted2(time);
// Zähler zurücksetzen
_bullLength = 0;
_bearLength = 0;
// Abonnement erstellen
var subscription = SubscribeCandles(CandleType);
subscription
.Bind(ProcessCandle)
.Start();
// Visualisierung im Chart einrichten
var area = CreateChartArea();
if (area != null)
{
DrawCandles(area, subscription);
DrawOwnTrades(area);
}
}
Verarbeitung von Kerzen
Die Methode ProcessCandle wird für jede abgeschlossene Kerze aufgerufen und implementiert die Handelslogik:
private void ProcessCandle(ICandleMessage candle)
{
// Prüfen, ob die Kerze abgeschlossen ist
if (candle.State != CandleStates.Finished)
return;
// Prüfen, ob die Strategie handelsbereit ist
if (!IsFormedAndOnlineAndAllowTrading())
return;
// Zähler anhand der Kerzenrichtung aktualisieren
if (candle.OpenPrice < candle.ClosePrice)
{
// Bullische Kerze
_bullLength++;
_bearLength = 0;
}
else if (candle.OpenPrice > candle.ClosePrice)
{
// Bärische Kerze
_bullLength = 0;
_bearLength++;
}
// Gegentrendstrategie:
// Nach Length aufeinanderfolgenden bullischen Kerzen verkaufen
if (_bullLength >= Length && Position >= 0)
{
SellMarket(Volume + Math.Abs(Position));
}
// Nach Length aufeinanderfolgenden bärischen Kerzen kaufen
else if (_bearLength >= Length && Position <= 0)
{
BuyMarket(Volume + Math.Abs(Position));
}
}
Handelslogik
- Verkaufssignal:
Lengthaufeinanderfolgende bullische Kerzen (Schlusskurs über Eröffnungskurs), wenn keine Short-Position vorhanden ist. - Kaufsignal:
Lengthaufeinanderfolgende bärische Kerzen (Schlusskurs unter Eröffnungskurs), wenn keine Long-Position vorhanden ist. - Das Positionsvolumen erhöht sich bei jedem neuen Trade um den Betrag der aktuellen Position.
Funktionen
- Die Strategie bestimmt die zu verwendenden Instrumente automatisch über die Methode
GetWorkingSecurities(). - Die Strategie arbeitet nur mit abgeschlossenen Kerzen.
- Die Strategie verwendet Market-Orders für den Positionseinstieg.
- Die Strategie nutzt einen Gegentrendansatz und eröffnet Positionen gegen den etablierten Trend.
- Kerzenzähler werden zurückgesetzt, wenn eine Kerze in Gegenrichtung erscheint.
- Kerzen und Trades werden im Chart visualisiert, wenn ein grafischer Bereich verfügbar ist.
- Die Optimierung der Sequenzlänge wird unterstützt, um optimale Strategieeinstellungen zu finden.