Neo traderBot

Neo traderBot

Você sabia?

Abordamos o tema de automatização de estratégias em NTSL, MQL5 e NinjaScript!

Snippets e How-to

Snippets para Manipulação de Gráficos

Leitura estimada: 6 minutos 39 views

Esta seção visa apresentar trechos de códigos com funcionalidades relativas à manipulação de gráficos.

Você pode acessar os Snippets diretamente pelo menu lateral direito, ou fazendo CRL+F (CTRL+L) para localizar algum texto específico na página, uma vez que o conteúdo tende a crescer ao longo do tempo, dificultando a navegação pelo menu.

Caso tenham sugestões de código para acrescentar à lista, gentileza deixar o código nos comentários com o link para seu perfil em rede social (para devido crédito de autoria).

Snippets

Como criar e configurar os atributos gerais de um plot?

Os plots, ou Lines como é definida a Classe dentro do EvoCode devem ser instanciados no construtor do indicador. Cada Line recebe um nome por meio do método Set e assim pode ser indexado.

O programador pode configurar a visbilidade o estilo de linha (histograma, linha, escada, etc…), a cor padrão, a espessura, entre outras propriedades. Veja abaixo um exemplo de como criar 2 plots, um histograma e uma linha pontilhada.

				
					public IndicadorXYZ(): base()
{
    //Linha pontilhada
    Lines.Set("Média rápida");
    Lines["Média rápida"].Color = Color.Red;
	Lines["Média rápida"].Style = LineStyle.DotLine;
	Lines["Média rápida"].Width = 1;
	
	//Histograma
	Lines.Set("Histograma");
    Lines["Histograma"].Color = Color.Gray;
	Lines["Histograma"].Style = LineStyle.Histogram;
}
				
			

Eu posso plotar indicadores em uma estratégia?

Sim! Apesar da classe StrategyBuilder não possuir interface com classe Lines, é possível instanciarmos indicadores dentro das estratégias. Assim, os plots e elementos gráficos dos indicadores também serão exibidos no gráfico ao rodar a estratégia. 

Os indicadores devem ser instanciados no método Init e naturalmente também devem ser declarados como atributos da classe.

Veja abaixo alguns exemplos de instanciação de indicadores:

Instanciando uma média móvel (Indicador nativo)
				
					private BuiltInIndicator fastAvg;

public override void Init()
{
	fastAvg = IndicatorsManager.BuildIn.MA(HistoryDataSeries, fastPeriod, fastAvgType, 0, PriceType.Close);
} 
				
			
Instanciando Average True Range (ATR)
				
					private BuiltInIndicator avgTrueRange;

public override void Init()
{
    avgTrueRange = IndicatorsManager.BuildIn.ATR(HistoryDataSeries, 200);
} 
				
			
Instanciando Indicador Próprio chamado "NTB_TripleCrossoverIndicator"

Observe que ao instanciar um indicador próprio com o método custom, fornecemos 3 parâmetros: o nome do indicador (nome da classe), a série de dados, e um array com os valores dos parâmetros.

				
					private BuiltInIndicator NTB_3Cross;

public override void Init()
{
	NTB_3Cross = IndicatorsManager.BuildIn.Custom("NTB_TripleCrossoverIndicator" 
	                                              ,	HistoryDataSeries
	                                              , new Object[]{fastestPeriod,
  			                                              	   fastestAvgType,
  			                                              	   fastPeriod,
  			                                              	   fastAvgType,
  			                                              	   slowPeriod,
  			                                              	   slowAvgType})
} 
				
			

Como mudar a cor do plot em determinada condição?

As cores de um plot podem ser alteradas para qualquer posição a qualquer instante. Basta atribuir a cor desejada ao marcador da Line. Veja no exemplo abaixo um código que atribui cores a um histograma de maneira condicional: se a barra for de alta usa corAlta, senão usa corBaixa.

				
					public override void Update(TickStatus args)
{
	if (args == TickStatus.IsQuote)
	{
		Color corAlta = Color.FromArgb(0, 51, 0);;
		Color corBaixa = Color.FromArgb(153, 0, 0);;
		
		Lines["Volat."].SetValue(rangeAtual);
    	Lines["Volat."].Markers.Set((barData.GetOpen() < barData.GetClose()) ? corAlta : corBaixa, 0);
	}
}
				
			

Como inserir um texto no cabeçalho do gráfico?

Caso esteja trabalhando com indicadores, é possível inserir um texto no cabeçalho do gráfico (Veja na figura abaixo). Com esta funcionalidade, você pode inserir informações que julgue ser úteis de serem exibidas no gráfico.

				
					Notification.Comment("Aqui é onde ficam os comentários!");
				
			

Como garantir que indicador será aplicado apenas ao gráfico principal?

Em alguns casos, é desejável garantir que o indicador esteja sendo aplicado no gráfico principal ou em um gráfico separado. Caso o usuário tenha aplicado o indicador na janela diferente da esperada, pode-se alertar isso por meio de um texto, conforme figura abaixo.

Para se implementar esta funcionalidade, deve-se incluir a biblioteca Runtime.Scripts.Charts no cabeçalho do código fonte, e dentro da classe do indicador sobrescrever o método onPaintChart, conforme código exemplo abaixo.

				
					using Runtime.Script.Charts;

public override void OnPaintChart(object sender, PaintChartEventArgs args)
{
    var graphic = args.Graphics;
    int windowNumber = ChartSource.FindWindow(this);
	Font fonte = new Font("Arial", 24);
	Brush boxBrush = new SolidBrush(Color.LightGray);
	
	//É o número da janela que define se o indicador está no gráfico principal (= 0)
    if (windowNumber != 0)
    {
        using (StringFormat format = new StringFormat())
        {
            format.LineAlignment = StringAlignment.Center;
            format.Alignment = StringAlignment.Center;

            graphic.DrawString("O indicador deve ser aplicado ao gráfico principal", fonte, boxBrush, args.Rectangle, format);
        }

        return;
    }
}		
				
			

Leave a Comment

CONTENTS