GitHub で見る

Trading Boxing 注文管理戦略

概要

Trading Boxing 注文管理戦略は、オリジナルの TradingBoxing EA の手動注文管理パネルを再現します。チャート上のボタンの代わりに、StockSharp バージョンは戦略の UI または自動化からトグルできるパラメーターを提供します。各トグルはリクエストされたアクションをすぐに実行してからリセットし、成行エントリー、保留注文の配置、既存ポジションのクリーンアップのための便利なコントロールサーフェスを提供します。

この戦略はインジケーターロジックや市場データイベントに依存しません。戦略インスタンスに割り当てられたセキュリティとポートフォリオの注文送信とキャンセルを調整するだけです。

パラメーター

ボリューム設定

  • BuyVolumeOpen Buy Market アクションがトリガーされたときに使用する数量。正でなければなりません。
  • SellVolumeOpen Sell Market アクションがトリガーされたときに使用する数量。正でなければなりません。
  • BuyStopVolume – 新しいバイストップ注文の数量。
  • BuyLimitVolume – 新しいバイリミット注文の数量。
  • SellStopVolume – 新しいセルストップ注文の数量。
  • SellLimitVolume – 新しいセルリミット注文の数量。

価格設定

  • BuyStopPrice – バイストップ注文の起動価格。
  • BuyLimitPrice – バイリミット注文の価格。
  • SellStopPrice – セルストップ注文の起動価格。
  • SellLimitPrice – セルリミット注文の価格。

アクショントグル

すべてのアクションパラメーターはブールスイッチです。スイッチを true に設定すると対応するタスクが実行され、戦略は同じ処理サイクルで false に戻します。

  • CloseBuyPositions – 現在のロングエクスポージャーを閉じます(Position > 0 の場合)。
  • CloseSellPositions – 現在のショートエクスポージャーを閉じます(Position < 0 の場合)。
  • DeleteBuyStops – 追跡されたバイストップ注文をキャンセルします。
  • DeleteBuyLimits – 追跡されたバイリミット注文をキャンセルします。
  • DeleteSellStops – 追跡されたセルストップ注文をキャンセルします。
  • DeleteSellLimits – 追跡されたセルリミット注文をキャンセルします。
  • OpenBuyMarketBuyVolume を使用して成行買い注文を送信します。
  • OpenSellMarketSellVolume を使用して成行売り注文を送信します。
  • PlaceBuyStopBuyStopPriceBuyStopVolume で新しいバイストップ注文を登録し、後のキャンセルのために保存します。
  • PlaceBuyLimitBuyLimitPriceBuyLimitVolume で新しいバイリミット注文を登録し、後のキャンセルのために保存します。
  • PlaceSellStopSellStopPriceSellStopVolume で新しいセルストップ注文を登録し、後のキャンセルのために保存します。
  • PlaceSellLimitSellLimitPriceSellLimitVolume で新しいセルリミット注文を登録し、後のキャンセルのために保存します。

動作の詳細

  • 保留注文アクションを通じて作成された注文は内部で追跡され、削除アクションが後でキャンセルできるようにします。この戦略によって配置されなかった外部注文は影響を受けません。
  • 戦略は、リクエストを実行する前に実行中であり、SecurityPortfolio の両方が割り当てられているかを確認します。要件が欠けている場合は警告をログに記録し、トグルを無視します。
  • ボリュームと価格の検証はオリジナルパネルの保護機能を再現します:正でない量は警告をトリガーし、注文は送信されません。
  • 決済アクションは戦略が維持するネットポジションで動作します。ショートをカバーする必要がある場合、戦略は Math.Abs(Position) に等しい成行買い注文を送信します;ロングポジションの場合は現在の Position 値の成行売り注文を送信します。

使用上の注意

  1. 有効なポートフォリオとセキュリティで戦略を開始する。
  2. 取引する商品に合わせてボリュームと価格のパラメーターを調整する。
  3. 必要なブールパラメーターを true に設定して手動アクションをトリガーする。プロパティはアクション完了後に自動的に false に戻るため、次のトリガーはすぐに準備完了です。
  4. 取引計画が変わったときは削除トグルを使って以前に配置した保留注文をクリアする。

戦略はユーザー入力によって純粋にイベント駆動されるため、ローソク足やクォートへのサブスクリプションは不要です。StockSharp 環境内でオリジナルの TradingBoxing インターフェースの柔軟性を反映した、シンプルな実行アシスタントとして機能します。

using System;
using System.Collections.Generic;

using Ecng.Common;

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

namespace StockSharp.Samples.Strategies;

/// <summary>
/// Trading Boxing strategy (simplified). Uses CCI momentum for entries.
/// </summary>
public class TradingBoxingStrategy : Strategy
{
	private readonly StrategyParam<DataType> _candleType;
	private readonly StrategyParam<int> _cciLength;

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

	public int CciLength
	{
		get => _cciLength.Value;
		set => _cciLength.Value = value;
	}

	public TradingBoxingStrategy()
	{
		_candleType = Param(nameof(CandleType), TimeSpan.FromMinutes(5).TimeFrame())
			.SetDisplay("Candle Type", "Candles", "General");

		_cciLength = Param(nameof(CciLength), 20)
			.SetGreaterThanZero()
			.SetDisplay("CCI Length", "CCI period", "Indicators");
	}

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

		var cci = new CommodityChannelIndex { Length = CciLength };

		var subscription = SubscribeCandles(CandleType);
		subscription
			.Bind(cci, (ICandleMessage candle, decimal cciValue) =>
			{
				if (candle.State != CandleStates.Finished)
					return;

				if (!IsFormedAndOnlineAndAllowTrading())
					return;

				if (cciValue < -100 && Position <= 0)
				{
					BuyMarket();
				}
				else if (cciValue > 100 && Position >= 0)
				{
					SellMarket();
				}
			})
			.Start();

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