Temel Metotlar #
Stratejilerin yapı taşını oluşturan; takip edilecek verileri ekleme, koşul oluşturma, emir verme vb. birçok işlemin kodlanacağı fonksiyonlardır.
Metot | Açıklama |
---|---|
OnInit() | Strateji çalıştırılırken ilk tetiklenen fonksiyondur. Stratejinin akışında kullanılacak verilere bu metot içerisinde kaydolunur. |
OnInitCompleted() | OnInit fonksiyonun çalışıp bitmesinin ardından tetiklenen fonksiyondur |
OnDataUpdate(BarDataEventArgs) | Stratejide kaydolunan sembolde işlem oldukça bu fonksiyon tetiklenir |
OnOrderUpdate(IOrder) | Emir güncellemelerini alan fonksiyondur |
OnTimer() | Belirlenen zaman aralığında tetiklenen fonksiyondur |
OnStopped() | Strateji durdurulmasıyla veya duraklatılmasıyla tetiklenen fonksiyondur |
OnInit #
Strateji çalıştırılırken ilk tetiklenen fonksiyondur. Stratejinin akışında kullanılacak verilere bu metot içerisinde kaydolunur.
Bu bölümde ayrıca, stratejinin çalışma koşullarını bütünüyle etkileyecek önemli fonksiyonlar bulunmakta ve eklenebilmektedir:
Yazım #
public override void OnInit()
Ek Notlar #
Sembol verisine nasıl kaydolunur?
Derinlik verisine nasıl kaydolunur?
Yüzeysel veriye nasıl kaydolunur?
Sembole ait formasyon verisine nasıl kaydolunur?
Sembole ait dedektör verisine nasıl kaydolunur?
[SymbolParameter("GARAN")] public string Symbol; [Parameter(SymbolPeriod.Min5)] public SymbolPeriod SymbolPeriod; public override void OnInit() { //Sembol verisini girilen periyotta stratejiye ekleyen fonksiyon AddSymbol(Symbol, SymbolPeriod); //Sıralı emir gönderimini sağlayan fonksiyon SendOrderSequential(true); }
OnInitCompleted #
OnInit fonksiyonun çalışıp bitmesinin ardından bu fonksiyon tetiklenir. Tek kez çalıştığı için, üzerinde işlem yapılıp daha sonra program boyunca sabit olarak kullanılacak öğeler için uygundur.
Örneğin Yapay Zeka Modelinin parametrelerinin belirlenmesi ve eğitimi bu fonksiyon içerisinde yapılmakta.
Yazım #
public override void OnInitCompleted()
Örnek #
public override void OnInitCompleted() { Debug("Strateji çalıştırıldı."); }
OnDataUpdate #
Stratejide kaydolunan sembolde işlem oldukça bu fonksiyon tetiklenir. Bu nedenle stratejinin mantıksal yapısı genellikle bu fonksiyon içerisinde kurulur.
OnDataUpdate fonksiyonu iki farklı şekilde tetiklenebilir. İlki sembolde olan her işlemde tetiklenmesi, diğeri sembolün belirlenen periyoduna göre yeni bar açışıyla tetiklenmesidir. (Detaylı bilgi için bknz. WorkWithPermanentSignal)
Aşırı Yüklemeler #
: İçerisinde fonksiyonu tetikleyen sembol verilerinin bulunduğu BarDataEventArgs modeli bulunan fonksiyonOnDataUpdate(BarDataEventArgs)
: İçerisinde fonksiyonu tetikleyen sembol verilerinin bulunduğu BarDataCurrentValues modeli bulunan fonksiyonOnDataUpdate(BarDataCurrentValues)
Yazım #
public override void OnDataUpdate(BarDataEventArgs barDataEventArgs)
public override void OnDataUpdate(BarDataCurrentValues barDataCurrentValues)
Parametreler #
barDataEventArgs BarDataEventArgs
Sembole ait fiyat, bar ve tanım verileri gibi barındıran MatriksIQ özel modeli (Detaylı bilgi için bknz. BarDataEventArgs)
barDataCurrentValues BarDataCurrentValues
Sembole ait fiyat, bar ve tanım verileri gibi barındıran MatriksIQ özel modeli (Detaylı bilgi için bknz.BarDataCurrentValues)
Örnek #
public override void OnDataUpdate(BarDataEventArgs barData) { var barDataModel = GetBarData(); if (CrossAbove(barDataModel, ema, OHLCType.Close)) { SendMarketOrder(Symbol, BuyOrderQuantity, (OrderSide.Buy)); Debug("Alış emri gönderildi."); Debug("Close = " + barData.BarData.Close); Debug("Ema = " + ema.CurrentValue); } if (CrossBelow(barDataModel, ema, OHLCType.Close)) { SendMarketOrder(Symbol, SellOrderQuantity, (OrderSide.Sell)); Debug("Satış emri gönderildi."); Debug("Close = " + barData.BarData.Close); Debug("Ema = " + ema.CurrentValue); } }
OnOrderUpdate #
Emir güncellemelerini alan fonksiyondur. Emirlerin durumu değiştiğinde (düzeltme, iptal, gerçekleşme, parçalı gerçekleşme) bu fonksiyona düşer.
Yazım #
public override void OnOrderUpdate(IOrder order)
Parametreler #
Order IOrder
Emre ait detayları barındıran arabirim bknz. IOrder
Ek Notlar #
OnOrderUpdate fonksiyonu sadece çalıştığı strateji içerisindeki emirlerin durumunda değişiklik olmasında tetiklenir. Farklı strateji veya manuel verilen emirlerin durum değişikliklerinde tetiklenmeyecektir.
Örnek #
public override void OnOrderUpdate(IOrder order) { if (order.OrdStatus.Obj == OrdStatus.Filled && order.Side.Obj == Side.Buy) { Debug("Alış Emrinin Tamamı Gerçekleşti"); } if (order.OrdStatus.Obj == OrdStatus.Filled && order.Side.Obj == Side.Sell) { Debug("Satış Emrinin Tamamı Gerçekleşti"); } }
OnTimer #
Belirli periyotlarda çalıştırılması istenilen kodların yazılacağı fonksiyondur. OnTimer fonksiyonun tetiklenme aralığını SetTimerInterval fonksiyonuna girilen değer belirler. SetTimerInterval fonksiyonu çalıştırıldığı ilk andan itibaren OnTimer periyodik olarak çalışmaya başlayacaktır.
Yazım #
public override void OnTimer()
Örnek #
Belirlenen zaman aralığında derinlik verisini debug sekmesine yazdırır
public override void OnTimer() { var SymbolDepth = GetMarketDepth(Symbol); if (SymbolDepth == null) return; string Header = String.Format("|{0,-10} {1,-12}|{2,-13} {3,-12}|", "Alış Adet", "Alış Fiyat", "Satış Fiyat", "Satış Adet"); Debug(Header); for (int i = 0; i<SymbolDepth.AskRows.Count; i++) { string Depth = String.Format("|{0,-10} {1,-12}|{2,-13} {3,-12}|\n", SymbolDepth.AskRows[i].Size, SymbolDepth.AskRows[i].Price, SymbolDepth.BidRows[i].Price, SymbolDepth.BidRows[i].Size); Debug(Depth); } }
OnStopped #
Sadece strateji durdurulduğunda tetiklenen fonksiyon. Strateji durdurulmasıyla stratejide yapılmak istenen aksiyonlar bu fonksiyon içerisine yazılabilir.
Yazım #
public override void OnStopped()
Örnek #
public override void OnStopped() { if (IsPaused) { Debug("Strateji Duraklatıldı."); }else { Debug("Strateji Durduruldu"); } }