Merhaba operator,
stratejinizi yazmayı bitirdim buyrun.
 
using System;
using System.Collections.Generic;
using System.Linq;
using Matriks.Data.Symbol;
using Matriks.Engines;
using System.Windows.Media;
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;
namespace Matriks.Lean.Algotrader
{
	public class Operator : MatriksAlgo
	{
		// Strateji çalıştırılırken kullanacağımız parametreler. Eğer sembolle ilgili bir parametre ise,
		// "SymbolParameter" ile, değilse "Parameter" ile tanımlama yaparız. Parantez içindeki değerler default değerleridir.
		[SymbolParameter("GARAN")]
		public string Symbol;
		[Parameter(SymbolPeriod.Min30)]
		public SymbolPeriod SymbolPeriod;
		ParabolicSAR parabolicSar;
		[Parameter(0.02)]
		public decimal pSar1;
		[Parameter(0.2)]
		public decimal pSarMax;
		MACD macd;
		[Parameter(40)]
		public int macDLongPeriod;
		[Parameter(20)]
		public int macDShortPeriod;
		[Parameter(6)]
		public int macDTriggerPeriod;
		RSI rsi;
		[Parameter(50)]
		public int rsiBuyLevel;
		[Parameter(85)]
		public int rsiBuyLevelMax;
		[Parameter(0)]
		public int rsiSellLevel;
		[Parameter(70)]
		public int rsiSellLevelMax;
		[Parameter(1000)]
		public decimal bakiye;
		[Parameter(0.001)]
		public decimal komisyon;
		[Parameter(false)]
		public bool aldikMi;
		[Parameter(0)]
		public int elimizdekiSenetMiktari;
		public bool macDCalistir = false;
		/// <summary>
		/// Strateji ilk çalıştırıldığında bu fonksiyon tetiklenir. Tüm sembole kayit işlemleri,
		/// indikator ekleme, haberlere kayıt olma işlemleri burada yapılır. 
		/// </summary>
		public override void OnInit()
		{
			rsi = RSIIndicator(Symbol, SymbolPeriod, OHLCType.Close, 14);
			macd = MACDIndicator(Symbol, SymbolPeriod, OHLCType.Close, macDLongPeriod, macDShortPeriod, macDTriggerPeriod);
			parabolicSar = ParabolicSARIndicator(Symbol, SymbolPeriod, pSar1, pSarMax);
			AddSymbol(Symbol, SymbolPeriod);
			//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);
			WorkWithPermanentSignal(true);
		}
		/// <summary>
		/// Init islemleri tamamlaninca, bardatalar kullanmaya hazir hale gelince bu fonksiyon tetiklenir. Data uzerinde bir defa yapilacak islemler icin kullanilir
		/// </summary>
		public override void OnInitComplated()
		{
		}
		/// <summary>
		/// Eklenen sembollerin bardata'ları ve indikatorler güncellendikçe bu fonksiyon tetiklenir. 
		/// </summary>
		/// <param name="barData">Bardata ve hesaplanan gerçekleşen işleme ait detaylar</param>
		public override void OnDataUpdate(BarDataCurrentValues barDataCurrentValues)
		{
			var bardata = GetBarData();
			var close = Ref(bardata, OHLCType.Close, 0);
			var open = Ref(bardata, OHLCType.Open, 0);
			bool rsiOkeyBuy = false;
			if (Ref(rsi, 0) >rsiBuyLevel && Ref(rsi, 0) <rsiBuyLevelMax)
			{
				rsiOkeyBuy = true;
			}
			bool rsiOkeySell = false;
			if (Ref(rsi, 0) >rsiSellLevel && Ref(rsi, 0) <rsiSellLevelMax)
			{
				rsiOkeySell = true;
			}
			bool macDbuyOkey = false;
			bool macDsellOkey = false;
			if (Ref(macd.MacdTrigger, -1) > Ref(macd.Macd, -1) && Ref(macd.MacdTrigger, 0) < Ref(macd.Macd, 0))
			{
				macDCalistir = true;
				
			}else if (Ref(macd.MacdTrigger, -1) < Ref(macd.Macd, -1) && Ref(macd.MacdTrigger, 0) > Ref(macd.Macd, 0))
			{
				macDCalistir = true;
				
			}
			    
			if(macDCalistir){
				
				if(Ref(macd.MacdTrigger, 0) > Ref(macd.Macd, 0)){
					macDsellOkey = true;
				}
				if(Ref(macd.MacdTrigger, 0) < Ref(macd.Macd, 0)){
					macDbuyOkey = true;
				}
				
				
			}
			bool paraSarOkeyBuy = false;
			if (Ref(parabolicSar, 0) < close)
			{
				paraSarOkeyBuy = true;
			}
			if (rsiOkeyBuy && macDbuyOkey && paraSarOkeyBuy && !aldikMi)
			{
				bakiye -= bakiye * komisyon;
				int senetMiktari2 = (int)((bakiye) / close) -1;
				bakiye -= senetMiktari2 * close;
				SendMarketOrder(Symbol, senetMiktari2, OrderSide.Buy, ChartIcon.Buy);
				elimizdekiSenetMiktari = senetMiktari2;
				Debug("--------------------------------------");
				Debug("ALIŞ EMRİ GÖNDERİLDİ !   " + close);
				Debug("Senet Adet  =" + elimizdekiSenetMiktari);
				aldikMi = true;
			}else if (!paraSarOkeyBuy && aldikMi && macDsellOkey && rsiOkeySell)
			{
				aldikMi = false;
				bakiye -= ((decimal) elimizdekiSenetMiktari * close) * komisyon;
				SendMarketOrder(Symbol, elimizdekiSenetMiktari, OrderSide.Sell, ChartIcon.Sell);
				Debug("SATIŞ EMRİ GÖNDERİLDİ !" + close);
				bakiye += ((decimal) elimizdekiSenetMiktari) * close;
				elimizdekiSenetMiktari = 0;
				Debug("bakiye = " + bakiye);
			}
		}
		/// <summary>
		/// Gönderilen emirlerin son durumu değiştikçe bu fonksiyon tetiklenir.
		/// </summary>
		/// <param name="barData">Emrin son durumu</param>
		public override void OnOrderUpdate(IOrder order)
		{
			if (order.OrdStatus.Obj == OrdStatus.Filled)
			{
			}
		}
	}
}