Discussão do artigo "Buffers de cores em indicadores de vários símbolos e vários períodos"

 

Novo artigo Buffers de cores em indicadores de vários símbolos e vários períodos foi publicado:

Neste artigo, analisaremos a estrutura do buffer de indicador em indicadores com vários símbolos e vários períodos e geraremos a exibição dos buffers coloridos desses indicadores no gráfico.

Um buffer de indicador de cor única é um array duplo regular, que é preenchido com dados ao calcular o indicador. Podemos obter dados desse array e exibi-los em um gráfico usando a função CopyBuffer(), desde que o array receptor seja um array duplo definido como buffer de plotagem de um indicador(SetIndexBuffer()). Ao copiar dados do buffer da parte calculada do indicador para o buffer de sua parte de plotagem, os dados são exibidos no gráfico em uma cor, que é definida para o array buffer da parte de plotagem. Quanto aos buffers multicoloridos, a situação é um pouco diferente. Além do array de dados, o buffer de cores também tem um array de índices de cores.

Com base no exposto, entendemos que

  1. O buffer de plotagem do indicador pode usar um ou mais arrays para plotagem, dependendo do estilo de desenho.
  2. Para qualquer array de cores, é usado mais um array adicional, que é um array de índices de cores do buffer de plotagem, cujo índice é 1 maior que o índice do último array atribuído ao buffer de plotagem.

Para entender melhor, vamos criar um novo indicador no qual indicaremos vários buffers de plotagem, incluindo simples e coloridos, usando vários arrays para a construção:

Autor: Artyom Trishkin

 

Artem, olá! Como adicionar seu próprio indicador? Não consigo fazer isso! Devo estar fazendo algo errado? Se houvesse um exemplo... passo a passo através do código e tudo ficaria claro! Mas ele imediatamente!... erro de criação do indicador... O código de retorno OnInit é -1... Ajuda em geral, por favor!

  MqlParam mql_params[];
   ArrayResize(mql_params, 2);

   mql_params[0].type          = TYPE_STRING;
   mql_params[0].string_value  = "My_Indicators\\INDI_MSMT\\Test";
//---
   mql_params[1].type          = TYPE_INT;
   mql_params[1].integer_value = 10;

   handle_ind2 = indicators.AddNewCustom(NULL, PERIOD_CURRENT, "My_Indicators\\INDI_MSMT\\Test.ex5", "DON_MFI_SIS", 1, mql_params);

//handle_ind1 = IndicatorCreate(NULL, PERIOD_CURRENT, IND_CUSTOM, 1, mql_params);

 
Igor Bakhrushen criação do indicador... O código de retorno OnInit é -1... Ajuda em geral, por favor!


Pela imagem, é difícil entender o que você está fazendo de errado. Anexe o código que não funciona junto com o indicador personalizado que você está usando.
 
Artyom Trishkin #:
Pela imagem, é difícil entender o que você está fazendo de errado. Anexe o código que não funciona junto com o indicador personalizado que você está usando.

Sua biblioteca não foi alterada de forma alguma, eu apenas a copiei... O teste foi feito apenas para testar em um buffer, não entendo muito bem como tudo isso funcionará quando você tiver 20 deles! De qualquer forma, passo a passo! .... Obrigado!

Arquivos anexados:
INDI_MSMT_1.mqh  638 kb
Test.mq5  8 kb
DON_MFI_SIS.mq5  10 kb
 
Igor Bakhrushen #:

Sua biblioteca não foi alterada de forma alguma, eu apenas a copiei... o teste foi feito apenas para testar em um buffer, não entendo muito bem como tudo isso funcionará quando você tiver 20 deles! De qualquer forma, passo a passo!.... Obrigado!

Dei uma olhada em seus códigos. Onde está o indicador personalizado em funcionamento? Há apenas um indicador fictício com um buffer não colorido. É provável que você precise deste artigo: https://www.mql5.com/pt/articles/13578. Ele contém tudo para trabalhar com indicadores personalizados de uma cor.

Готовим мультисимвольные мультипериодные индикаторы
Готовим мультисимвольные мультипериодные индикаторы
  • www.mql5.com
В статье рассмотрим принципы создания мультисимвольных мультипериодных индикаторов и получение от них данных в советниках и индикаторах. Рассмотрим основные нюансы использования мульти-индикаторов в советниках и индикаторах, и их отрисовку через буферы пользовательского индикатора.
 
Artyom Trishkin #:

Dei uma olhada em seus códigos. Onde está o indicador personalizado em funcionamento? Há apenas um indicador fictício com um buffer não colorido. Provavelmente, você precisa deste artigo: https://www.mql5.com/pt/articles/13578. Ele contém tudo para trabalhar com indicadores personalizados de uma cor.

Artem Olá, obrigado por dar uma olhada! Consegui trabalhar com buffers não coloridos, mas é um pouco provisório... por algum motivo, leva muito tempo para carregar... talvez no domingo? Você precisa do histórico? Quando você reinicia o terminal, ele desenha de uma só vez? Na foto do quadro, os três buffers têm o mesmo valor, o que não deveria ser o caso. Deslocamento de uma barra, também no quadro. Com as coloridas, é um problema... Nada carrega! Pode dar uma olhada? Obrigado!


Arquivos anexados:
 
Desculpe-me por ter errado os buffers! Eu acidentalmente mudei o tipo... e depois não o trouxe para o tipo correto! Então adicionamos 0! Recebemos a mesma coisa! CIndMSTF::Calculate::Test_Indi_MSMT: CopyBuffer(0) failed. Erro 4806: os dados não podem ser encontrados! E isso acontece com buffers diferentes!

 
Igor Bakhrushen CopyBuffer(0) failed. Erro 4806: os dados não podem ser encontrados! E isso acontece com buffers diferentes!

Se os dados não forem recebidos, o indicador simplesmente sai de OnCalculate() com o retorno do valor zero, que é igual à indicação de que ainda não foi calculado, e no próximo tick ele tentará receber os dados novamente. Nesse caso, o primeiro acesso aos dados necessários, mas não recebidos, inicia o processo de paginação desses dados.

 
Artyom Trishkin #:

Se os dados não forem recebidos, o indicador simplesmente sairá de OnCalculate() com o retorno do valor zero, o que equivale a uma indicação de que ainda não foi calculado e, no próximo tick, tentará receber os dados novamente. Nesse caso, o primeiro acesso aos dados necessários, mas não recebidos, inicia o processo de paginação desses dados.

Por que esse problema não ocorre quando o terminal é reiniciado? Tudo é desenhado de uma só vez! Ele ocorre quando se muda para outro TF... e, às vezes, esse"array out of range in 'INDI_MSMT_!.mqh' (680,51)" sempre tem tamanho suficiente, e às vezes não.... Isso é um mistério para mim!


 
Igor Bakhrushen #:
INDI_MSMT_.

Não tenho esse arquivo. Não sei como ajudar aqui...

 
Artyom Trishkin #:

Não tenho esse arquivo. Não sei como ajudar aqui...

Arquivos:

Ontem anexei o 'INDI_MSMT_!.mqh', o primeiro arquivo ...