Auf GitHub ansehen

MACD Beispiel einer Hedging-Grid-Strategie

Überblick

Diese Strategie ist eine StockSharp-Portierung des Expertenberaters MetaTrader „MACD Sample Hedging Grid“. Es kombiniert einen kurzfristigen MACD-Crossover, einen lokalen EMA-Steigungsfilter und Bestätigungen für höhere Zeitrahmen. Wenn die Bedingungen übereinstimmen, erstellt die Strategie ein Positionsraster in der erkannten Richtung und skaliert die Handelsgröße um einen konfigurierbaren Exponenten.

Marktlogik

  • Basiszeitrahmen: konfigurierbar (Standard 5-Minuten-Kerzen).
  • Trendfilter: ein EMA (Standard 26 Perioden) muss für Long-Trades nach oben und für Short-Trades nach unten verlaufen.
  • MACD-Trigger: Die schnelle MACD-Linie muss die Signallinie im Basiszeitrahmen kreuzen und dabei einen minimalen absoluten Wert (ausgedrückt in Preisschritten) überschreiten.
  • Momentum-Bestätigung: Der absolute Abstand zwischen dem Momentum und dem neutralen 100-Niveau in einem höheren Zeitrahmen muss separate Schwellenwerte für Long- und Short-Positionen überschreiten. Die letzten drei Kerzen mit höherem Zeitrahmen werden überprüft und reproduzieren das ursprüngliche EA-Verhalten.
  • Langfristige Bestätigung: Ein MACD, der auf einem langen Zeitrahmen (standardmäßig monatlich) berechnet wird, muss mit der Handelsrichtung übereinstimmen (MACD oben Signal für bullisches, unten für bärisches Umfeld).

Sobald ein Signal ausgelöst wird, startet die Strategie entweder ein neues Raster in dieser Richtung oder ergänzt das bestehende Raster, solange die maximale Anzahl an Einträgen noch nicht erreicht ist.

Positionsmanagement

  • Rastergröße: Jeder zusätzliche Eintrag multipliziert das anfängliche Volumen mit dem LotExponent (Standard 1,44). Die Positionsgröße wird zurückgesetzt, wenn sich die Richtung ändert oder die Position geschlossen wird.
  • Risikokontrollen: Optionale Take-Profit- und Stop-Loss-Abstände werden in Preisschritten in StockSharp Schutzaufträge übersetzt.
  • Richtungsänderung: Immer wenn ein entgegengesetztes Signal eintrifft, wird die aktuelle Belichtung abgeflacht, bevor das Raster in die neue Richtung geöffnet wird.

Parameter

Name Beschreibung Standard
CandleType Hauptzeitrahmen für MACD- und EMA-Berechnungen. Zeitrahmen von 5 Minuten
MomentumCandleType Höherer Zeitrahmen, der die Dynamik bestätigt. 30-minütiger Zeitrahmen
TrendCandleType Für den Trendfilter MACD wird ein langer Zeitraum verwendet. 30-tägiger Zeitrahmen
FastMaPeriod Schnelle Länge von EMA innerhalb von MACD. 12
SlowMaPeriod Langsame Länge von EMA innerhalb von MACD. 26
SignalPeriod Signallänge SMA für MACD. 9
TrendMaPeriod EMA Länge für den lokalen Trendfilter. 26
MomentumPeriod Länge des Momentum-Indikators (höherer Zeitrahmen). 14
MacdOpenLevel Mindestabsolutes MACD-Niveau (in Preisschritten), das für einen Handel erforderlich ist. 3
MomentumBuyThreshold Minimaler absoluter Impulsabstand von 100 für Long-Positionen. 0,3
MomentumSellThreshold Minimaler absoluter Impulsabstand von 100 für Shorts. 0,3
MaxTrades Maximale Anzahl an Rastereinträgen pro Richtung. 10
LotExponent Multiplikator für jeden weiteren Rastereintrag. 1,44
StopLossSteps Stop-Loss-Distanz gemessen in Preisschritten. 20
TakeProfitSteps Take-Profit-Distanz gemessen in Preisschritten. 50

Notizen

  • Der ursprüngliche EA enthielt auch geldbasierte Trailing-, Break-Even-Bewegungen und Kontokapitalstopps. Diese Funktionen erfordern maklerspezifische Portfoliodaten und eine manuelle Auftragsverwaltung; Sie sind in dieser übergeordneten StockSharp-Konvertierung nicht implementiert.
  • Kerzenabonnements, Indikatorbindungen und Handelsausführung folgen der von StockSharp empfohlenen allgemeinen Verwendung von API.
  • Stellen Sie sicher, dass die ausgewählten Instrumente die konfigurierten Kerzentypen unterstützen und dass historische Daten für alle referenzierten Zeitrahmen verfügbar sind.
namespace StockSharp.Samples.Strategies;

using System;

using Ecng.Common;

using StockSharp.Algo.Indicators;
using StockSharp.Algo.Strategies;
using StockSharp.Messages;

/// <summary>
/// MACD Sample Hedging Grid: MACD crossover with grid-like position management.
/// </summary>
public class MacdSampleHedgingGridStrategy : Strategy
{
	private readonly StrategyParam<DataType> _candleType;

	public DataType CandleType
	{
		get => _candleType.Value;
		set => _candleType.Value = value;
	}

	public MacdSampleHedgingGridStrategy()
	{
		_candleType = Param(nameof(CandleType), TimeSpan.FromMinutes(30).TimeFrame())
			.SetDisplay("Candle Type", "Candle timeframe", "General");
	}

	protected override void OnStarted2(DateTime time)
	{
		base.OnStarted2(time);

		var macd = new MovingAverageConvergenceDivergence();

		decimal? prevMacd = null;

		var subscription = SubscribeCandles(CandleType);
		subscription
			.Bind(macd, (candle, macdLine) =>
			{
				if (candle.State != CandleStates.Finished)
					return;

				if (!IsFormedAndOnlineAndAllowTrading())
					return;

				if (prevMacd.HasValue)
				{
					if (prevMacd.Value <= 0 && macdLine > 0 && Position <= 0)
						BuyMarket();
					else if (prevMacd.Value >= 0 && macdLine < 0 && Position >= 0)
						SellMarket();
				}

				prevMacd = macdLine;
			})
			.Start();

		var area = CreateChartArea();
		if (area != null)
		{
			DrawCandles(area, subscription);
			DrawOwnTrades(area);
		}
	}
}