Jump to content

Duvida criação de multiplás variáveis


Recommended Posts

Olá, tenho um dúvida para criação de multiplas variáveis e de maneira variável

neste exemplo eu crio 5 variáveis para executar uma função que vai me criar linhas horizontais nas ultimas 5 barras de um gráfico, mas eu gostaria de varia isto que poderia ser de 1, 2,3... a 25.... 50, em fim eu colocaria este valor via input, antes de iniciar o indicador.

Como eu faço hoje:


       // Criação da variáveis

        private Bars _bars;
        private Bars _bars2;
        private Bars _bars3;
        private Bars _bars4;
        private Bars _bars5;



 protected override void Initialize()  // Inicialização das variáveis com TimeFrame no início do código
        {
            _bars = MarketData.GetBars(TimeFrame.Hour4);
            _bars2 = MarketData.GetBars(TimeFrame.Hour4);
            _bars3 = MarketData.GetBars(TimeFrame.Hour4);
            _bars4 = MarketData.GetBars(TimeFrame.Hour4);
            _bars5 = MarketData.GetBars(TimeFrame.Hour4);
        }

// Aqui ele entra em Loop e fica calculando e criando as linhas conforme as barras vão mudando

 public override void Calculate(int index)
        {
            // This or index == 0 will fix the issue
            if (!IsLastBar) return;
            
            //Last 1
            if (High)
              
                Chart.DrawHorizontalLine("Heigh", _bars.HighPrices.Last(1), HighColor, 1, LineStyle.Dots);
                
            if (Low)
                Chart.DrawHorizontalLine("Low", _bars.LowPrices.Last(1), LowColor, 1, LineStyle.Dots);

            if (Open)
                Chart.DrawHorizontalLine("Open", _bars.OpenPrices.Last(1), OpenColor,1, LineStyle.Solid);

            if (Close)
                Chart.DrawHorizontalLine("Close", _bars.ClosePrices.Last(1), CloseColor, 1, LineStyle.Solid);
                
             // Last 2
             if (!IsLastBar) return;
              if (High)
                Chart.DrawHorizontalLine("Heigh2", _bars2.HighPrices.Last(2), HighColor, 1, LineStyle.Dots);

            if (Low)
                Chart.DrawHorizontalLine("Low2", _bars2.LowPrices.Last(2), LowColor, 1, LineStyle.Dots);

            if (Open)
                Chart.DrawHorizontalLine("Open2", _bars2.OpenPrices.Last(2), OpenColor, 1, LineStyle.Solid);

            if (Close)
                Chart.DrawHorizontalLine("Close2", _bars2.ClosePrices.Last(2), CloseColor, 1, LineStyle.Solid);
              // Last 3
             if (!IsLastBar) return;
              if (High)
                Chart.DrawHorizontalLine("Heigh3", _bars3.HighPrices.Last(3), HighColor, 1, LineStyle.Dots);

            if (Low)
                Chart.DrawHorizontalLine("Low3", _bars3.LowPrices.Last(3), LowColor, 1, LineStyle.Dots);

            if (Open)
                Chart.DrawHorizontalLine("Open3", _bars3.OpenPrices.Last(3), OpenColor, 1, LineStyle.Solid);

            if (Close)
                Chart.DrawHorizontalLine("Close3", _bars3.ClosePrices.Last(3), CloseColor, 1, LineStyle.Solid);
                  // Last 4
             if (!IsLastBar) return;
              if (High)
                Chart.DrawHorizontalLine("Heigh4", _bars3.HighPrices.Last(4), HighColor, 1, LineStyle.Dots);

            if (Low)
                Chart.DrawHorizontalLine("Low4", _bars3.LowPrices.Last(4), LowColor, 1, LineStyle.Dots);

            if (Open)
                Chart.DrawHorizontalLine("Open4", _bars3.OpenPrices.Last(4), OpenColor, 1, LineStyle.Solid);

            if (Close)
                Chart.DrawHorizontalLine("Close4", _bars3.ClosePrices.Last(4), CloseColor, 1, LineStyle.Solid);
                  // Last 5
             if (!IsLastBar) return;
              if (High)
                Chart.DrawHorizontalLine("Heigh5", _bars3.HighPrices.Last(5), HighColor, 1, LineStyle.Dots);

            if (Low)
                Chart.DrawHorizontalLine("Low5", _bars3.LowPrices.Last(5), LowColor, 1, LineStyle.Dots);

            if (Open)
                Chart.DrawHorizontalLine("Open5", _bars3.OpenPrices.Last(5), OpenColor, 1, LineStyle.Solid);

            if (Close)
                Chart.DrawHorizontalLine("Close5", _bars3.ClosePrices.Last(5), CloseColor, 1, LineStyle.Solid);
        }

Qualquer ajuda é bem vinda para otimizar isto, pois se eu tiver que colocar por exemplo os últimos 24 fica longo o código, e quero disponibilizar este indicador gratuitamente para ajudar outras pessoas.

 

Link to comment
Share on other sites

Olá.

Você pode substituir as múltiplas variáveis por uma lista e inicializar a quantidade que precisar em runtime. Visto que seu método Calculate realiza a mesma operação repetidas vezes você pode também simplificar e executa-lo em um loop.

List<Bars> bars;

protected override void Initialize()
{
  bars = new List<Bars>();
  //Adicione N variaveis a lista
  bars.Add(MarketData.GetBars(TimeFrame.Hour4))
}

//utilize o mesmo método para gerar o calculo N vezes
public override void Calculate(int index)
{
    foreach (var bar in bars)
    {
        if (!IsLastBar) return;

        if (High)
            Chart.DrawHorizontalLine("Heigh", bar.HighPrices.Last(1), HighColor, 1, LineStyle.Dots);

        if (Low)
            Chart.DrawHorizontalLine("Low", bar.LowPrices.Last(1), LowColor, 1, LineStyle.Dots);

        if (Open)
            Chart.DrawHorizontalLine("Open", bar.OpenPrices.Last(1), OpenColor, 1, LineStyle.Solid);

        if (Close)
            Chart.DrawHorizontalLine("Close", bar.ClosePrices.Last(1), CloseColor, 1, LineStyle.Solid);
    }
}
    
    

 

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now


×
×
  • Create New...