Aller au contenu

Custom Frame Sample

Présentation

Le plug-in Custom Frame Sample permet une gestion de base des cadres au sein de l'interface graphique de cTrader. Il contrôle la façon dont les cadres personnalisés apparaissent sur le graphique, offrant un moyen simple d'organiser les éléments visuels et d'adapter votre espace de travail grâce aux fonctionnalités clés suivantes :

  • Ajoute un cadre personnalisé à l'interface graphique en un seul clic.
  • Détache ou rattache le cadre pour prendre en charge les dispositions multi-écrans et les configurations d'espace de travail flexibles.
  • Supprime le cadre lorsqu'il n'est plus nécessaire pour garder la zone graphique claire et ciblée.
  • Affiche un bloc de texte personnalisé dans le cadre pour prendre en charge la personnalisation du graphique en temps réel et le retour visuel.

Ce plug-in crée une interface simple dans le Panneau de symbole actif qui vous permet d'ajouter, de supprimer, d'attacher ou de détacher un cadre de graphique personnalisé. Chaque bouton déclenche une action spécifique, ce qui facilite la gestion des éléments visuels directement sur le graphique. Le plug-in ne fonctionne que lorsque cTrader Windows ou Mac est ouvert et s'arrête automatiquement lorsque la plateforme est fermée.

Création de plug-in

Apprenez à créer des plug-ins, en utilisant C# ou Python, dans nos guides étape par étape.

Le code du plug-in Custom Frame Sample est disponible dans nos dépôts publics C# et Python. Le même code est fourni comme modèle dans l'assistant de création d'algorithme dans cTrader Windows ou Mac, ou vous pouvez simplement copier et utiliser l'extrait ci-dessous :

 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

Options de personnalisation

Custom Frame Sample comprend des boutons de contrôle qui vous permettent d'ajouter, de supprimer et d'interagir avec un cadre personnalisé directement sur le graphique. Le tableau ci-dessous décrit ses composants clés et leurs fonctions :

Paramètre Description Valeurs possibles
panel Ajoute ou réorganise les boutons pour des actions de cadre supplémentaires ou des options d'interface utilisateur. stackpanel [panel]
Text Modifie le texte du bouton pour plus de clarté. Add custom frame, Remove custom frame, Detach custom frame, Attach custom frame
Margin Modifie les marges pour un équilibre visuel. 5, 8, 12, etc.
AddCustomFrame Modifie le titre du cadre pour refléter l'objectif ou le symbole. chartmanager.addcustomframe(Custom frame)
TextBlock.Text Modifie le message pour refléter le contexte ou l'identifiant. Custom frame sample
FontSize Ajuste la taille pour plus de clarté et d'adaptation à la mise en page. 32, 36, 40, etc.
HorizontalAlignment Ajuste l'alignement pour modifier la présentation horizontale du contenu. horizontalalignment.center
VerticalAlignment Ajuste l'alignement pour modifier la présentation verticale du contenu. verticalalignment.center
Attach() Ajoute un message lorsque le cadre est rattaché au graphique. customframe.attach()
Detach() Ajoute un message lorsque le cadre est détaché du graphique. customframe.detach()
RemoveFrame Renomme le bouton pour refléter son objectif. chartmanager.removeframe(customframe.id)

Cas d'usage

Custom Frame Sample permet une gestion interactive du graphique sans nécessiter de services externes. Les cas d'utilisation suivants montrent comment le plug-in peut améliorer l'expérience de trading.

Cas d'utilisation Scénario Valeur
Mettre en évidence les signaux de trading Ajoutez un cadre avec un message tel que Surveillez la cassure sur EURUSD. Attire l'attention sur les alertes spécifiques au graphique ou les notes de l'utilisateur.
Gestion multi-écrans Détachez les cadres et déplacez-les vers d'autres écrans. Élargit la visibilité du graphique et prend en charge les configurations de trading multi-écrans.
Organisation personnalisée de l'espace de travail Organisez la zone graphique à l'aide de cadres pour correspondre à votre flux de travail de trading personnel. Vous aide à organiser la zone graphique en fonction de votre flux de travail de trading personnel.
Marqueurs visuels personnalisés Ajoutez manuellement des cadres avec des notes pour mettre en évidence les événements du graphique tels que les entrées d'ordres. Fournit un moyen flexible d'étiqueter les points clés du graphique sans dessins permanents.

Résumé

Ce plug-in offre un moyen pratique de gérer les cadres personnalisés directement sur les graphiques cTrader. Avec des commandes simples pour ajouter, supprimer, attacher ou détacher des cadres, il vous aide à personnaliser votre espace de travail, à mettre en évidence les informations clés et à organiser facilement les dispositions de graphiques.

Pour plus de détails sur le développement, consultez notre documentation sur les plug-ins.