Vai al contenuto

Custom Frame Sample

Panoramica

Il plugin Custom Frame Sample abilita la gestione di base delle cornici all'interno dell'interfaccia dei grafici di cTrader. Controlla come le cornici personalizzate appaiono sul grafico, offrendo un modo semplice per organizzare elementi visivi e personalizzare il tuo spazio di lavoro attraverso le seguenti funzionalità chiave:

  • Aggiunge una cornice personalizzata all'interfaccia del grafico con un singolo clic.
  • Scollega o ricollega la cornice per supportare layout multi-schermo e configurazioni flessibili dello spazio di lavoro.
  • Rimuove la cornice quando non è più necessaria per mantenere l'area del grafico pulita e focalizzata.
  • Visualizza un blocco di testo personalizzato all'interno della cornice per supportare la personalizzazione del grafico in tempo reale e il feedback visivo.

Questo plugin crea un'interfaccia semplice nel Pannello del simbolo attivo che ti consente di aggiungere, rimuovere, collegare o scollegare una cornice del grafico personalizzata. Ogni pulsante attiva un'azione specifica, rendendo facile gestire elementi visivi direttamente sul grafico. Il plugin viene eseguito solo mentre cTrader Windows o Mac è aperto e si arresta automaticamente quando la piattaforma viene chiusa.

Creazione del plugin

Scopri come creare plugin, utilizzando C# o Python, nelle nostre guide passo dopo passo.

Il codice del plugin Custom Frame Sample è disponibile nei nostri repository pubblici C# e Python. Lo stesso codice è fornito come modello nella procedura guidata di creazione dell'algoritmo in cTrader Windows o Mac, oppure puoi semplicemente copiare e utilizzare lo snippet qui sotto:

 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

Opzioni di personalizzazione

Custom Frame Sample include pulsanti di controllo che ti consentono di aggiungere, rimuovere e interagire con una cornice personalizzata direttamente sul grafico. La tabella seguente illustra i suoi componenti chiave e le relative funzioni:

Parametro Descrizione Valori possibili
panel Aggiunge o riordina pulsanti per azioni aggiuntive della cornice o opzioni dell'interfaccia. stackpanel [panel]
Text Modifica il testo del pulsante per maggiore chiarezza. Add custom frame, Remove custom frame, Detach custom frame, Attach custom frame
Margin Modifica i margini per l'equilibrio visivo. 5, 8, 12, ecc.
AddCustomFrame Modifica il titolo della cornice per riflettere lo scopo o il simbolo. chartmanager.addcustomframe(Custom frame)
TextBlock.Text Modifica il messaggio per riflettere il contesto o l'identificatore. Custom frame sample
FontSize Regola le dimensioni per maggiore chiarezza e adattamento al layout. 32, 36, 40, ecc.
HorizontalAlignment Regola l'allineamento per modificare la presentazione orizzontale del contenuto. horizontalalignment.center
VerticalAlignment Regola l'allineamento per modificare la presentazione verticale del contenuto. verticalalignment.center
Attach() Aggiunge un messaggio quando la cornice viene ricollegata al grafico. customframe.attach()
Detach() Aggiunge un messaggio quando la cornice viene scollegata dal grafico. customframe.detach()
RemoveFrame Rinomina il pulsante per riflettere il suo scopo. chartmanager.removeframe(customframe.id)

Casi d'uso

Custom Frame Sample consente la gestione interattiva dei grafici senza richiedere servizi esterni. I seguenti casi d'uso mostrano come il plugin può migliorare l'esperienza di trading.

Caso d'uso Scenario Valore
Evidenzia i segnali di trading Aggiungi una cornice con un messaggio come Attenzione al breakout su EURUSD. Attira l'attenzione su avvisi specifici del grafico o note dell'utente.
Gestione multi-schermo Scollega le cornici e spostale su altri schermi. Espande la visibilità del grafico e supporta configurazioni di trading multi-schermo.
Organizzazione personalizzata dell'area di lavoro Organizza l'area del grafico utilizzando cornici per adattarla al tuo flusso di lavoro di trading personale. Ti aiuta a organizzare l'area del grafico in base al tuo flusso di lavoro di trading personale.
Marcatori visivi personalizzati Aggiungi manualmente cornici con note per evidenziare eventi del grafico come inserimenti di ordini. Fornisce un modo flessibile per etichettare punti chiave sul grafico senza disegni permanenti.

Questo plugin offre un modo pratico per gestire cornici personalizzate direttamente sui grafici cTrader. Con semplici controlli per aggiungere, rimuovere, collegare o scollegare cornici, ti aiuta a personalizzare la tua area di lavoro, evidenziare informazioni chiave e organizzare facilmente i layout dei grafici.

Per ulteriori dettagli sullo sviluppo, consulta la nostra documentazione sui plugin.