Stairs-Trendstrategie
Überblick
StairsTrendStrategy ist eine Handelsstrategie auf Basis der Analyse aufeinanderfolgender Kerzen zur Trendbestimmung. Die Strategie eröffnet Positionen, wenn sich ein anhaltender Trend einer bestimmten Länge bildet.
Hauptkomponenten
public class StairsTrendStrategy : Strategy
{
private readonly StrategyParam<int> _lengthParam;
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++;
}
// Trendstrategie:
// Nach Length aufeinanderfolgenden bullischen Kerzen kaufen
if (_bullLength >= Length && Position <= 0)
{
BuyMarket(Volume + Math.Abs(Position));
}
// Nach Length aufeinanderfolgenden bärischen Kerzen verkaufen
else if (_bearLength >= Length && Position >= 0)
{
SellMarket(Volume + Math.Abs(Position));
}
}
Handelslogik
- Kaufsignal:
Lengthaufeinanderfolgende bullische Kerzen (Schlusskurs über Eröffnungskurs), wenn keine Long-Position vorhanden ist. - Verkaufssignal:
Lengthaufeinanderfolgende bärische Kerzen (Schlusskurs unter Eröffnungskurs), wenn keine Short-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 eine einfache Trenderkennung auf Basis einer Kerzensequenz.
- 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.