GitHub で見る

MACD ヘッジグリッド戦略のサンプル

概要

この戦略は、MetaTrader「MACD サンプル ヘッジ グリッド」エキスパート アドバイザーの StockSharp 移植です。これは、短期的な MACD クロスオーバー、ローカルな EMA スロープ フィルター、およびより長い時間枠の確認を組み合わせたものです。条件が一致すると、戦略は検出された方向にポジションのグリッドを構築し、設定可能な指数によって取引サイズを拡大します。

マーケットロジック

  • ベースタイムフレーム: 設定可能 (デフォルトは 5 分足ローソク足)。
  • トレンド フィルター: EMA (デフォルトは 26 期間) は、長期取引の場合は上向きに、短期取引の場合は下向きに傾く必要があります。
  • MACD トリガー: 高速の MACD ラインは、最小絶対値 (価格ステップで表される) を超えながら、基本時間枠でシグナル ラインを横切る必要があります。
  • モメンタムの確認: より高い時間枠でのモメンタムとニュートラル 100 レベルの間の絶対距離は、ロングとショートの個別のしきい値を超える必要があります。最後の 3 つの上位タイムフレーム ローソク足が検査され、元の EA の動作が再現されます。
  • 長期的な確認: 長期の時間枠 (デフォルトでは毎月) で計算された MACD は取引方向と一致する必要があります (MACD の上のシグナルは強気環境、下は弱気環境のシグナル)。

シグナルが発火すると、戦略は、エントリの最大数に達していない限り、その方向に新しいグリッドを開始するか、既存のグリッドに追加します。

ポジション管理

  • グリッド サイズ: エントリを追加するたびに、初期ボリュームに LotExponent が乗算されます (デフォルトは 1.44)。ポジションサイズは、方向が変わるかポジションがクローズされるとリセットされます。
  • リスク管理: オプションのテイクプロフィットとストップロスの距離は、価格ステップで StockSharp の保護注文に変換されます。
  • 方向変更: 反対の信号が到着すると、新しい方向にグリッドを開く前に現在の露出が平坦化されます。

パラメーター

名前 説明 デフォルト
CandleType MACD と EMA の計算に使用される主な時間枠。 5分の時間枠
MomentumCandleType より高いタイムフレームが勢いを確認します。 30分の時間枠
TrendCandleType トレンド MACD フィルターに使用される長い時間枠。 30日間の期間
FastMaPeriod MACD 内の高速な EMA の長さ。 12
SlowMaPeriod MACD 内の EMA の長さが遅いです。 26
SignalPeriod MACD の信号 SMA の長さ。 9
TrendMaPeriod ローカル トレンド フィルターの EMA の長さ。 26
MomentumPeriod モメンタムインジケーターの長さ(より高いタイムフレーム)。 14
MacdOpenLevel 取引に必要な最小絶対値 MACD レベル (価格ステップ単位)。 3
MomentumBuyThreshold ロングの場合の最小絶対運動量距離は 100 からです。 0.3
MomentumSellThreshold ショートの場合の最小絶対運動量距離は 100 からです。 0.3
MaxTrades 方向ごとのグリッド エントリの最大数。 10
LotExponent 追加のグリッド エントリごとに使用される乗数。 1.44
StopLossSteps 価格ステップで測定されるストップロス距離。 20
TakeProfitSteps 価格ステップで測定される利食い距離。 50

注意事項

  • オリジナルの EA には、金額ベースのトレーリング、損益分岐点の動き、口座資本のストップも含まれていました。これらの機能には、ブローカー固有のポートフォリオ データと手動の注文管理が必要です。これらは、この高レベルの StockSharp 変換では実装されていません。
  • ローソク足のサブスクリプション、インジケーター バインディング、取引実行は、StockSharp が推奨する高レベルの API の使用法に従います。
  • 選択した商品が設定されたローソク足タイプをサポートしていること、および参照されているすべての時間枠で履歴データが利用可能であることを確認してください。
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);
		}
	}
}