MatriksIQ’da grafik üzerine çizdiğimiz trendlere sağ tıklayarak “Algo Kodu Kopyala” seçeneği ile algoritmaya aktarabiliriz.
Bu algoritma içerisinde hem elle çizilmiş hem de kopyalanarak alınmış trend çizgisi örnekleri yer alır.
Örnek olarak, trend üstü al, trend altı sat stratejisi de yazılmıştır.
Alım-satım emirleri kapatılıp, bunun yerine alt satırlarda yorum satırına alınmış alarm (alert) fonksiyonları aktif edilerek sadece alarm üreten bir stratejiye dönüştürülebilir.
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; using System.Windows.Media; using Matriks.Data.Tick; using Matriks.Enumeration; using Matriks.IntermediaryInstitutionAnalysis.Enums; using Newtonsoft.Json; namespace Matriks.Lean.Algotrader { public class TrendStrategy : 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(1)] public int Quantity; [Parameter(SymbolPeriod.Min5)] public SymbolPeriod SymbolPeriod; ITrend drawthis; //Cizdirecegimiz trend objesini burada tanimliyoruz public override void OnInit() { AddSymbol(Symbol, SymbolPeriod); //Cizilebilecek/grafikten kopyalanmis farkli trend ornekleri //drawthis = MyTrend(Symbol, SymbolPeriod, new DateTime(2020, 4, 21, 10, 0, 0), 6733.27333184572m, new DateTime(2020, 4, 22, 15, 0, 0), 6897.78552467496m); //drawthis = MyTrend(Symbol, SymbolPeriod, new DateTime(2020, 4, 30, 3, 0, 0), new DateTime(2020, 5, 5, 14, 0, 0), TrendType.Decreasing); drawthis = MyTrend(Symbol, SymbolPeriod, 100, 0, 12.64m, 8.55m); //MyTrend fonksiyonunu kullanarak trend cizdirip bunu drawthis objesine atiyoruz DrawTrend(drawthis, Colors.Gold); //Olusturdugumuz trend objesini cizdirmek icin DrawTrend fonksiyonunu kullaniyoruz, bu satirsa renklendirme ornegi de goruluyor //DrawTrend(drawthis, Color.FromRgb(255, 0, 255)); //Renk atamasini RGB olarak belirlemek istersek bu satiri acarak ederek deneyebiliriz 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 OnInitCompleted() { } /// <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 close = barDataCurrentValues.LastUpdate.Close; if(close > drawthis.CurrentValue) { SendMarketOrder(Symbol, Quantity, OrderSide.Buy); Debug("Kapanis trend cizgisinin uzerinde. Alis emri gonderildi"); //Alert("Fiyat trend cizgisinin uzerinde kapatti"); } if(close < drawthis.CurrentValue) { SendMarketOrder(Symbol, Quantity, OrderSide.Sell); Debug("Kapanis trend cizgisinin altinda. Satis emri gonderildi"); //Alert("Fiyat trend cizgisinin altinda kapatti"); } } /// <summary> /// Gönderilen emirlerin son durumu değiştikçe bu fonksiyon tetiklenir. /// </summary> /// <param name="order">Emrin son durumu</param> public override void OnOrderUpdate(IOrder order) { if (order.OrdStatus.Obj == OrdStatus.Filled) { } } /// <summary> /// Strateji durdurulduğunda bu fonksiyon tetiklenir. /// </summary> public override void OnStopped() { } } }