FabricioF Postado Julho 4, 2022 Compartilhar Postado Julho 4, 2022 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 Compartilhe em outros sites Outras opções de compartilhamento...
Kleverson Cruz Postado Julho 6, 2022 Compartilhar Postado Julho 6, 2022 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 Compartilhe em outros sites Outras opções de compartilhamento...
FabricioF Postado Julho 6, 2022 Autor(a) Compartilhar Postado Julho 6, 2022 obrigado pela resposta, me ajudou muito, deu certo. Link to comment Compartilhe em outros sites Outras opções de compartilhamento...
Postagens Recomendadas
Crie uma conta ou entre para comentar 😀
Você precisa ser um membro para deixar um comentário.
Crie a sua conta
Participe da nossa comunidade, crie sua conta.
Criar minha conta agoraÉ bem rápido!
Entrar
Você já tem uma conta?
Entrar agoraFaça o login agora.