Ir para o conteúdo

Como criar plugins de moldura personalizados

Os traders frequentemente esforçam-se por manter websites com informações importantes de negociação e análise técnica o mais próximo possível dos gráficos. Os plugins permitem-lhes alcançar isto através de molduras personalizadas.

Neste artigo e no vídeo correspondente, mostraremos como criar molduras personalizadas que podem conter websites e caixas de texto utilizando um plugin.

Criar uma moldura personalizada que mostra um website

Vamos criar uma moldura personalizada na área dos gráficos para conter um website.

Vá para a aplicação Algo e mude para o separador Plugins. Clique no botão Novo para criar um novo plugin. Selecione a opção Em branco. Dê um nome ao seu plugin, como "Exemplo da minha moldura personalizada", e clique no botão Criar.

Quando o editor de código aparecer, inicialize um objeto WebView.

1
_cTraderWebView = new WebView();

Subscreva o evento de carregamento do WebView.

1
_cTraderWebView.Loaded += _cTraderWebView_Loaded;

Defina o Fórum cTrader como o website no WebView quando este carregar.

1
2
3
4
private void _cTraderWebView_Loaded(WebViewLoadedEventArgs args) 
{
    _cTraderWebView.NavigateAsync("https://ctrader.com/forum");
}

Inicialize uma moldura de gráfico personalizada.

1
var webViewFrame = ChartManager.AddCustomFrame("Forum");

Atribua o WebView como filho à moldura de gráfico personalizada.

1
webViewFrame.Child = _cTraderWebView;

Defina a moldura de gráfico personalizada para o modo de vários gráficos.

1
webViewFrame.ChartContainer.Mode = ChartMode.Multi;

Anexe-a aos gráficos.

1
webViewFrame.Attach();

Pode copiar o código completo abaixo:

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

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

        WebView _cTraderWebView = new WebView();

        protected override void OnStart()
        {
            _cTraderWebView.Loaded += _cTraderWebView_Loaded;
            var webViewFrame = ChartManager.AddCustomFrame("Forum");
            webViewFrame.Child = _cTraderWebView;
            webViewFrame.ChartContainer.Mode = ChartMode.Multi;
            webViewFrame.Attach();
        }

        private void _cTraderWebView_Loaded(WebViewLoadedEventArgs args)
        {
            _cTraderWebView.NavigateAsync("https://ctrader.com/forum");
        }

        protected override void OnStop()
        {
            // Handle Plugin stop here
        }
    }        
}

Para compilar o nosso plugin, utilize as teclas de atalho Ctrl+B ou clique no botão Compilar.

Para ver os resultados, vá para a aplicação Trade. No nosso caso, a página web do Fórum cTrader é agora exibida na nossa moldura personalizada na área dos gráficos.

Gerir a moldura personalizada

A moldura personalizada que contém o website do Fórum cTrader pode ser gerida como qualquer moldura de gráfico no cTrader. Pode ser desanexada e reanexada à área do gráfico, redimensionada, trocada ou substituída por outros gráficos.

Alterar o URL do website

Vamos substituir o website do Fórum cTrader por outra página web.

Volte à aplicação Algo e edite o código do plugin. Substitua o URL do Fórum cTrader (https://ctrader.com/forum) pelo URL da Spotware (https://www.spotware.com).

Esta deverá ser a linha de código resultante:

1
_cTraderWebView.NavigateAsync("https://www.spotware.com");

Compile o plugin novamente e vá para a aplicação Trade para ver as alterações. O website da Spotware é agora apresentado na moldura personalizada.

Adicionar múltiplas molduras

Vamos atualizar o código do plugin para adicionar duas molduras personalizadas, cada uma apresentando um website. Adicione um novo objeto WebView e repita os passos e linhas de código do exemplo anterior.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
WebView _cTraderWebView = new WebView();
WebView _cTraderWebViewSite = new WebView();

_cTraderWebViewSite.Loaded += _cTraderWebViewSite_Loaded;
var webViewFrameSite = ChartManager.AddCustomFrame("Site");
webViewFrameSite.Child = _cTraderWebViewSite;
webViewFrameSite.ChartContainer.Mode = ChartMode.Multi;
webViewFrameSite.Attach();

private void _cTraderWebViewSite_Loaded(WebViewLoadedEventArgs args)
{
    _cTraderWebViewSite.NavigateAsync("https://www.spotware.com");
}

Pode copiar o código completo abaixo:

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

namespace cAlgo.Plugins
{
    [Plugin(AccessRights = AccessRights.None)]
    public class MyCustomFrameExample : Plugin
    {
        WebView _cTraderWebView = new WebView();
        WebView _cTraderWebViewSite = new WebView();

        protected override void OnStart()
        {
            _cTraderWebView.Loaded += _cTraderWebView_Loaded;
            var webViewFrame = ChartManager.AddCustomFrame("Forum");
            webViewFrame.Child = _cTraderWebView;
            webViewFrame.ChartContainer.Mode = ChartMode.Multi;
            webViewFrame.Attach();

            _cTraderWebViewSite.Loaded += _cTraderWebViewSite_Loaded;
            var webViewFrameSite = ChartManager.AddCustomFrame("Site");
            webViewFrameSite.Child = _cTraderWebViewSite;
            webViewFrameSite.ChartContainer.Mode = ChartMode.Multi;
            webViewFrameSite.Attach();
        }

        private void _cTraderWebView_Loaded(WebViewLoadedEventArgs args)
        {
           _cTraderWebView.NavigateAsync("https://www.ctrader.com/forum");
        }

        private void _cTraderWebViewSite_Loaded(WebViewLoadedEventArgs args)
        {
           _cTraderWebViewSite.NavigateAsync("https://www.spotware.com");
        }

        protected override void OnStop()
        {
            // Handle Plugin stop here
        }
    }        
}

Compile o plugin. Quando voltar à aplicação Algo, deverá ver dois websites (Fórum cTrader e Spotware) em molduras individuais.

Criar uma caixa de texto

Além das molduras do gráfico que alojam páginas web, os plugins permitem adicionar molduras personalizadas contendo outros objetos. Por exemplo, pode adicionar uma moldura que aloja uma caixa de texto.

Remova todas as linhas de código WebView e adicione as seguintes linhas para uma caixa de texto:

1
2
3
4
5
6
7
8
9
var webViewFrame = ChartManager.AddCustomFrame("Hello World");

var txtHelloWorld = new TextBlock
{
    Text = "Hello World"
};
webViewFrame.Child = txtHelloWorld;
webViewFrame.ChartContainer.Mode = ChartMode.Single;
webViewFrame.Attach();

Pode copiar o código completo abaixo.

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

namespace cAlgo.Plugins
{
    [Plugin(AccessRights = AccessRights.None)]
    public class MyCustomFrameExample : Plugin
    {
        protected override void OnStart()
        {
            var webViewFrame = ChartManager.AddCustomFrame("Hello World");

            var txtHelloWorld = new TextBlock
            {
                Text = "Hello World"
            };

            webViewFrame.Child = txtHelloWorld;
            webViewFrame.ChartContainer.Mode = ChartMode.Single;
            webViewFrame.Attach();
        }

        protected override void OnStop()
        {
            // Handle Plugin stop here
        }
    }        
}

Compile o plugin e veja os resultados na aplicação Trade. Desta vez, deverá ver uma caixa com o texto Hello World na área dos gráficos.

Resumo

Agora deverá estar apto a usar plugins para incorporar páginas web, caixas de texto e outros elementos úteis na área do gráfico.