Lewati ke isi

Notifikasi kustom

API notifikasi kustom mencakup tipe yang memungkinkan algoritma trading untuk mengirimkan peringatan popup real-time langsung di cTrader. Popup ini memungkinkan cBot, indikator, dan plugin untuk mengomunikasikan kemajuan, keberhasilan, kesalahan, atau informasi umum kepada pengguna secara visual dan kontekstual.

Dengan dukungan API notifikasi kustom, cBot tidak lagi harus bergantung pada tab Log, objek grafik, atau jembatan Telegram eksternal untuk komunikasi. Algo cukup memberi tahu trader apa yang sedang terjadi secara langsung melalui sistem notifikasi standar di cTrader. Pengembang dan pengguna algoritma mendapatkan manfaat dari kecepatan, keandalan, dan kejelasan tanpa pengaturan yang rumit.

Antarmuka API yang relevan meliputi:

  • INotifications.ShowPopup(caption, message, state) untuk menampilkan notifikasi popup dengan judul, pesan, dan status tertentu (PopupNotificationState).
  • Antarmuka PopupNotification untuk kontrol terprogram atas notifikasi yang berjalan lama atau progresif dengan memanggil .Complete() untuk memperbarui status akhirnya.

Pesan yang dikirimkan oleh API notifikasi kustom muncul secara instan, diberi kode warna berdasarkan status, dan dapat diselesaikan nanti. Status notifikasi didefinisikan menggunakan enum PopupNotificationState:

  • InProgress untuk mewakili proses yang berjalan lama atau status tertunda. Contoh:

  • Success untuk menunjukkan bahwa operasi berhasil diselesaikan. Contoh:

  • Error untuk menandakan kegagalan atau pengecualian. Contoh:

  • Partial untuk mengomunikasikan hasil yang berhasil sebagian (misalnya beberapa order berhasil). Contoh:

  • Information untuk peringatan umum, pembaruan, atau umpan balik. Contoh:

Tip

Gunakan notifikasi popup untuk melacak aktivitas trading, debug alur logika, memberi tahu pengguna tentang peristiwa pasar atau kesalahan data, dan memberikan umpan balik UI dinamis selama operasi strategi langsung atau manual.

Objek API Notifikasi dapat digunakan untuk melakukan hal berikut:

Fitur atau operasi Contoh
Pelacakan dan umpan balik order Menampilkan umpan balik eksekusi order
Mengonfirmasi keluar TP/SL
Melacak modifikasi trailing stop
Peringatan berbasis risiko dan aturan Peringatkan tentang level margin rendah
Tampilkan peringatan untuk trading yang diblokir
Kemajuan dan diagnostik Tampilkan kemajuan analisis dengan popup
Interaksi trading manual Berikan umpan balik untuk tindakan trading
Peringatkan tentang penggantian atau intervensi manual
Peristiwa pasar dan peringatan sinyal Sinyal perpotongan indikator
Umumkan pembukaan sesi atau lonjakan harga
Debugging dan transparansi strategi Lacak langkah-langkah strategi/logika secara visual
Laporkan kegagalan logika

Contoh dasar

Ketika sebuah instance cBot ini ditambahkan ke grafik, ia menyediakan lima tombol, satu untuk setiap status notifikasi. Mengeklik tombol akan memicu notifikasi popup.

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

Pelacakan dan umpan balik order

Tampilkan umpan balik eksekusi order

Gunakan notifikasi popup untuk segera melihat apakah order pasar Anda berhasil atau tidak. Misalnya, setelah cBot Anda menempatkan order beli, ia menampilkan popup sukses jika trading Anda terisi atau popup error jika broker Anda menolaknya.

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

Konfirmasi keluar TP atau SL

Dapatkan notifikasi ketika trading cBot Anda keluar karena Take Profit atau Stop Loss. Sebuah popup menampilkan alasan keluar beserta keuntungan atau kerugian dari posisi yang ditutup. Umpan balik real-time pada saat keluar ini membantu Anda melacak trading dan tetap up to date dengan hasil posisi aktif Anda.

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

Lacak modifikasi trailing stop

Lihat popup setiap kali trailing stop memperbarui Stop Loss untuk posisi Anda. Notifikasi tersebut mencakup nilai Stop Loss baru dan menunjukkan bagaimana trailing stop melacak pergerakan harga. Peringatan ini memungkinkan Anda memantau bagaimana proteksi trading Anda menyesuaikan diri tanpa membuka panel apa pun.

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

Peringatan berbasis risiko dan aturan

Peringatkan tentang level margin rendah

Terima peringatan popup ketika level margin akun Anda turun di bawah ambang batas kritis (misalnya 80%). Peringatan ini membantu Anda mengambil tindakan tepat waktu, seperti menutup posisi atau menambahkan dana, untuk menghindari likuidasi paksa atau margin call. Popup bertindak sebagai pengaman otomatis berdasarkan data risiko real-time.

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

Tampilkan peringatan untuk trading yang diblokir

Beberapa cBot diprogram untuk berhenti menempatkan trading ketika aturan keamanan internal, seperti ekuitas rendah atau drawdown berlebihan, terpicu. Sebuah popup dapat menjelaskan pemblokiran dan menunjukkan kepada Anda kondisi mana yang dilanggar. Notifikasi ini memastikan Anda memahami mengapa sinyal dilewati dan memperkuat perilaku strategi yang disiplin.

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

Kemajuan dan diagnostik

Tampilkan kemajuan analisis dengan popup

Gunakan popup InProgress untuk menunjukkan awal proses yang berjalan lama, seperti validasi data atau persiapan untuk back testing. Setelah operasi selesai, perbarui popup ke status Success atau Error. Laporan kemajuan yang ditampilkan membuat Anda tetap terinformasi tanpa perlu memeriksa log atau pesan debug.

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

Interaksi trading manual

Beri tahu pengguna setelah trading yang dipicu tombol

Setelah Anda mengeklik kontrol atau tombol kustom, cBot Anda dapat menempatkan order dan segera menampilkan popup dengan hasilnya. Notifikasi mengonfirmasi apakah tindakan manual Anda berhasil atau gagal dan menampilkan error apa pun yang dikembalikan oleh broker. Umpan balik visual ini mengurangi tebak-tebakan dan meningkatkan kepercayaan Anda dalam intervensi manual.

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

Peringatkan tentang penggantian atau intervensi manual

Ketika Anda mengganti logika otomatis atau melakukan penggantian manual (misalnya memaksa trading selama keadaan terblokir), sebuah popup dapat mengakui tindakan tersebut.

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

Peristiwa pasar dan peringatan sinyal

Sinyal perpotongan indikator

Pantau peristiwa teknis utama seperti perpotongan moving average atau ambang batas RSI dan tampilkan peringatan popup ketika terjadi. Notifikasi menyoroti indikator dan kondisi yang terpenuhi, seperti perpotongan bullish. Ini membuat Anda tetap terinformasi tentang sinyal teknis dan membuat strategi Anda lebih transparan dan dapat dilacak.

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

Peringatkan pembukaan sesi atau lonjakan harga

Buat popup yang terpicu ketika peristiwa pasar penting terjadi, seperti pembukaan sesi London atau pergerakan harga yang cepat dalam periode singkat. Notifikasi ini bertindak sebagai alat kesadaran situasional dan membantu Anda bereaksi terhadap potensi volatilitas atau bersiap untuk aktivitas pasar.

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

Debugging dan transparansi strategi

Lacak langkah-langkah strategi secara visual

Gunakan urutan popup untuk menunjukkan alur logis strategi Anda. Misalnya, tampilkan pesan saat memeriksa tren, mengonfirmasi sinyal atau memvalidasi risiko. Setiap popup mewakili titik pemeriksaan tertentu, yang memungkinkan Anda mengikuti bagaimana strategi membuat keputusan secara real-time.

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

Laporkan kegagalan logika atau data yang tidak terduga

Ketika strategi Anda mengalami error atau data tidak valid, seperti ketidakcocokan harga atau indikator yang tidak tersedia, gunakan popup untuk menunjukkan masalah yang tepat. Pengaturan ini membantu Anda mengidentifikasi bug atau kesenjangan data selama pengembangan dan trading demo/live, menghasilkan debugging yang lebih cepat dan logika yang lebih tangguh.

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