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.

MetotAçı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?

Haberlere 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 #

OnDataUpdate(BarDataEventArgs) :  İçerisinde fonksiyonu tetikleyen sembol verilerinin bulunduğu BarDataEventArgs modeli bulunan fonksiyon

OnDataUpdate(BarDataCurrentValues) : İçerisinde fonksiyonu tetikleyen sembol verilerinin bulunduğu BarDataCurrentValues modeli bulunan fonksiyon

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");
    }
}