Merhabalar,
Dilerseniz aşağıdaki yapıyı inceleyiniz.
***STRATEJİLERİ TEST/DENEME ORTAMINDA SINAMADAN VE SİZİN İSTEDİĞİNİZ ŞEKİLDE ÇALIŞTIĞINA EMİN OLMADAN GERÇEK ORTAMDA HİÇBİR ZAMAN ÇALIŞTIRMAYINIZ ***
using System;
using System.Collections.Generic;
using System.Linq;
using Matriks.Data.Symbol;
using Matriks.Engines;
using Matriks.Indicators;
using Matriks.Symbols;
using Matriks.AlgoTrader;
using Matriks.Trader.Core;
using Matriks.Trader.Core.Fields;
using Matriks.Trader.Core.TraderModels;
using Matriks.Lean.Algotrader.AlgoBase;
using Matriks.Lean.Algotrader.Models;
using Matriks.Lean.Algotrader.Trading;
//===========================================ACIKLAMA=======================================//
// Bu statejide TMA VE HullMA indikatörleri birlikte kullanılmıştır.						//
// Eğer grafikte fiyat çubukları HullMA bandını yukarı kırarsa ve o anki hullMA değeri,		//
// TMA değerinin altındaysa al emri gönderilecek.											//
// Eğer grafikte fiyat çubukları HullMA bandını aşağı kırarsa ve o anki hullMA değeri,		//
// TMA değerinin üstündeyse sat emri gönderilecek.											//
// Emirler piyasa fiyatından gönderilecektir.                                            	//
// Emir gönderimi ile birlikte strateji raporunda Debug sekmesine "Alış emri gönderildi."	//
// ve "Satış emri gönderildi." ifadesi yazdırılmaktadır.                                  	//
namespace Matriks.Lean.Algotrader
{//strateji ismini burada deklare ediyoruz. Dosyada ki isimle stratejide yazılan isim tamamen aynı olmalıdır. (küçük büyük harf duyarlı)
	public class projektll : MatriksAlgo
	{
		//canlı, backtest ve backtest optimization kısımlarında değiştirilebilir olması istenilen parametreler bu bölümde yazılır
		// Strateji çalıştırılırken kullanacağımız parametreler. Eğer sembolle ilgili bir parametre ise,
		[SymbolParameter("XU100")]
		public string Symbol;//Sembol ismi
		[Parameter(SymbolPeriod.Day)]
		public SymbolPeriod SymbolPeriod;//Stratejiyi çalıştırmak istediğimiz bar periyodu
		[Parameter(22)]
		public int HullMAPeriod;//Moving average periyodu için kullanacağımız parametre
		[Parameter(12)]
		public int TmaPeriod;//RSI periyodu için kullanacağımız parametre
		[Parameter(9)]
			public int RsiPeriod1;
		[Parameter(100)]
		public decimal BuyOrderQuantity; //alım miktarı için kullanacağımız parametre
		[Parameter(100)]
		public decimal SellOrderQuantity; //satım miktarı için kullanacağımız parametre
		TMA tma;//TMA indikatörü türünde tma isminde bir obje tanımlıyoruz
		HullMA hullMA;//HullMA indikatörü türünde hullMA isminde bir obje tanımlıyoruz
		RSI rsi;
		public override void OnInit()
		{
			//tanımladığımız objelere indikatör tanımlarını ve gerekli değerleri atıyoruz
			hullMA = HullMAIndicator(Symbol, SymbolPeriod, OHLCType.Close, HullMAPeriod);
			tma = TMAIndicator(Symbol, SymbolPeriod, OHLCType.Close, TmaPeriod);
			rsi = RSIIndicator(Symbol, SymbolPeriod, OHLCType.Close, RsiPeriod1);
			//Sembol ve periyoduna kayıt
			AddSymbol(Symbol, SymbolPeriod);
			// Algoritmanın kalıcı veya geçici sinyal ile çalışıp çalışmayacağını belirliyoruz.
			//true değer, algoritmanın sadece yeni bar açılışlarında çalışmasını sağlar, bu 
			//fonksiyonu çağırmazsak veya false olarak belirlersek her işlem olduğunda algoritma tetiklenecektir.
			WorkWithPermanentSignal(true);
			//Eger backtestte emri bir al bir sat seklinde gonderilmesi isteniyor bu true set edilir. 
			//Alttaki satırı silerek veya false geçerek emirlerin sirayla gönderilmesini engelleyebilirsiniz. 
			SendOrderSequential(true);
		}
		//Kayıt olunan sembol veya indikatörler güncellendikçe bu fonksiyon tetiklenir. 
		//Dolayısıyla asıl al/sat stratejisini yazacağımız bölümdür
		public override void OnDataUpdate(BarDataEventArgs barData)
		{
			var barDataModel = GetBarData();
			//Bu koşul alım emri içindir. Eğer grafikte fiyat çubukları hullMA bandını yukarı kırarsa ve 
			//o anki hullMA değeri, tma değerinin altındaysa al emri gönderilecek.
			if (CrossAbove(barDataModel, hullMA, OHLCType.Close, 0) && hullMA.CurrentValue<tma.CurrentValue)
			{
				//Parametrelerde belirlenen sembolden, belirlenen miktarda, piyasa fiyatından alış emri gönderir
				SendMarketOrder(Symbol, BuyOrderQuantity, OrderSide.Buy);
				//bar kapanışını debug penceresine basar
				Debug("Close = " + barData.BarData.Close);
				//HullMA değerini debug penceresine basar
				Debug("HullMA = " + hullMA.CurrentValue);
				//TMA değerini debug penceresine basar
				Debug("TMA = " + tma.CurrentValue);
				//"" içerisinde bulunan ifadeyi debug penceresine basar
				Debug("Alış Emri Gönderildi");
			}
			//Bu koşul satım emri içindir. Eğer grafikte fiyat çubukları hullMA bandını aşağı kırarsa ve 
			//o anki hullMA değeri, tma değerinin üstündeyse sat emri gönderilecek.
			if (CrossBelow(rsi, 70m, 0) || CrossAbove(rsi, 82m, 0))
			{
				//Parametrelerde belirlenen sembolden, belirlenen miktarda, piyasa fiyatından satış emri gönderir
				SendMarketOrder(Symbol, SellOrderQuantity, OrderSide.Sell);
				//bar kapanışını debug penceresine basar
				Debug("Close = " + barData.BarData.Close);
				//HullMA değerini debug penceresine basar
				Debug("HullMA = " + hullMA.CurrentValue);
				//TMA değerini debug penceresine basar
				Debug("TMA = " + tma.CurrentValue);
				//"" içerisinde bulunan ifadeyi debug penceresine basar
				Debug("Satış Emri Gönderildi");
			}
		}
		/// <summary>
		/// Strateji durdurulduğunda bu fonksiyon tetiklenir.
		/// </summary>
		public override void OnStopped()
		{
		}
	}
}
İyi çalışmalar.