انتقل إلى المحتوى

الإشعارات المخصصة

تتضمن واجهة برمجة التطبيقات للإشعارات المخصصة أنواعًا تمكّن خوارزميات التداول من تقديم تنبيهات منبثقة في الوقت الفعلي مباشرة في cTrader. تسمح هذه النوافذ المنبثقة لخوارزميات cBot والمؤشرات والإضافات بالتواصل مع المستخدمين بصريًا وسياقيًا حول التقدم والنجاح والأخطاء أو المعلومات العامة.

مع دعم واجهة برمجة التطبيقات للإشعارات المخصصة، لم تعد خوارزميات cBot بحاجة إلى الاعتماد على علامة تبويب السجل أو كائنات الرسم البياني أو جسور Telegram الخارجية للتواصل. تخبر الخوارزميات المتداولين ببساطة بما يحدث مباشرة عبر نظام الإشعارات القياسي في cTrader. يستفيد مطورو الخوارزميات والمستخدمون من السرعة والموثوقية والوضوح دون أي إعدادات معقدة.

تشمل واجهات برمجة التطبيقات ذات الصلة ما يلي:

  • INotifications.ShowPopup(caption, message, state) لعرض إشعار منبثق بعنوان ورسالة وحالة معينة (PopupNotificationState).
  • واجهة PopupNotification للتحكم البرمجي في الإشعارات طويلة الأمد أو التدريجية عن طريق استدعاء .Complete() لتحديث حالتها النهائية.

تظهر الرسائل التي يتم تسليمها بواسطة واجهة برمجة التطبيقات للإشعارات المخصصة على الفور، وتكون مرمزة بالألوان حسب الحالة ويمكن إكمالها لاحقًا. يتم تحديد حالات الإشعار باستخدام التعداد PopupNotificationState:

  • InProgress لتمثيل العمليات طويلة الأمد أو الحالات المعلقة. مثال:

  • Success للإشارة إلى أن العملية قد اكتملت بنجاح. مثال:

  • Error للإشارة إلى فشل أو استثناء. مثال:

  • Partial للإبلاغ عن نتيجة ناجحة جزئيًا (على سبيل المثال، نجاح بعض الأوامر). مثال:

  • Information للتنبيهات العامة أو التحديثات أو الملاحظات. مثال:

نصيحة

استخدم الإشعارات المنبثقة لتتبع نشاط التداول، وتصحيح أخطاء تدفقات المنطق، وتنبيه المستخدمين بأحداث السوق أو أخطاء البيانات وتقديم ملاحظات واجهة المستخدم الديناميكية أثناء عمليات الاستراتيجية المباشرة أو اليدوية.

يمكن استخدام كائنات واجهة برمجة تطبيقات الإشعارات للقيام بما يلي:

الميزة أو العملية أمثلة
تتبع الأوامر وتقديم الملاحظات عرض ملاحظات تنفيذ الأوامر
تأكيد خروج TP/SL
تتبع تعديلات وقف الخسارة المتحرك
تنبيهات المخاطر والقواعد التحذير من مستويات الهامش المنخفضة
عرض تنبيهات للصفقات المحظورة
التقدم والتشخيص عرض تقدم التحليل باستخدام النوافذ المنبثقة
تفاعلات التداول اليدوي تقديم ملاحظات لإجراءات التداول
التحذير من التجاوزات اليدوية أو التدخلات
أحداث السوق وتنبيهات الإشارات الإشارة إلى تقاطعات المؤشرات
الإعلان عن افتتاحات الجلسات أو ارتفاعات الأسعار
تصحيح أخطاء الاستراتيجية والشفافية تتبع خطوات الاستراتيجية/المنطق بصريًا
الإبلاغ عن فشل المنطق

مثال أساسي

عند إضافة مثيل من خوارزمية cBot هذه إلى الرسم البياني، فإنها توفر خمسة أزرار، واحد لكل حالة إشعار. يؤدي النقر على زر إلى إظهار إشعار منبثق.

 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
        }
    }
}

تتبع الأوامر وتقديم الملاحظات

عرض ملاحظات تنفيذ الأوامر

استخدم الإشعارات المنبثقة لرؤية ما إذا كان أمر السوق الخاص بك ناجحًا أم لا على الفور. على سبيل المثال، بعد أن تضع خوارزمية cBot الخاصة بك أمر شراء، فإنها تظهر نافذة منبثقة للنجاح إذا تم تنفيذ صفقتك أو نافذة منبثقة للخطأ إذا رفضها وسيطك.

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

تأكيد الخروج بجني الأرباح أو إيقاف الخسارة

احصل على إشعار عندما يخرج تداول روبوت التداول الخاص بك بسبب جني الأرباح أو إيقاف الخسارة. تظهر نافذة منبثقة تبين سبب الخروج مع الربح أو الخسارة من المركز المغلق. تساعدك هذه التغذية الراجعة في الوقت الفعلي عند لحظة الخروج على تتبع التداولات والبقاء على اطلاع بنتائج مراكزك النشطة.

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

تتبع تعديلات إيقاف الخسارة المتحرك

شاهد نافذة منبثقة في كل مرة يقوم فيها إيقاف الخسارة المتحرك بتحديث إيقاف الخسارة لمركزك. يتضمن الإشعار قيمة إيقاف الخسارة الجديدة ويظهر كيف يتتبع إيقاف الخسارة المتحرك حركة السعر. تتيح لك هذه التنبيهات مراقبة كيفية تعديل حماية تداولك دون فتح أي لوحة.

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

تنبيهات المخاطرة والقواعد

التحذير من مستويات الهامش المنخفضة

تلقي تنبيه منبثق عندما ينخفض مستوى الهامش في حسابك إلى ما دون عتبة حرجة (مثل 80٪). يساعدك التحذير على اتخاذ إجراء في الوقت المناسب، مثل إغلاق المراكز أو إضافة الأموال، لتجنب التصفية القسرية أو نداء الهامش. تعمل النافذة المنبثقة كإجراء وقائي آلي بناءً على بيانات المخاطر في الوقت الفعلي.

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

عرض تنبيهات للتداولات المحظورة

تمت برمجة بعض روبوتات التداول للتوقف عن وضع التداولات عند تفعيل قواعد السلامة الداخلية، مثل انخفاض رأس المال أو السحب المفرط. يمكن لنافذة منبثقة أن تشرح الحظر وتظهر لك أي شرط تم انتهاكه. يضمن هذا الإشعار أنك تفهم سبب تخطي إشارة ويعزز سلوك الإستراتيجية المنضبط.

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

التقدم والتشخيص

إظهار تقدم التحليل بالنوافذ المنبثقة

استخدم نافذة منبثقة InProgress للإشارة إلى بدء عملية طويلة الأمد، مثل التحقق من صحة البيانات أو التحضير للاختبار العكسي. بمجرد اكتمال العملية، قم بتحديث النافذة المنبثقة إلى حالة Success أو Error. يبقيك تقرير التقدم المعروض على اطلاع دون الحاجة إلى التحقق من السجلات أو رسائل التصحيح.

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

تفاعلات التداول اليدوي

إخطار المستخدمين بعد التداولات التي تم تشغيلها بواسطة الأزرار

بعد النقر على عنصر تحكم مخصص أو زر، يمكن لروبوت التداول الخاص بك وضع أمر وإظهار نافذة منبثقة على الفور بالنتيجة. يؤكد الإشعار ما إذا كان إجراءك اليدوي قد نجح أو فشل ويعرض أي خطأ تم إرجاعه من قبل الوسيط. تقلل هذه التغذية الراجعة المرئية من التخمين وتحسن ثقتك في التدخلات اليدوية.

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

التحذير من التجاوزات أو التدخلات اليدوية

عندما تتجاوز المنطق الآلي أو تقوم بتجاوز يدوي (مثل فرض تداول أثناء حالة محظورة)، يمكن لنافذة منبثقة أن تقر بالإجراء.

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

أحداث السوق وتنبيهات الإشارة

إشارة تقاطعات المؤشر

راقب الأحداث الفنية الرئيسية مثل تقاطعات المتوسط المتحرك أو عتبات مؤشر القوة النسبية وأظهر تنبيهًا منبثقًا عند حدوثها. يسلط الإشعار الضوء على المؤشر والشرط الذي تم استيفاؤه، مثل التقاطع الصعودي. هذا يبقيك على اطلاع بالإشارات الفنية ويجعل إستراتيجيتك أكثر شفافية وقابلية للتتبع.

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

تنبيه فتح الجلسات أو ارتفاعات الأسعار

قم بإنشاء نوافذ منبثقة تُفعل عند حدوث أحداث سوقية مهمة، مثل افتتاح جلسة لندن أو حركة سعرية سريعة خلال فترة قصيرة. تعمل هذه الإشعارات كأدوات للوعي بالموقف وتساعدك على الاستجابة للتقلبات المحتملة أو الاستعداد لنشاط السوق.

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

تصحيح أخطاء الإستراتيجية والشفافية

تتبع خطوات الإستراتيجية بصريًا

استخدم سلسلة من النوافذ المنبثقة لإظهار التدفق المنطقي لإستراتيجيتك. على سبيل المثال، اعرض رسالة عند التحقق من الاتجاه، أو تأكيد إشارة أو التحقق من صحة المخاطرة. تمثل كل نافذة منبثقة نقطة تفتيش محددة، مما يتيح لك متابعة كيفية اتخاذ الإستراتيجية للقرارات في الوقت الفعلي.

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

الإبلاغ عن فشل المنطق أو البيانات غير المتوقعة

عندما تواجه إستراتيجيتك خطأ أو بيانات غير صالحة، مثل عدم تطابق السعر أو عدم توفر المؤشر، استخدم نافذة منبثقة لإظهار المشكلة بالضبط. يساعدك هذا الإعداد على تحديد الأخطاء أو فجوات البيانات أثناء التطوير والتداول التجريبي/الحي، مما يؤدي إلى تصحيح أسرع للأخطاء ومنطق أكثر مرونة.

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