Ana içeriğe geç

Özel bildirimler

Özel bildirim API'si, işlem algoritmalarının doğrudan cTrader'da gerçek zamanlı açılır uyarılar sunmasını sağlayan türleri içerir. Bu açılır pencereler, cBot'ların, göstergelerin ve eklentilerin ilerlemeyi, başarıyı, hataları veya genel bilgileri kullanıcılara görsel ve bağlamsal olarak iletmesini sağlar.

Özel bildirim API desteği sayesinde cBot'ların iletişim için artık Günlük sekmesine, grafik nesnelerine veya harici Telegram köprülerine güvenmeleri gerekmez. Algoritmalar, cTrader'daki standart bildirim sistemi aracılığıyla trader'lara ne olduğunu doğrudan bildirir. Algoritma geliştiricileri ve kullanıcıları, karmaşık kurulumlar olmadan hız, güvenilirlik ve netlikten faydalanır.

İlgili API arayüzleri şunları içerir:

  • INotifications.ShowPopup(caption, message, state) belirli bir başlık, mesaj ve durum (PopupNotificationState) ile bir açılır bildirim görüntülemek için.
  • PopupNotification arayüzü, uzun süreli veya aşamalı bildirimlerin son durumlarını güncellemek için .Complete() çağrısı yaparak programatik kontrolünü sağlar.

Özel bildirim API'si tarafından iletilen mesajlar anında görünür, duruma göre renk kodludur ve daha sonra tamamlanabilir. Bildirim durumları PopupNotificationState enum'ı kullanılarak tanımlanır:

  • InProgress uzun süreli süreçleri veya bekleyen durumları temsil etmek için. Örnek:

  • Success bir işlemin başarıyla tamamlandığını belirtmek için. Örnek:

  • Error bir hatayı veya istisnayı bildirmek için. Örnek:

  • Partial kısmen başarılı bir sonucu iletmek için (örn. bazı emirler başarılı oldu). Örnek:

  • Information genel uyarılar, güncellemeler veya geri bildirimler için. Örnek:

İpucu

Açılır bildirimleri, işlem etkinliğini izlemek, mantık akışlarında hata ayıklamak, kullanıcıları piyasa olayları veya veri hataları hakkında uyarmak ve canlı veya manuel strateji operasyonları sırasında dinamik kullanıcı arayüzü geri bildirimi sağlamak için kullanın.

Bildirim API nesneleri aşağıdakileri yapmak için kullanılabilir:

Özellik veya işlem Örnekler
Emir takibi ve geri bildirim Emir yürütme geri bildirimini görüntüle
Kâr al/Zarar durdur çıkışlarını onayla
Takip eden zarar durdur değişikliklerini izle
Risk ve kural tabanlı uyarılar Düşük marj seviyeleri hakkında uyar
Engellenen işlemler için uyarıları göster
İlerleme ve tanılama Açılır pencerelerle analiz ilerlemesini göster
Manuel işlem yapma etkileşimleri İşlem eylemleri için geri bildirim sağla
Manuel geçersiz kılmalar veya müdahaleler hakkında uyar
Piyasa olayları ve sinyal uyarıları Gösterge kesişimlerini sinyalle
Seans açılışlarını veya fiyat sıçramalarını duyur
Strateji hata ayıklama ve şeffaflık Strateji/mantık adımlarını görsel olarak izle
Mantık hatalarını raporla

Temel örnek

Bu cBot'un bir örneği bir grafiğe eklendiğinde, bildirim durumu başına bir tane olmak üzere beş düğme sağlar. Bir düğmeye tıklamak bir açılır bildirimi tetikler.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
using System;
using cAlgo.API;
using cAlgo.API.Collections;
using cAlgo.API.Internals;

namespace cAlgo.Robots
{
    [Robot(AccessRights = AccessRights.None, AddIndicators = true)]
    public class PopupNotificationStatesDemo : Robot
    {
        protected override void OnStart()
        {
            var panel = new StackPanel
            {
                Orientation = Orientation.Vertical,
                HorizontalAlignment = HorizontalAlignment.Center,
                VerticalAlignment = VerticalAlignment.Center
            };

            // InProgress
            var inProgressBtn = new Button { Text = "Show: InProgress", Margin = 5 };
            inProgressBtn.Click += _ =>
            {
                Notifications.ShowPopup(
                    "In progress",
                    "Starting a long-running task…",
                    PopupNotificationState.InProgress
                );
            };
            panel.AddChild(inProgressBtn);

            // Success
            var successBtn = new Button { Text = "Show: Success", Margin = 5 };
            successBtn.Click += _ =>
            {
                Notifications.ShowPopup(
                    "Success",
                    "The operation completed successfully.",
                    PopupNotificationState.Success
                );
            };
            panel.AddChild(successBtn);

            // Error
            var errorBtn = new Button { Text = "Show: Error", Margin = 5 };
            errorBtn.Click += _ =>
            {
                Notifications.ShowPopup(
                    "Error",
                    "Something went wrong. Please check the logs or try again.",
                    PopupNotificationState.Error
                );
            };
            panel.AddChild(errorBtn);

            // Partial
            var partialBtn = new Button { Text = "Show: Partial", Margin = 5 };
            partialBtn.Click += _ =>
            {
                Notifications.ShowPopup(
                    "Partial result",
                    "Completed with partial success (e.g. some orders filled).",
                    PopupNotificationState.Partial
                );
            };
            panel.AddChild(partialBtn);

            // Information
            var infoBtn = new Button { Text = "Show: Information", Margin = 5 };
            infoBtn.Click += _ =>
            {
                Notifications.ShowPopup(
                    "Information",
                    "General update: your settings were saved.",
                    PopupNotificationState.Information
                );
            };
            panel.AddChild(infoBtn);

            Chart.AddControl(panel);
        }

        protected override void OnTick()
        {
            // Handle price updates here if needed
        }

        protected override void OnStop()
        {
            // Cleanup if needed
        }
    }
}

Emir takibi ve geri bildirim

Emir yürütme geri bildirimini görüntüle

Piyasa emrinizin başarılı olup olmadığını anında görmek için açılır bildirimleri kullanın. Örneğin, cBot'unuz bir alış emri verdikten sonra, işleminiz doldurulduysa bir başarı açılır penceresi veya broker'ınız reddettiyse bir hata açılır penceresi gösterir.

1
2
3
var result = ExecuteMarketOrder(TradeType.Buy, SymbolName, 1000);
var state = result.IsSuccessful ? PopupNotificationState.Success : PopupNotificationState.Error;
Notifications.ShowPopup("Order Execution", $"Order result: {result.Error}", state);

Kâr al veya Zarar durdur çıkışlarını onayla

cBot işleminizin kâr al veya zarar durdur nedeniyle kapandığında bildirim alın. Bir açılır pencere, kapanan pozisyondan elde edilen kâr veya zararla birlikte çıkış nedenini gösterir. Çıkış anındaki bu gerçek zamanlı geri bildirim, işlemleri takip etmenize ve aktif pozisyonlarınızın sonuçlarından haberdar olmanıza yardımcı olur.

1
2
3
4
5
6
protected override void OnPositionClosed(PositionClosedEventArgs args)
{
    var pos = args.Position;
    var reason = pos.ClosingReason.ToString();
    Notifications.ShowPopup("Position Closed", $"Closed due to {reason}. PnL: {pos.GrossProfit}", PopupNotificationState.Information);
}

Takip eden zarar durdur değişikliklerini izle

Takip eden zarar durdur, pozisyonunuz için zarar durdur seviyesini her güncellediğinde bir açılır pencere görün. Bildirim, yeni zarar durdur değerini içerir ve takip eden zarar durdurun fiyat hareketini nasıl izlediğini gösterir. Bu uyarılar, herhangi bir panel açmadan işlem korumanızın nasıl ayarlandığını izlemenizi sağlar.

1
2
3
4
5
6
7
protected override void OnPositionModified(PositionModifiedEventArgs args)
{
    if (args.Reason == PositionModificationReason.TrailingStop)
    {
        Notifications.ShowPopup("Trailing Stop Moved", $"New SL: {args.Position.StopLoss}", PopupNotificationState.Information);
    }
}

Risk ve kural tabanlı uyarılar

Düşük marj seviyeleri hakkında uyar

Hesabınızın marj seviyesi kritik bir eşiğin (örn. %80) altına düştüğünde bir açılır uyarı alın. Uyarı, zorunlu tasfiyeyi veya marj tamamlama çağrısını önlemek için pozisyonları kapatma veya fon ekleme gibi zamanında önlem almanıza yardımcı olur. Açılır pencere, gerçek zamanlı risk verilerine dayalı otomatik bir koruma görevi görür.

1
2
3
4
5
6
7
protected override void OnTick()
{
    if (Account.MarginLevel < 80)
    {
        Notifications.ShowPopup("Low Margin Warning", $"Current margin level: {Account.MarginLevel:0.00}%", PopupNotificationState.Error);
    }
}

Engellenen işlemler için uyarıları göster

Bazı cBot'lar, düşük net varlık veya aşırı düşüş gibi dahili güvenlik kuralları tetiklendiğinde işlem yapmayı durduracak şekilde programlanmıştır. Bir açılır pencere, engellemeyi açıklayabilir ve hangi koşulun ihlal edildiğini gösterebilir. Bu bildirim, bir sinyalin neden atlandığını anlamanızı sağlar ve disiplinli strateji davranışını pekiştirir.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
protected override void OnBar()
{
    if (Account.Equity < 100)
    {
        Notifications.ShowPopup("Trade Blocked", "Equity too low to place trade", PopupNotificationState.Error);
        return;
    }

    ExecuteMarketOrder(TradeType.Sell, SymbolName, 1000);
}

İlerleme ve tanılama

Açılır pencerelerle analiz ilerlemesini göster

Veri doğrulama veya geriye dönük test için hazırlık gibi uzun süreli bir sürecin başlangıcını belirtmek için bir InProgress açılır penceresi kullanın. İşlem tamamlandığında, açılır pencereyi bir Success veya Error durumuna güncelleyin. Görüntülenen ilerleme raporu, günlükleri veya hata ayıklama mesajlarını kontrol etmenize gerek kalmadan sizi bilgilendirir.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
private PopupNotification _progressPopup;

protected override void OnStart()
{
    _progressPopup = Notifications.ShowPopup("Analysis Started", "Running analysis...", PopupNotificationState.InProgress);
    Timer.Start(4); // Simulate 4-second task
}

protected override void OnTimer()
{
    _progressPopup.Complete(PopupNotificationState.Success);
    Timer.Stop();
}

Manuel işlem yapma etkileşimleri

Düğmeyle tetiklenen işlemlerden sonra kullanıcıları bilgilendir

Özel bir denetime veya düğmeye tıkladıktan sonra, cBot'unuz bir emir verebilir ve sonucu hemen bir açılır pencerede gösterebilir. Bildirim, manuel eyleminizin başarılı olup olmadığını onaylar ve broker tarafından döndürülen herhangi bir hatayı görüntüler. Bu görsel geri bildirim, tahmini azaltır ve manuel müdahalelere olan güveninizi artırır.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
protected override void OnStart()
{
    var panel = new StackPanel();
    var button = new Button { Text = "Manual Buy" };

    button.Click += args =>
    {
        var result = ExecuteMarketOrder(TradeType.Buy, SymbolName, 1000);
        var status = result.IsSuccessful ? PopupNotificationState.Success : PopupNotificationState.Error;
        Notifications.ShowPopup("Manual Trade", $"Buy order result: {result.Error}", status);
    };

    panel.AddChild(button);
    Chart.AddControl(panel);
}

Manuel geçersiz kılmalar veya müdahaleler hakkında uyar

Otomatik mantığı geçersiz kıldığınızda veya manuel bir geçersiz kılma gerçekleştirdiğinizde (örn. engellenmiş bir durumda bir işlemi zorla gerçekleştirme), bir açılır pencere eylemi onaylayabilir.

1
2
3
4
5
button.Click += args =>
{
    Notifications.ShowPopup("Manual Override", "User manually triggered a trade", PopupNotificationState.Information);
    ExecuteMarketOrder(TradeType.Sell, SymbolName, 1000);
};

Piyasa olayları ve sinyal uyarıları

Sinyal göstergesi geçişleri

Moving Averages geçişleri veya RSI eşikleri gibi önemli teknik olayları izleyin ve bunlar meydana geldiğinde bir açılır pencere uyarısı gösterin. Bildirim, göstergeyi ve boğa geçişi gibi karşılanan koşulu vurgular. Bu, teknik sinyaller hakkında sizi bilgilendirir ve stratejinizi daha şeffaf ve izlenebilir hâle getirir.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
private MovingAverage _fast, _slow;

protected override void OnStart()
{
    _fast = Indicators.MovingAverage(MarketSeries.Close, 5, MovingAverageType.Exponential);
    _slow = Indicators.MovingAverage(MarketSeries.Close, 20, MovingAverageType.Exponential);
}

protected override void OnBar()
{
    int i = MarketSeries.Close.Count - 1;
    if (_fast.Result[i] > _slow.Result[i] && _fast.Result[i - 1] <= _slow.Result[i - 1])
    {
        Notifications.ShowPopup("MA Crossover", "Fast MA crossed above Slow MA", PopupNotificationState.Information);
    }
}

Seans açılışlarını veya fiyat sıçramalarını uyar

Londra işlem seansının açılması veya kısa bir süre içinde hızlı bir fiyat hareketi gibi önemli piyasa olayları meydana geldiğinde tetiklenen açılır pencereler oluşturun. Bu bildirimler, durumsal farkındalık araçları olarak işlev görür ve potansiyel oynaklığa tepki vermenize veya piyasa faaliyetlerine hazırlanmanıza yardımcı olur.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
protected override void OnBar()
{
    var time = Server.Time;
    if (time.TimeOfDay.Hours == 8 && time.TimeOfDay.Minutes == 0)
    {
        Notifications.ShowPopup("London Session Open", "London market has opened", PopupNotificationState.Information);
    }

    if (Math.Abs(Symbol.Bid - Symbol.Ask) / Symbol.PipSize > 15)
    {
        Notifications.ShowPopup("Spread Spike", "Spread exceeded 15 pips!", PopupNotificationState.Warning);
    }
}

Strateji hata ayıklama ve şeffaflık

Strateji adımlarını görsel olarak izle

Stratejinizin mantıksal akışını göstermek için bir dizi açılır pencere kullanın. Örneğin, trendi kontrol ederken, bir sinyali onaylarken veya riski doğrularlarken bir mesaj görüntüleyin. Her açılır pencere belirli bir kontrol noktasını temsil eder ve stratejinin gerçek zamanlı olarak nasıl karar verdiğini takip etmenizi sağlar.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
protected override void OnBar()
{
    Notifications.ShowPopup("Step 1", "Checking market condition", PopupNotificationState.Information);

    if (MarketSeries.Close.Last(1) > MarketSeries.Open.Last(1))
    {
        Notifications.ShowPopup("Step 2", "Bullish candle detected", PopupNotificationState.Information);
    }

    Notifications.ShowPopup("Step 3", "Trade logic complete", PopupNotificationState.Success);
}

Mantık hatalarını veya beklenmeyen verileri raporla

Stratejiniz bir hatayla veya geçersiz verilerle (örn. fiyat uyuşmazlığı veya kullanılamayan bir gösterge) karşılaştığında, tam sorunu göstermek için bir açılır pencere kullanın. Bu kurulum, geliştirme ve demo/canlı işlem sırasında hataları veya veri boşluklarını belirlemenize yardımcı olarak daha hızlı hata ayıklama ve daha esnek bir mantık sağlar.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
protected override void OnBar()
{
    try
    {
        // Assume some strategy logic
        if (Symbol.Bid < 0) throw new Exception("Invalid price feed");

        Notifications.ShowPopup("Logic OK", "Price validation passed", PopupNotificationState.Success);
    }
    catch (Exception ex)
    {
        Notifications.ShowPopup("Logic error", ex.Message, PopupNotificationState.Error);
    }
}