Ana içeriğe geç

Hata toleransı

“Hata toleransı” terimi, otomatik bir sistemin bir arıza ile karşılaştığında çalışmaya devam etme yeteneğini ifade eder. cTrader algoritmaları için hata toleransı, cBot'ları, eklentileri ve göstergeleri barındıran süreçlerin hatalarla karşılaştığında bile çalışmaya devam edebilmesi anlamına gelir.

Bu makale, hata toleransının nasıl çalıştığını açıklamakta ve bu özelliğin algoritmik işlem yapan trader'lara sunduğu temel faydaları anlatmaktadır.

Bir dakikada hata toleransı!

  • Hata toleransı kuralları uyarınca, bir istisna ile karşılaşıldığında bir algoritma çalışmaya devam edecektir. Bu özellik, cTrader algoritmalarını daha da kararlı hale getirir ve kodunuzun nasıl yürütüldüğünü iyileştirmek için fırsatlar sunar.
  • Algoritmalar artık karşılaştıkları istisnaları otomatik olarak işlem günlüğüne çıkarabilir ve kodunuzu iyileştirmek için kullanabileceğiniz değerli bilgiler sağlayabilir.
  • Algoritmalarınızın istisnalara nasıl tepki verdiğini özelleştirmek için OnException(Exception exception) yöntemini kullanabilirsiniz. Güvenilir ve etkili uzantılar oluşturmak için bu olay işleyicisini kullanın.

Hata toleransı kuralları

Kısaca, hata toleransı tüm algoritmaların aşağıda detaylandırılan kurallara uymasını sağlar:

  • Bir istisna ile karşılaşıldığında, bir algoritma çalışmaya devam etmelidir.
  • Bir algoritma çalışırken meydana gelen her istisna günlüğe kaydedilmelidir.
  • Kullanıcılar, algoritmaların çeşitli istisnaları nasıl ele alacağını belirleyen özel kurallar getirme fırsatına sahip olmalıdır.

Hata toleransı, algoritmaların süreçlerini çökertme tehdidi oluşturmayan tüm hataları esasen yok saymasına olanak tanır. İstisnalar kod yürütmeyi engellemeye devam etse de, hata toleransı bir algoritmanın beklenmedik bir şekilde çökme sayısını büyük ölçüde azaltır.

OnException() yöntemi

Hata toleransı kuralları uyarınca, algoritmalar istisnaları yok saymak zorundadır. Ancak, algoritmalarınızın belirli istisnalara nasıl tepki verdiğini özelleştirebilir veya varsayılan hata toleransı davranışlarını tamamen geçersiz kılabilirsiniz.

Bunu yapmak için OnException() yöntemini kullanın. İşlenmeyen tüm istisnalar için özel işleyici görevi görür. Varsayılan imzası aşağıdaki gibidir:

1
2
3
4
protected virtual void OnException(Exception exception)
{
    /// Introduce your custom exception handling logic here.
}

Aşağıdaki örnekte, bir cBot'un NullReferenceException istisnasına nasıl tepki verdiğini değiştirmek için OnException() yönteminin kullanıldığı durumu inceleyin.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
namespace cAlgo.Robots
{
    [Robot(AccessRights = AccessRights.None)]
    public class SampleExceptionBot : Robot
    {
        private const string label = "Sample Exception Bot";
        protected override void OnStart()
        {
                var shortPosition = Positions.Find(label, SymbolName, TradeType.Sell);
                ClosePosition(shortPosition);
        }

        protected override void OnException(Exception exception)
        {
            if (exception is NullReferenceException)
            {
                MessageBox.Show("The position does not exist", "Error!");
            }
        }
    }
}

NullReferenceException istisnasını atmak için cBot'umuzun mevcut olmayabilecek bir kısa pozisyonu kapatmasını sağlıyoruz. Belirtilen istisna ile karşılaşıldığında, cBot'umuzun açıklayıcı metin içeren bir MessageBox göstermesi beklenir, böylece bu istisnaya hızlı bir şekilde tepki verebilir ve cBot'umuzun davranışlarını ayarlayabiliriz.

OnException() işleyicisinin, bu yöntem çağrılırken meydana gelen istisnaları ele alması beklenmediğini unutmayın. Yine de, bu tür istisnalar olay günlüğüne kaydedilir.

Hata toleransının faydaları

Hata toleransı, cTrader'da algoritmik işlem yapmanın nasıl çalıştığının önemli bir yönüdür ve aşağıdaki faydaları sağlar.

  • Hata toleransı, algoritmaların güvenilirliğini büyük ölçüde artırır ve otomatik işlem yapmaya yaklaşımınızı iyileştirmek için yeni fırsatlar sunar.
  • Algoritmalar, karşılaştıkları istisnaları olay günlüğünde gösterebildiği için, bir algoritmanın belirli bir hatayla karşılaştığı koşulları kolayca belirleyebilirsiniz.
  • İstisna olaylarının işlenmesine izin vererek, OnException() yöntemi algoritmalarınızın davranışlarını mükemmelleştirmek ve güvenilirliklerini artırmak için kullanılabilir.

Çökmeleri ele alma

Daha önce belirtildiği gibi, bazı hatalar tüm süreçleri çökertebilir. Bunlar şunlardır:

  • OutOfMemoryException istisnası.
  • StackOverflowException istisnası.
  • Ayrı bir iş parçacığında meydana gelen işlenmeyen herhangi bir istisna.
  • Bir algoritmanın çalıştığı süreci çökertme tehdidi oluşturabilecek diğer tüm hatalar.

Yukarıdaki hatalardan herhangi biriyle karşılaşıldığında, bir gösterge örneği durdurulacaktır; otomatik olarak yeniden başlatılmayacaktır. Ancak, istisna yine de günlüğe kaydedilecektir.

Buna karşılık, bir cBot örneğini barındıran bir süreç çöktüğünde, otomatik olarak yeniden başlatılacaktır (istisna günlüğe kaydedilerek).

Tek bir süreçte birden çok örnek

Tek bir sürecin birden fazla cBot örneğini barındırabileceği durumlar vardır. Bu örneklerden biri, çökmesine neden olan bir istisna ile karşılaşırsa, tüm süreç de çökecektir. Yeniden başlatıldığında, süreç başlangıçta barındırdığı tüm cBot örneklerini yeniden başlatacaktır.

Özet

Hata toleransı, algoritmaları daha da kararlı ve etkili hale getirmek için çeşitli değerli fırsatlar sunar. OnException() işleyicisi, algoritmalarınızın istisnalara nasıl tepki verdiğine dair ek bir kontrol katmanı sağlar.