Zum Inhalt

Custom Frame Sample

Übersicht

Das Custom Frame Sample-Plugin ermöglicht eine grundlegende Frame-Verwaltung innerhalb der cTrader-Charting-Oberfläche. Es steuert, wie benutzerdefinierte Frames auf dem Chart erscheinen, und bietet eine einfache Möglichkeit, visuelle Elemente zu organisieren und Ihren Workspace durch die folgenden Hauptfunktionen anzupassen:

  • Fügt mit einem einzigen Klick einen benutzerdefinierten Frame zur Chart-Oberfläche hinzu.
  • Löst den Frame ab oder fügt ihn wieder an, um Multi-Screen-Layouts und flexible Workspace-Konfigurationen zu unterstützen.
  • Entfernt den Frame, wenn er nicht mehr benötigt wird, um den Chartbereich übersichtlich und fokussiert zu halten.
  • Zeigt einen benutzerdefinierten Textblock innerhalb des Frames an, um die Echtzeit-Chart-Anpassung und visuelles Feedback zu unterstützen.

Dieses Plugin erstellt eine einfache Oberfläche im Bereich eines aktiven Symbols, mit der Sie einen benutzerdefinierten Chart-Frame hinzufügen, entfernen, anhängen oder ablösen können. Jede Schaltfläche löst eine bestimmte Aktion aus, wodurch die Verwaltung visueller Elemente direkt auf dem Chart erleichtert wird. Das Plugin läuft nur, während cTrader Windows oder Mac geöffnet ist, und stoppt automatisch, wenn die Plattform geschlossen wird.

Plugin-Erstellung

Erfahren Sie, wie Sie Plugins erstellen, entweder mit C# oder Python, in unseren schrittweisen Anleitungen.

Der Code des Custom Frame Sample-Plugins ist in unseren öffentlichen C#- und Python-Repositorys verfügbar. Derselbe Code wird als Vorlage im Algorithmen-Erstellungsassistenten in cTrader Windows oder Mac bereitgestellt, oder Sie können einfach den folgenden Ausschnitt kopieren und verwenden:

 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
using System.Linq; 
using cAlgo.API;

namespace cAlgo.Plugins
{
    [Plugin(AccessRights = AccessRights.None)]
    public class CustomFrameSample : Plugin
    {
        protected override void OnStart()
        {
            var aspBlock = Asp.SymbolTab.AddBlock("Custom Frame Sample");

            var panel = new StackPanel();

            var addCustomFrameButton = new Button { Text = "Add Custom Frame", Margin = 5 };
            addCustomFrameButton.Click += OnAddCustomFrameButtonClick;
            panel.AddChild(addCustomFrameButton);

            var removeCustomFrameButton = new Button { Text = "Remove Custom Frame", Margin = 5 };
            removeCustomFrameButton.Click += OnRemoveCustomFrameButtonClick;
            panel.AddChild(removeCustomFrameButton);

            var detachCustomFrameButton = new Button { Text = "Detach Custom Frame", Margin = 5 };
            detachCustomFrameButton.Click += OnDetachCustomFrameButtonClick;
            panel.AddChild(detachCustomFrameButton);

            var attachCustomFrameButton = new Button { Text = "Attach Custom Frame", Margin = 5 };
            attachCustomFrameButton.Click += OnAttachCustomFrameButtonClick;
            panel.AddChild(attachCustomFrameButton);

            aspBlock.Child = panel;
        }

        private void OnAttachCustomFrameButtonClick(ButtonClickEventArgs obj)
        {
            if (ChartManager.OfType<CustomFrame>().FirstOrDefault(c => !c.IsAttached) is not {} customFrame)
                return;

            customFrame.Attach();
        }

        private void OnDetachCustomFrameButtonClick(ButtonClickEventArgs obj)
        {
            if (ChartManager.OfType<CustomFrame>().FirstOrDefault(c => c.IsAttached) is not {} customFrame)
                return;

            customFrame.Detach();
        }

        private void OnRemoveCustomFrameButtonClick(ButtonClickEventArgs obj)
        {
            if (ChartManager.OfType<CustomFrame>().FirstOrDefault() is not {} customFrame)
                return;

            ChartManager.RemoveFrame(customFrame.Id);
        }

        private void OnAddCustomFrameButtonClick(ButtonClickEventArgs obj)
        {
            var customFrame = ChartManager.AddCustomFrame("Custom Frame");

            customFrame.Child = new TextBlock
            {
                Text = $"Custom Frame {customFrame.Id} Child Control",
                FontSize = 32,
                HorizontalAlignment = HorizontalAlignment.Center,
                VerticalAlignment = VerticalAlignment.Center
            };
        }
    }        
}
 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
import clr
clr.AddReference("cAlgo.API")

from cAlgo.API import *

class CustomFrameSample():
    def on_start(self):
        aspBlock = api.Asp.SymbolTab.AddBlock("Custom Frame Sample");

        panel = StackPanel()

        addCustomFrameButton = Button()
        addCustomFrameButton.Text = "Add Custom Frame"
        addCustomFrameButton.Margin = Thickness(5)    
        addCustomFrameButton.Click += self.on_add_custom_frame_button_click

        panel.AddChild(addCustomFrameButton)

        removeCustomFrameButton = Button()
        removeCustomFrameButton.Text = "Remove Custom Frame"
        removeCustomFrameButton.Margin = Thickness(5) 
        removeCustomFrameButton.Click += self.on_remove_custom_frame_button_click

        panel.AddChild(removeCustomFrameButton)

        detachCustomFrameButton = Button()
        detachCustomFrameButton.Text = "Detach Custom Frame"
        detachCustomFrameButton.Margin = Thickness(5) 
        detachCustomFrameButton.Click += self.on_detach_custom_frame_button_click

        panel.AddChild(detachCustomFrameButton);

        attachCustomFrameButton = Button()
        attachCustomFrameButton.Text = "Attach Custom Frame"
        attachCustomFrameButton.Margin = Thickness(5) 
        attachCustomFrameButton.Click += self.on_attach_custom_frame_button_click

        panel.AddChild(attachCustomFrameButton)

        aspBlock.Child = panel

    def on_add_custom_frame_button_click(self, args):
        customFrame = api.ChartManager.AddCustomFrame("Custom Frame");

        textBlock = TextBlock()
        textBlock.Text = f"Custom Frame {customFrame.Id} Child Control"
        textBlock.FontSize = 32
        textBlock.HorizontalAlignment = HorizontalAlignment.Center
        textBlock.VerticalAlignment = VerticalAlignment.Center

        customFrame.Child = textBlock

    def on_remove_custom_frame_button_click(self, args):
        for frame in api.ChartManager:
            if isinstance(frame.__implementation__, CustomFrame) == False:
                continue
            customFrame = CustomFrame(frame)
            api.ChartManager.RemoveFrame(customFrame.Id)
            break

    def on_detach_custom_frame_button_click(self, args):
        for frame in api.ChartManager:
            if isinstance(frame.__implementation__, CustomFrame) == False:
                continue
            customFrame = CustomFrame(frame)
            if customFrame.IsAttached == False:
                continue
            customFrame.Detach()
            break

    def on_attach_custom_frame_button_click(self, args):
        for frame in api.ChartManager:
            if isinstance(frame.__implementation__, CustomFrame) == False:
                continue
            customFrame = CustomFrame(frame)
            if customFrame.IsAttached == True:
                continue
            customFrame.Attach()
            break

Anpassungsoptionen

Custom Frame Sample enthält Steuerschaltflächen, mit denen Sie einen benutzerdefinierten Frame direkt auf dem Chart hinzufügen, entfernen und mit ihm interagieren können. Die folgende Tabelle beschreibt seine Hauptkomponenten und deren Funktionen:

Parameter Beschreibung Mögliche Werte
panel Fügt Schaltflächen für zusätzliche Frame-Aktionen oder UI-Optionen hinzu oder ordnet sie neu an. stackpanel [panel]
Text Bearbeitet den Schaltflächentext zur Verdeutlichung. Add custom frame, Remove custom frame, Detach custom frame, Attach custom frame
Margin Ändert Ränder für visuelles Gleichgewicht. 5, 8, 12 usw.
AddCustomFrame Ändert den Frame-Titel, um Zweck oder Symbol widerzuspiegeln. chartmanager.addcustomframe(Custom frame)
TextBlock.Text Ändert die Nachricht, um Kontext oder Kennung widerzuspiegeln. Custom frame sample
FontSize Passt die Größe für Klarheit und Layout-Anpassung an. 32, 36, 40 usw.
HorizontalAlignment Passt die Ausrichtung an, um die horizontale Inhaltspräsentation zu ändern. horizontalalignment.center
VerticalAlignment Passt die Ausrichtung an, um die vertikale Inhaltspräsentation zu ändern. verticalalignment.center
Attach() Fügt eine Nachricht hinzu, wenn der Frame wieder am Chart angehängt wird. customframe.attach()
Detach() Fügt eine Nachricht hinzu, wenn der Frame vom Chart abgelöst wird. customframe.detach()
RemoveFrame Benennt die Schaltfläche um, um ihren Zweck widerzuspiegeln. chartmanager.removeframe(customframe.id)

Anwendungsfälle

Custom Frame Sample ermöglicht die interaktive Chart-Verwaltung, ohne dass externe Dienste erforderlich sind. Die folgenden Anwendungsfälle zeigen, wie das Plugin das Handelserlebnis verbessern kann.

Anwendungsfall Szenario Wert
Handelssignale hervorheben Fügen Sie einen Frame mit einer Nachricht wie Achten Sie auf Ausbruch bei EURUSD hinzu. Lenkt die Aufmerksamkeit auf chartspezifische Warnungen oder Benutzernotizen.
Multi-Screen-Verwaltung Lösen Sie Frames ab und verschieben Sie sie auf andere Bildschirme. Erweitert die Chart-Sichtbarkeit und unterstützt Multi-Screen-Handelssetups.
Benutzerdefinierte Workspace-Organisation Organisieren Sie den Chartbereich mithilfe von Frames, um ihn an Ihren persönlichen Handelsworkflow anzupassen. Hilft Ihnen, den Chartbereich basierend auf Ihrem persönlichen Handelsworkflow zu organisieren.
Benutzerdefinierte visuelle Markierungen Fügen Sie manuell Frames mit Notizen hinzu, um Chart-Ereignisse wie Ordereinträge hervorzuheben. Bietet eine flexible Möglichkeit, wichtige Punkte auf dem Chart zu kennzeichnen, ohne permanente Zeichnungen.

Zusammenfassung

Dieses Plugin bietet eine praktische Möglichkeit, benutzerdefinierte Frames direkt auf cTrader-Charts zu verwalten. Mit einfachen Steuerelementen zum Hinzufügen, Entfernen, Anhängen oder Ablösen von Frames hilft es Ihnen, Ihren Workspace zu personalisieren, wichtige Informationen hervorzuheben und Chart-Layouts einfach zu organisieren.

Weitere Entwicklungsdetails finden Sie in unserer Plugin-Dokumentation.