Ir para o conteúdo

Posicionamentos de plugins na interface do utilizador do cTrader

Os plugins podem adicionar elementos personalizados a áreas da interface do utilizador do cTrader, como o Painel de símbolo ativo (ASP), Observação da Negociação (TW), gráfico e frames personalizados, janela personalizada e área do menu principal. Este guia demonstra como usar cada uma destas opções e sugere casos de uso relevantes.

Posicionamentos de plugins em um minuto!

  • Ao estender a interface do utilizador do cTrader, pode integrar perfeitamente serviços de terceiros com o terminal de negociação.
  • Um único plugin pode executar diferentes funcionalidades em diferentes áreas da interface do utilizador, permitindo-lhe personalizar o aspeto e a sensação do cTrader.
  • Pode configurar os elementos personalizados criados pelo plugin para que possam ser desanexados e reanexados às suas localizações originais na interface do utilizador do cTrader.
  • Certas ideias podem encaixar-se melhor em áreas específicas da interface do utilizador. Pode experimentar com posicionamentos para descobrir o que funciona melhor.

ASP

O ASP está localizado à direita da exibição do gráfico. Um plugin pode adicionar um ou mais elementos personalizados usando as seguintes opções:

  • Como um AspTab. Quando esta opção é usada, o plugin exibe elementos personalizados em separador(es) separado(s) junto com Símbolo, DoM e outros.
  • Como um AspBlock. Quando esta opção é usada, o plugin exibe elementos personalizados no separador Símbolo em nova(s) secção(ões) recolhível(eis) e expansível(eis) com títulos e posições personalizáveis.

Aqui está como o mesmo plugin se parece como um bloco e como um separador.

Casos de utilização

Aqui estão algumas ideias para plugins que exibem elementos personalizados num bloco ASP:

  • Uma pequena calculadora de níveis de proteção para um determinado símbolo.
  • Uma grelha exibindo informações adicionais sobre o símbolo atualmente ativo.

As seguintes ideias funcionariam melhor quando incorporadas como um separador ASP:

  • Uma lista contendo análises personalizadas sobre todas as posições atualmente abertas.
  • Uma WebView de um meio de comunicação de notícias financeiras.

Para adicionar elementos personalizados como um bloco ASP, use o método Asp.SymbolTab.AddBlock(string title).

1
2
3
var child = ... // Insert the contents you want the block to have here
AspBlock aspBlock = Asp.SymbolTab.AddBlock("Cool Plugin");
aspBlock.Child = child; 

Para adicionar elementos personalizados como um separador ASP, use o método Asp.AddTab(string title).

1
2
3
var child = ... // Insert the contents you want the tab to have here
AspTab pluginTab = Asp.AddTab("Another Cool Plugin");
pluginTab.Child = child;

Para determinar a ordem em que um bloco ou separador aparece no ASP, use a propriedade Index de AspBlock e AspTab, respetivamente.

Aviso

Note que nenhum separador personalizado pode ser colocado antes do separador Símbolo. Também não pode incorporar o seu bloco acima da secção Nova Ordem no separador Símbolo. Como resultado, o menor índice possível para um bloco incorporado no ASP é 1.

Observação da Negociação

A Observação da Negociação está localizada logo abaixo da área do gráfico. Pode adicionar elementos personalizados lá como um separador separado.

Aqui está como um plugin poderia parecer quando adicionado à exibição.

Casos de uso

As seguintes ideias são adequadas para serem mostradas na Observação da Negociação.

  • Um conjunto de análises personalizadas mostrando várias estatísticas sobre a conta atual do utilizador.
  • Uma WebView de um fórum web orientado para negociação.

Para adicionar elementos personalizados como um novo separador na Observação da Negociação, use o método Trade Watch.AddTab(string title).

1
2
3
var child = ... // Insert the contents you want the plugin to have here
Trade WatchTab Trade WatchTab = Trade Watch.AddTab("Yet Another Cool Plugin");
Trade WatchTab.Child = child;

De forma semelhante aos blocos e separadores ASP, pode usar a propriedade Index de um Trade WatchTab para definir a sua posição em relação a outros separadores na Observação da Negociação.

Nota

Todos os separadores personalizados colocados na Observação da Negociação aparecem apenas à extrema direita dos separadores predefinidos incluídos na interface do utilizador do cTrader no primeiro lançamento do terminal. Subsequentemente, o Index destes separadores deve ser 1 ou superior; o índice apenas determina a posição relativa dos separadores do plugin em comparação com outros separadores do plugin.

Gráfico e moldura personalizada

Também pode optar por apresentar elementos personalizados num quadro de gráfico separado, adicionando-o essencialmente como um novo gráfico à sua vista de gráfico atual. Além disso, um plugin pode abrir qualquer número de gráficos para quaisquer símbolos e quadros de gráficos disponíveis.

Veja como é que um quadro de gráfico personalizado com um WebView se parece ao lado de um gráfico normal.

Casos de utilização

As seguintes ideias teriam melhor aspeto e funcionariam melhor quando incorporadas num quadro personalizado:

  • Um WebView de outro serviço de gráficos.
  • Um painel de negociação personalizado em grande escala.
  • Um WebView de um serviço de IA generativa que um trader pode consultar ao decidir como reagir aos movimentos do mercado.

Para adicionar um novo quadro personalizado, utilize o método ChartManager.AddCustomFrame(string title).

1
2
3
var child = ... // Insert the contents you want the plugin to have here
var newCustomFrame = ChartManager.AddCustomFrame("Best Plugin");
newCustomFrame.Child = child;

Para que o seu plugin abra um novo gráfico, utilize o método ChartManager.AddChartFrame(string symbolName, TimeFrame timeFrame).

1
var newChart = ChartManager.AddChartFrame("EURUSD", TimeFrame.Day2);

Nota

Assim que um plugin adiciona uma nova moldura personalizada ou gráfico, o cTrader mudará para o modo de vários gráficos, mesmo que o modo de gráfico único ou o modo de gráfico livre estivesse ativado anteriormente.

Os plugins podem ser programados para adicionar secções personalizadas à interface do utilizador do menu principal, além das secções existentes como Trade, Algo, Copy e Analyze. Qualquer secção personalizada adicionada pode conter websites, painéis, botões, ferramentas e muito mais.

Aqui está o código para um plugin simples que adiciona uma secção personalizada cTrader Store, que aloja o website cTrader Store, ao menu principal:

 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
using System;
using cAlgo.API;
using cAlgo.API.Collections;
using cAlgo.API.Indicators;
using cAlgo.API.Internals;

namespace cAlgo
{
    [Plugin(AccessRights = AccessRights.None)]
    public class CTraderStorePlugin : Plugin
    {
        private MainMenuOwnCustomItem _storeItem;

        private const string StoreIconSvg = @"
        <svg viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'>
          <path fill='white' d='M7 7V6a5 5 0 0 1 10 0v1h2a1 1 0 0 1 1 1l-1 11a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2L4 8a1 1 0 0 1 1-1h2zm2 0h6V6a3 3 0 0 0-6 0v1z' />
        </svg>";

        protected override void OnStart()
        {
            _storeItem = MainMenu.AddItem("cTrader Store", new SvgIcon(StoreIconSvg));

            var webView = new WebView();
            webView.Loaded += _ =>
            {
                webView.NavigateAsync("http://ctrader.com");
            };

            _storeItem.Child = webView;

            MainMenu.SelectedItemChanged += OnSelectedItemChanged;
        }

        private void OnSelectedItemChanged(MainMenuSelectedItemChangedEventArgs args)
        {
            if (args.NewItem == _storeItem)
            {
                MainMenu.IsExpanded = true;
            }
        }

        protected override void OnStop()
        {
            MainMenu.SelectedItemChanged -= OnSelectedItemChanged;

            if (_storeItem != null)
            {
                MainMenu.RemoveItem(_storeItem);
                _storeItem = null;
            }
        }
    }
}

Selecionar cTrader Store navega para a secção personalizada, revelando o seu conteúdo como mostrado abaixo.

Múltiplas localizações

O seguinte plugin adiciona elementos personalizados a vários locais da interface do utilizador do cTrader de uma só vez:

  • O plugin apresenta a soma das comissões para todas as posições atualmente abertas num bloco ASP.
  • Na visualização da Observação da Negociação, o plugin mostra o volume cumulativo de todas as posições abertas.
  • O plugin também mostra um WebView de ctrader.com num quadro de gráfico personalizado.
 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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using cAlgo.API;
using cAlgo.API.Collections;
using cAlgo.API.Indicators;
using cAlgo.API.Internals;

namespace cAlgo.Plugins
{
    [Plugin(AccessRights = AccessRights.None)]
    public class PluginPlacementTest : Plugin
    {

        private TextBlock _commissionsText;
        private TextBlock _volumeText;
        private WebView _cTraderWebView;

        protected override void OnStart()
        {
            _cTraderWebView = new WebView();
            _cTraderWebView.Loaded += ShowWebsite;

            _commissionsText = new TextBlock
            {
                Text = ShowCommissions(),
                FontSize = 100,
                TextAlignment = TextAlignment.Center,
                FontWeight = FontWeight.ExtraBold,
            };

            _volumeText = new TextBlock
            {
                Text = ShowVolume(),
                FontSize = 100,
                TextAlignment = TextAlignment.Center,
                FontWeight = FontWeight.ExtraBold,
            };

            ChartManager.AddCustomFrame("cTrader.com").Child = _cTraderWebView;
            Asp.SymbolTab.AddBlock("Commissions").Child = _commissionsText;
            TradeWatch.AddTab("Volume").Child = _volumeText;
            Timer.Start(TimeSpan.FromSeconds(0.5));

        }

        protected void ShowWebsite(WebViewLoadedEventArgs args)
        {
            _cTraderWebView.NavigateAsync("https://ctrader.com");
        }

        protected string ShowCommissions()
        {
            double commissionsCounter = 0;
            foreach (var position in Positions)
            {
                commissionsCounter += position.Commissions;
            }
            return commissionsCounter.ToString();
        }

        protected string ShowVolume() 
        {
            double volumeCounter = 0;
            foreach (var position in Positions) 
            {
                volumeCounter += position.VolumeInUnits;
            }
            return volumeCounter.ToString();
        }

        protected override void OnTimer()
        {
            _commissionsText.Text = ShowCommissions();
            _volumeText.Text = ShowVolume();
        }
    }
}

Resumo

O cTrader oferece várias opções para colocar elementos personalizados através de plugins. Pode utilizá-los para personalizar a interface do utilizador do cTrader e tornar a plataforma verdadeiramente sua.

Image title