namespace Matriks.Lean.Algotrader { public class MOSTRSIStratejisi : MatriksAlgo //strateji ismini burada deklare ediyoruz. Dosyada ki isimle stratejide yazılan // isim tamamen aynı olmalıdır. (küçük büyük harf duyarlı) { // 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;//Sembol ismi [Parameter(SymbolPeriod.Day)] public SymbolPeriod SymbolPeriod; //Stratejiyi çalıştırmak istediğimiz bar periyodu [Parameter(100)] public int BuyOrderCount; //alım miktarı için kullanacağımız parametre [Parameter(100)] public int SellOrderCount; //satım miktarı için kullanacağımız parametre [Parameter(14)] public int periodRsi; //RSI periyodu için kullanacağımız parametre [Parameter(3)] public int periodMost; //MOST periyodu için kullanacağımız parametre [Parameter(2)] public decimal percentage; //MOST yüzde paremetresi için kullanacağımız parametre //Kullanacağımız indikatör obje tanımları RSI rsi; MOST most; // 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. public override void OnInit() { //tanımladığımız objelere indikatör tanımlarını ve gerekli değerleri //atıyoruz rsi = RSIIndicator(Symbol, SymbolPeriod, OHLCType.Close, periodRsi); most = MOSTIndicator(rsi, periodMost, percentage, MovMethod.Exponential); //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); } // Eklenen sembollerin bardata'ları ve indikatorler 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) { //Bu koşul alım emri içindir. Eğer grafikte MOST'un EXMOV bandı //most bandını yukarı kırarsa al emri gönderilecek. if (CrossAbove(most.CurrentValue, most.ExMOV)) { //Parametrelerde belirlenen sembolden, belirlenen miktarda, piyasa //fiyatından alış emri gönderir SendMarketOrder(Symbol, BuyOrderCount, (OrderSide.Buy)); //"" içerisinde bulunan ifadeyi debug penceresine basar Debug("Alış Emri Gönderildi"); //EXMOV değerini debug penceresine basar Debug("exmov:" + Math.Round(most.ExMOV.CurrentValue, 2)); //MOST değerini debug penceresine basar Debug("most:" + Math.Round(most.CurrentValue, 2)); } //Bu koşul satım emri içindir. Eğer grafikte MOST'un EXMOV bandı //most bandını aşağı kırarsa sat emri gönderilecek. if (CrossBelow(most.CurrentValue, most.ExMOV)) { //Parametrelerde belirlenen sembolden, belirlenen miktarda, piyasa //fiyatından satış emri gönderir SendMarketOrder(Symbol, SellOrderCount, (OrderSide.Sell)); //"" içerisinde bulunan ifadeyi debug penceresine basar Debug("Satış Emri Gönderildi"); //EXMOV değerini debug penceresine basar Debug("exmov:" + Math.Round(most.ExMOV.CurrentValue, 2)); //MOST değerini debug penceresine basar Debug("most:" + Math.Round(most.CurrentValue, 2)); } } } }