Aşağıdaki stratejinin Long Short yani 1/-1 şeklinde çalışması ve stoploss ile trailingstoploss içermesi için koda ne gibi eklemeler yapılmalı?

Forumda benzer soruların yanıtlarını okudum ancak cross fonksiyonu ile çalışıyordu o stratejiler.

Emirleri sıralı göndermeyi FALSE yaptığımda büyük küçük operatörü kullanıldığından sürekli Al Al Al Al Al şeklinde ilerliyor. Emirleri sıralı göndermeyi TRUE yaptığımda ise Long/Short yöntemi çalışmıyor.

Yardımlarınız için şimdiden teşekkürler.

using System;
using System.Collections.Generic;
using System.Linq;
using Matriks;
using Matriks.Data.Symbol;
using Matriks.Data.Tick;
using Matriks.Engines;
using Matriks.Indicators;
using Matriks.Symbols;
using Matriks.Trader.Core;
using Matriks.Trader.Core.Fields;
using Matriks.Lean.Algotrader.AlgoBase;
using Matriks.Lean.Algotrader.Models;
using Matriks.Lean.Algotrader.Trading;
using Matriks.AI;
using Matriks.AI.AiParameters;
using Matriks.AI.Data;
using Matriks.Trader.Core.TraderModels;
using Matriks.Enumeration;
using Matriks.IntermediaryInstitutionAnalysis.Enums;
using Newtonsoft.Json;

namespace Matriks.Lean.Algotrader
{
	public class MOM_HHVLLV_MOST_S : MatriksAlgo
	{
		[SymbolParameter("XU030")]
			public string Symbol1;
		[SymbolParameter("X30YVADE")]
			public string OrderSymbol1;
		[Parameter(SymbolPeriod.Min)]
			public SymbolPeriod SymbolPeriod1;
		[Parameter(Side.Sell)]
			public Side orderSide;
		[Parameter(30)]
			public int MomPeriod1;
		[Parameter(60)]
			public int MomPeriod2;
		[Parameter(120)]
			public int MomPeriod3;
		[Parameter(240)]
			public int MomPeriod4;
		[Parameter(480)]
			public int MomPeriod5;
		[Parameter(960)]
			public int MomPeriod6;
		[Parameter(22)]
			public int EmaPeriod1;
		[Parameter(2)]
			public decimal MostPercentage1;
		[Parameter(MovMethod.E)]
			public MovMethod MostMovMethod1;
		[Parameter(40)]
			public int HighesthighPeriod1;
		[Parameter(40)]
			public int LowestlowPeriod1;
		[Parameter(1)]
			public decimal OrderQuantity1;
		[Parameter(true)]
		public bool AcigaSatisYapilsin;

		MOM mom;
		MOM mom2;
		MOM mom3;
		MOM mom4;
		MOM mom5;
		MOM mom6;
		EMA ema;
		MOST most;
		HighestHigh highestHigh;
		LowestLow lowestLow;

		int firstRun = 0;
		int realPosition = 0;

		public override void OnInit()
		{
			AddSymbol(OrderSymbol1, SymbolPeriod1);
			mom = MOMIndicator(Symbol1, SymbolPeriod1, OHLCType.Close, MomPeriod1);
			mom2 = MOMIndicator(Symbol1, SymbolPeriod1, OHLCType.Close, MomPeriod2);
			mom3 = MOMIndicator(Symbol1, SymbolPeriod1, OHLCType.Close, MomPeriod3);
			mom4 = MOMIndicator(Symbol1, SymbolPeriod1, OHLCType.Close, MomPeriod4);
			mom5 = MOMIndicator(Symbol1, SymbolPeriod1, OHLCType.Close, MomPeriod5);
			mom6 = MOMIndicator(Symbol1, SymbolPeriod1, OHLCType.Close, MomPeriod6);
			ema = EMAIndicator(Symbol1, SymbolPeriod1, OHLCType.Close, EmaPeriod1);
			most = MOSTIndicator(Symbol1, SymbolPeriod1, OHLCType.Close, EmaPeriod1, MostPercentage1, MostMovMethod1);
			highestHigh = HighestHighIndicator(Symbol1, SymbolPeriod1, OHLCType.Close, HighesthighPeriod1);
			lowestLow = LowestLowIndicator(Symbol1, SymbolPeriod1, OHLCType.Close, LowestlowPeriod1);

			SendOrderSequential(false, AcigaSatisYapilsin);
			WorkWithPermanentSignal(true);
			
		}

		public override void OnInitCompleted()
		{

		}

		public override void OnTimer()
		{

		}

		public override void OnNewsReceived(int newsId, List<string> relatedSymbols)
		{

		}

		public override void OnDataUpdate(BarDataEventArgs barData)
		{
			var barData1 = GetBarData(Symbol1, SymbolPeriod1);
			var ohlcData1 = GetSelectedValueFromBarData(barData1, OHLCType.High);
			var ohlcData2 = GetSelectedValueFromBarData(barData1, OHLCType.Low);
			int AlToplam = 0;

			if (mom.Value[0][mom.CurrentIndex] > 100.4m) AlToplam++;
			if (mom2.Value[0][mom2.CurrentIndex] > 100.4m) AlToplam++;
			if (mom3.Value[0][mom3.CurrentIndex] > 100.4m) AlToplam++;
			if (mom4.Value[0][mom4.CurrentIndex] > 100.4m) AlToplam++;
			if (mom5.Value[0][mom5.CurrentIndex] > 100.4m) AlToplam++;
			if (mom6.Value[0][mom6.CurrentIndex] > 100.4m) AlToplam++;
			if (AlToplam >= 3 && ema.Value[0][ema.CurrentIndex] > most.Value[0][most.CurrentIndex] && highestHigh.Value[0][highestHigh.CurrentIndex - 1] < ohlcData1)
			{
				if (firstRun == 0 || !AcigaSatisYapilsin)
				{
					SendMarketOrder(OrderSymbol1, OrderQuantity1, OrderSide.Buy, includeAfterSession:true);
					firstRun = 1;
				}
				else
				{
					SendMarketOrder(OrderSymbol1, OrderQuantity1 * 2, OrderSide.Buy, includeAfterSession:true);
				}

				if (mom.Value[0][mom.CurrentIndex] < 99.6m) AlToplam--;
				if (mom2.Value[0][mom2.CurrentIndex] < 99.6m) AlToplam--;
				if (mom3.Value[0][mom3.CurrentIndex] < 99.6m) AlToplam--;
				if (mom4.Value[0][mom4.CurrentIndex] < 99.6m) AlToplam--;
				if (mom5.Value[0][mom5.CurrentIndex] < 99.6m) AlToplam--;
				if (mom6.Value[0][mom6.CurrentIndex] < 99.6m) AlToplam--;
				if (AlToplam <= 3 && ema.Value[0][ema.CurrentIndex] < most.Value[0][most.CurrentIndex] && lowestLow.Value[0][lowestLow.CurrentIndex - 1] > ohlcData2)
				{
					if (firstRun == 0 || !AcigaSatisYapilsin)
					{
						SendMarketOrder(OrderSymbol1, OrderQuantity1, OrderSide.Sell, includeAfterSession:true);
					}
					else
					{
						SendMarketOrder(OrderSymbol1, OrderQuantity1 * 2, OrderSide.Sell, includeAfterSession:true);
						firstRun = 1;
					}
				}
			}
		}

		public override void OnOrderUpdate(IOrder order)
		{

		}

		public override void OnStopped()
		{
		}
	}
}