ข้ามไปที่เนื้อหา

การแจ้งเตือนที่กำหนดเอง

API การแจ้งเตือนที่กำหนดเองรวมถึงประเภทที่ช่วยให้อัลกอริทึมการเทรดสามารถส่งการแจ้งเตือนแบบป๊อปอัพแบบเรียลไทม์โดยตรงใน cTrader ป๊อปอัพเหล่านี้ช่วยให้ cBots อินดิเคเตอร์ และปลั๊กอินสามารถสื่อสารความคืบหน้า ความสำเร็จ ข้อผิดพลาด หรือข้อมูลทั่วไปให้ผู้ใช้เห็นได้และตามบริบท

ด้วยการรองรับ API การแจ้งเตือนที่กำหนดเอง cBots ไม่จำเป็นต้องพึ่งพาแท็บ บันทึก วัตถุในแผนภูมิ หรือบริดจ์ Telegram ภายนอกสำหรับการสื่อสารอีกต่อไป Algos เพียงแค่บอกนักเทรดว่าเกิดอะไรขึ้นโดยตรงผ่านระบบการแจ้งเตือนมาตรฐานใน cTrader นักพัฒนาอัลกอริทึมและผู้ใช้ได้รับประโยชน์จากความเร็ว ความน่าเชื่อถือ และความชัดเจนโดยไม่ต้องตั้งค่าที่ซับซ้อน

อินเทอร์เฟซ API ที่เกี่ยวข้องรวมถึง:

  • INotifications.ShowPopup(caption, message, state) เพื่อแสดงการแจ้งเตือนแบบป๊อปอัพพร้อมหัวข้อ ข้อความ และสถานะที่กำหนด (PopupNotificationState)
  • อินเทอร์เฟซ PopupNotification สำหรับการควบคุมการแจ้งเตือนที่ทำงานเป็นเวลานานหรือแบบก้าวหน้าโดยเรียกใช้ .Complete() เพื่ออัปเดตสถานะสุดท้าย

ข้อความที่ส่งโดย API การแจ้งเตือนที่กำหนดเองจะปรากฏขึ้นทันที มีรหัสสีตามสถานะ และสามารถเสร็จสิ้นในภายหลังได้ สถานะการแจ้งเตือนถูกกำหนดโดยใช้ enum PopupNotificationState:

  • InProgress เพื่อแสดงถึงกระบวนการที่ทำงานเป็นเวลานานหรือสถานะที่รอดำเนินการ ตัวอย่าง:

  • Success เพื่อบ่งชี้ว่าการดำเนินการเสร็จสมบูรณ์ ตัวอย่าง:

  • Error เพื่อแจ้งความล้มเหลวหรือข้อยกเว้น ตัวอย่าง:

  • Partial เพื่อสื่อสารผลลัพธ์ที่สำเร็จบางส่วน (เช่น คำสั่งบางรายการสำเร็จ) ตัวอย่าง:

  • Information สำหรับการแจ้งเตือนทั่วไป การอัปเดต หรือข้อเสนอแนะ ตัวอย่าง:

เคล็ดลับ

ใช้การแจ้งเตือนแบบป๊อปอัพเพื่อติดตามกิจกรรมการเทรด ดีบักลำดับการทำงานตรรกะ แจ้งเตือนผู้ใช้เกี่ยวกับเหตุการณ์ในตลาดหรือข้อผิดพลาดของข้อมูล และส่งข้อเสนอแนะ UI แบบไดนามิกระหว่างการดำเนินการกลยุทธ์แบบสดหรือด้วยตนเอง

วัตถุ API การแจ้งเตือนสามารถใช้เพื่อทำสิ่งต่อไปนี้:

ฟีเจอร์หรือการดำเนินการ ตัวอย่าง
การติดตามและข้อเสนอแนะของคำสั่ง แสดงข้อเสนอแนะการดำเนินการคำสั่ง
ยืนยันการออกจาก TP/SL
ติดตามการแก้ไข Trailing Stop
การแจ้งเตือนตามความเสี่ยงและกฎ เตือนเกี่ยวกับระดับมาร์จิ้นต่ำ
แสดงการแจ้งเตือนสำหรับการเทรดที่ถูกบล็อก
ความคืบหน้าและการวินิจฉัย แสดงความคืบหน้าการวิเคราะห์ด้วยป๊อปอัพ
การโต้ตอบการเทรดด้วยตนเอง ให้ข้อเสนอแนะสำหรับการดำเนินการเทรด
เตือนเกี่ยวกับการแทรกแซงด้วยตนเองหรือการแทรกแซง
เหตุการณ์ในตลาดและการแจ้งเตือนสัญญาณ แจ้งสัญญาณการตัดกันของอินดิเคเตอร์
ประกาศการเปิดเซสชันหรือการพุ่งขึ้นของราคา
การดีบักกลยุทธ์และความโปร่งใส ติดตามขั้นตอนกลยุทธ์/ตรรกะด้วยภาพ
รายงานความล้มเหลวของตรรกะ

ตัวอย่างพื้นฐาน

เมื่อเพิ่มอินสแตนซ์ของ 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);

ยืนยันการออกจาก TP หรือ SL

รับการแจ้งเตือนเมื่อการเทรด cBot ของคุณออกเนื่องจาก Take-profit หรือ Stop-loss ป๊อปอัพจะแสดงเหตุผลการออกพร้อมกับกำไรหรือขาดทุนจากโพสิชันที่ปิด ข้อเสนอแนะแบบเรียลไทม์นี้ในขณะที่ออกช่วยให้คุณติดตามการเทรดและอัปเดตผลลัพธ์ของโพสิชันที่ใช้งานอยู่ของคุณ

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

ติดตามการแก้ไข Trailing Stop

ดูป๊อปอัพทุกครั้งที่ Trailing Stop อัปเดต Stop Loss สำหรับโพสิชันของคุณ การแจ้งเตือนจะรวมค่า Stop-Loss ใหม่และแสดงวิธีที่ Trailing Stop ติดตามการเคลื่อนไหวของราคา การแจ้งเตือนเหล่านี้ช่วยให้คุณสามารถตรวจสอบวิธีการปรับการป้องกันการเทรดของคุณโดยไม่ต้องเปิดแผงใดๆ

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

แสดงการแจ้งเตือนสำหรับการเทรดที่ถูกบล็อก

cBot บางตัวถูกตั้งโปรแกรมให้หยุดการวางเทรดเมื่อกฎความปลอดภัยภายใน เช่น อิควิตี้ต่ำหรือการขาดทุนสูงเกินไป ถูกเรียกใช้ ป๊อปอัพสามารถอธิบายการบล็อกและแสดงให้คุณเห็นว่าเงื่อนไขใดถูกละเมิด การแจ้งเตือนนี้ช่วยให้คุณเข้าใจว่าทำไมสัญญาณจึงถูกข้ามไปและเสริมสร้างพฤติกรรมกลยุทธ์ที่มีวินัย

 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 เพื่อแสดงการเริ่มต้นของกระบวนการที่ใช้เวลานาน เช่น การตรวจสอบข้อมูลหรือการเตรียมการสำหรับ backtesting เมื่อการดำเนินการเสร็จสิ้น ให้อัปเดตป๊อปอัพเป็นสถานะ 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();
}

การโต้ตอบการเทรดด้วยตนเอง

แจ้งเตือนผู้ใช้หลังจากการเทรดที่เรียกใช้ด้วยปุ่ม

หลังจากที่คุณคลิกที่ควบคุมหรือปุ่มที่กำหนดเอง cBot ของคุณสามารถวางคำสั่งและแสดงป๊อปอัพพร้อมผลลัพธ์ได้ทันที การแจ้งเตือนยืนยันว่าการดำเนินการด้วยตนเองของคุณสำเร็จหรือล้มเหลวและแสดงข้อผิดพลาดใดๆ ที่ส่งกลับมาจากโบรกเกอร์ การตอบสนองด้วยภาพนี้ช่วยลดการคาดเดาและเพิ่มความมั่นใจในการแทรกแซงด้วยตนเองของคุณ

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

เหตุการณ์ในตลาดและการแจ้งเตือนสัญญาณ

สัญญาณการตัดกันของอินดิเคเตอร์

ติดตามเหตุการณ์ทางเทคนิคที่สำคัญ เช่น การตัดกันของค่าเฉลี่ยเคลื่อนที่หรือเกณฑ์ RSI และแสดงการแจ้งเตือนป๊อปอัพเมื่อเกิดขึ้น การแจ้งเตือนเน้นอินดิเคเตอร์และเงื่อนไขที่เป็นไปตามนั้น เช่น การตัดกันแบบขาขึ้น สิ่งนี้ช่วยให้คุณทราบถึงสัญญาณทางเทคนิคและทำให้กลยุทธ์ของคุณโปร่งใสและติดตามได้มากขึ้น

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