Merhaba,
öncelikler çoklu sembol ve çoklu periyotta çalışıldığında istenmeyen sinyaller oluşmaması için sembolID ve periyot kontrolü yapılması gerekir.
Evet HO.Value[0][HO.CurrentIndex-1] ile bir önceki 60DK'lık hareketli ortalamanın değerini verir.
şöyle bir şey yapılabilir. 1DK için ondataupdate methodu tetiklendiğinde o anki 60DK hareketli ortalama değeri bir dictonary eklenebilir. Daha sonra bir önceki değer çağrılabilir. aşağıdaki gibi bir yapı kurulabilir.
[SymbolParameter("GARAN")]
		public string Symbol;
		[Parameter(SymbolPeriod.Min)]
		public SymbolPeriod GrafikPeriod;
		[Parameter(SymbolPeriod.Min5)]
		public SymbolPeriod SymbolPeriod;
		[Parameter(5)]
		public int MovPeriod;
		[Parameter(22)]
		public int MovPeriod2;
		// indikator tanımları.
		MOV mov;
		MOV mov2;
		MOV mov60DK;
		public override void OnInit()
		{
			mov60DK = MOVIndicator(Symbol, SymbolPeriod.Min60, OHLCType.Close, 5, MovMethod.Simple);
			AddSymbol(Symbol, GrafikPeriod);
			mov = MOVIndicator(Symbol, SymbolPeriod, OHLCType.Close, MovPeriod, MovMethod.Exponential);
			mov2 = MOVIndicator(Symbol, SymbolPeriod, OHLCType.Close, MovPeriod2, MovMethod.Exponential);
			SendOrderSequential(true);
			WorkWithPermanentSignal(true);
		}
		
		Dictionary<int,decimal> liste =new Dictionary<int,decimal>();
		public override void OnDataUpdate(BarDataEventArgs barData)
		{			
			if (barData.PeriodInfo == GrafikPeriod.ToPeriodInfo())
			{
				var index=barData.BarDataIndex;				
				liste[index]=mov60DK.CurrentValue;				
				Debug("önceki 60DK'lık hareketli ortalama: "+liste[index-1]);		
				
				// yapılacak işlemler
			}
		}
Periyot kontrolü:
using System;
using System.Collections.Generic;
using System.Linq;
using Matriks.Data.Symbol;
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;
namespace Matriks.Lean.Algotrader
{
	public class CokluPeriyot : MatriksAlgo
	{
		[SymbolParameter("GARAN")]
		public string Symbol;
		[Parameter(SymbolPeriod.Min)]
		public SymbolPeriod GrafikPeriod;
		[Parameter(SymbolPeriod.Min5)]
		public SymbolPeriod SymbolPeriod;
		[Parameter(5)]
		public decimal BuyOrderQuantity;
		[Parameter(5)]
		public decimal SellOrderQuantity;
		[Parameter(5)]
		public int MovPeriod;
		[Parameter(22)]
		public int MovPeriod2;
		// indikator tanımları.
		MOV mov;
		MOV mov2;
		public override void OnInit()
		{
			AddSymbol(Symbol, GrafikPeriod);
			mov = MOVIndicator(Symbol, SymbolPeriod, OHLCType.Close, MovPeriod, MovMethod.Exponential);
			mov2 = MOVIndicator(Symbol, SymbolPeriod, OHLCType.Close, MovPeriod2, MovMethod.Exponential);
			SendOrderSequential(true);
			WorkWithPermanentSignal(true);
		}
		public override void OnDataUpdate(BarDataEventArgs barData)
		{
			Debug(barData.PeriodInfo + " - " + GrafikPeriod.ToPeriodInfo());
			if (barData.PeriodInfo == GrafikPeriod.ToPeriodInfo())
			{
				if (CrossAbove(mov, mov2))
				{
					SendMarketOrder(Symbol, BuyOrderQuantity, OrderSide.Buy);
					Debug("Alış Emri Gönderildi");
				}
				if (CrossBelow(mov, mov2))
				{
					SendMarketOrder(Symbol, SellOrderQuantity, OrderSide.Sell);
					Debug("Satış Emri Gönderildi");
				}
			}
		}
	}
}
 
 Unblocked Games offering a wide range of experiences: action, puzzle, platform, racing, clicker mechanics, strategy, sports, even horror. 
https://unblocked1games.github.io