Neo traderBot

Neo traderBot

Você sabia?

A NeoTraderBot é a primeira comunidade aberta no Brasil com foco em compartilhar informações sobre automatização de estratégias

Snippets e How-to

Snippets para Utilização de Indicadores da Plataforma

Leitura estimada: 5 minutos 46 views

Introdução

Esta seção visa apresentar trechos de códigos com exemplos de utilização dos indicadores disponibilizados na plataforma.

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 instanciar uma média móvel nativa?

Reproduzir vídeo

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

				
					private BuiltInIndicator fastAvg;

public override void Init()
{
    fastAvg = IndicatorsManager.BuildIn.MA(HistoryDataSeries, 20, MAMode.SMA, 0, PriceType.Close);
} 
				
			

Como instanciar um indicador criado por você dentro de outra estratégia/indicador?

Reproduzir vídeo

Os indicadores devem ser instanciados no método Init e naturalmente também devem ser declarados como atributos da classe. Veja abaixo um exemplo de instanciação de indicador próprio.

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.

Instanciando Indicador Próprio chamado "NTB_TripleCrossoverIndicator"
				
					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 criar estratégias/indicadores em múltiplos tempos gráficos?

Reproduzir vídeo

O EvoCode permite utilizar séries de dados de diferentes ativos e multiplos tempos gráficos em uma mesma estratégia ou indicador. Segue abaixo um exemplo no qual é implementado um indicador no tempo gráfico primário consistindo em uma média aritmética, bem como uma outra média aritmética utilizando dados de preço do mesmo ativo em um tempo gráfico diferente (5 minutos).

 

Calculando médias em múltiplos tempos gráficos
				
					using System;
using System.Collections;
using System.Collections.Generic;
using System.Text;
using System.Drawing;
using Runtime.Script;
using TradeApi;
using TradeApi.History;
using TradeApi.Indicators;
using TradeApi.Instruments;
using TradeApi.ToolBelt;
using TradeApi.Trading;
using TradeApi.Quotes;
using NeoTraderBot;

namespace NeoTraderBot
{
    public class MultiTimeFrameIndicator : IndicatorBuilder
    {
        private BuiltInIndicator avg;

        // Secondary timeframe 5 minutes
        private HistoricalData historicalDataSeries2 = null;
        private BuiltInIndicator avg2;

        #region inputs
        [InputParameter(InputType.Numeric, "Primary SMA - Periods", 0)]
        [SimpleNumeric(1D, 9999D)]
        public int periods = 50;

        [InputParameter(InputType.Numeric, "Secondary SMA - Periods", 0)]
        [SimpleNumeric(1D, 9999D)]
        public int periods2 = 10;

        #endregion




        public MultiTimeFrameIndicator()
            : base()
        {
            #region Initialization
            Credentials.Author = "";
            Credentials.Company = "";
            Credentials.Copyrights = "";
            Credentials.DateOfCreation = new DateTime(2023, 7, 18);
            Credentials.ExpirationDate = DateTime.MinValue;
            Credentials.Version = "";
            Credentials.Password = "66b4a6416f59370e942d353f08a9ae36";
            Credentials.ProjectName = "Multi TimeFrame Averages";
            #endregion

            Lines.Set("avg1min");
            Lines["avg1min"].Color = Color.Blue;
            Lines.Set("avg5min");
            Lines["avg5min"].Color = Color.Red;

            SeparateWindow = false;
        }
        public override void Init()
        {
            HistoricalDataManager.OnLoaded += plotHistoryValues;

            InstrumentsManager.Subscribe(InstrumentsManager.Current, QuoteTypes.Trade);
            HistoricalRequest historicalRequest2 = new TimeHistoricalRequest(InstrumentsManager.Current, DataType.Trade, Period.Minute, 5);
            historicalDataSeries2 = HistoricalDataManager.Get(historicalRequest2, new Interval(DateTime.UtcNow.AddDays(-10), DateTime.UtcNow));

            avg = IndicatorsManager.BuildIn.MA(HistoryDataSeries, periods, MAMode.SMA);
            avg2 = IndicatorsManager.BuildIn.MA(historicalDataSeries2, periods2, MAMode.SMA);

            Notification.Comment(  "This is a SNIPPET from NeoTraderBot Community: www.NeoTraderBot.com.\n"
                                 + "In the blue line, we have a SMA of " + periods + " periods in the current timeframe. \n"
                                 + "In the red line, we have a SMA of " + periods2 + " periods in a 5-minutes timeframe on the same symbol.");
        }

       public override void Update(TickStatus args)
        {
            Lines["avg1min"].SetValue(avg.GetValue());
            Lines["avg5min"].SetValue(avg2.GetValue());
        }

        public override void Complete()
        {
            HistoricalDataManager.OnLoaded -= plotHistoryValues;
            InstrumentsManager.UnSubscribe(InstrumentsManager.Current, QuoteTypes.Trade);
        }

        public void plotHistoryValues(HistoricalData hData)
        {
            for (int i = 0; i < HistoryDataSeries.Count; i++)
            {
                int index = historicalDataSeries2.FindInterval(HistoryDataSeries.GetTimeUtc(i));
                Lines["avg5min"].SetValue(avg2.GetValue(index), i);
            }
		}


    }
}


				
			

Leave a Comment

CONTENTS