Cor do indicador padrão

 

Boa tarde!

Como é que se muda a cor do indicador padrão?

Obrigado, Mikhail

 
Mikalas:

Como posso mudar a cor do programa indicador padrão?

Nunca tinha feito isto antes, mas aqui vai uma ideia. Deve abrir o código do indicador padrão e encontrar aí linhas com indicador_cor*.

Algo do género.

//--- японские свечи будут рисоваться цветом clrDodgerBlue
#property indicator_color1  clrDodgerBlue

Depois inserirá a cor necessária. Ver também Referência MQL5 / Indicadores Personalizados / Relação entre Propriedades e Funções do Indicador e Referência MQL5 / Constantes, Enumerações e Estruturas Padrão / Constantes do Indicador / Estilos de Desenho

 

Obrigado, é claro.

Mas acontece que cada vez que tenho de corrigir o código?

Mikhail

 
Mikalas:

Obrigado, é claro.

Mas será que isso significa que tem de mudar o código de cada vez?

Faça o indicador "padrão" seu, - e insira as suas opções nele. Por exemplo (ideia pura): colocar cores nos parâmetros de entrada, e depois processá-las em Oninit() pela função PlotIndexSetInteger(N-1, PLOT_LINE_COLOR, nColor). Os exemplos na Referência podem ajudar. Então não pode editar o código em si, mas definir a cor desejada através das propriedades do indicador quando o iniciar ou alterar.
 
Mikalas:

Obrigado, é claro.

Mas acontece que tem de corrigir o código de cada vez?

Há algo na sua lógica. A sua pergunta original era:

Mikalas:

Como alterar programticamente a cor do indicador padrão?

 
abolk:

Há algo na sua lógica. Perguntou originalmente:

Caro abolk!

Obviamente, a partir do seu código.

Mikhail

 
Yedelkin:
Faça o indicador "in-house" seu, - e insira as suas opções nele. Por exemplo (ideia pura): colocar cores nos parâmetros de entrada, e depois processá-las em Oninit() pela função PlotIndexSetInteger(N-1, PLOT_LINE_COLOR, nColor). Os exemplos na Referência podem ajudar. Então não pode editar o código em si, mas definir a cor desejada através das propriedades do indicador quando o iniciar ou alterar.

Muito obrigado.

É pena que os criadores não tenham pensado nisso.

Este código deveria ter funcionado, MAS...., infelizmente...

params[0].type = TYPE_INT;
        params[0].integer_value = 10;
        
        params[1].type = TYPE_INT;
        params[1].integer_value = 0;
        
        params[2].type = TYPE_INT;
        params[2].integer_value = MODE_SMA;
        
        params[3].type = TYPE_INT;
        params[3].integer_value = PRICE_MEDIAN;
        
        params[4].type = TYPE_COLOR;
        params[4].double_value = clrBlue;
        
        ma_handle = IndicatorCreate( NULL, PERIOD_CURRENT, IND_MA, 5, params );
        if ( ma_handle != INVALID_HANDLE )
      {
        ChartIndicatorAdd( 0, 0, ma_handle );
      }
 
Mikalas:

Este código deveria ter funcionado, MAS...., infelizmente...

Não funcionou com a função IndicatorCreate() - acabou por ser mais fácil criar os seus indicadores personalizados. No entanto, uma vez que citou apenas uma parte do código, uma pergunta: zerou os parâmetros variáveis antes de o utilizar? Por exemplo, como este:

MqlParam params;
ZeroMemory(params); 

E que código de erro é que a sua entrada recupera?

Fê-lo:

ArrayResize(params,5);
?

Além disso, o indicador IND_MA(iMA) não tem nenhum parâmetro tal como "Cor", e tem-no especificado. Veja um exemplo de utilização do iMA aqui: Referência MQL5 / Acesso a séries temporais e indicadores / IndicatorCreate.

 
Mikalas:

Este código deveria ter funcionado

Porquê? Explique primeiro porque é que a cor é um número real?

        params[4].type = TYPE_COLOR;
        params[4].double_value = clrBlue;
 

Boa tarde, Stringo e Yedelkin!

Provavelmente não leu atentamente a minha mensagem, que dizia

"É pena que os criadores não tenham pensado nisso. "

Agora, deixem-me explicar porque escrevi o código acima.

A partir das definições de Média Móvel, pode-se ver claramente que o indicador tem 7 parâmetros (5 parâmetros principais + 2 linhas).

Isto é o que diz no separador "Parâmetros".

Se puder alterar TODOS os parâmetros "manualmente", isso significa que deve haver

o que os criadores fizeram - alterar TODOS os parâmetros programmaticamente!

Na função IndicatorCreate, mas não até ao fim (ou é um BAG).

MA

A estrutura MqlParam permite-lhe introduzir uma cor - TYPE_COLOR(ENUM_DATATYPE);

A partir da referência MQL5:

O tipo de cor é concebido para armazenar informação de cor e ocupa 4 bytes na memória. O primeiro byte é ignorado, os 3 bytes restantes contêm os componentes RGB.

......

A representação inteira é escrita como número hexadecimal ou decimal. Umnúmero hexadecimal é 0x00BBGGRR

//--- representação de números inteiros
0xFFFFFFFFFF // branco
16777215 // branco
0x008000 //verde
32768 //verde

Fim da citação.

estruturar MqlParam
{
ENUM_DATATYPE tipo; // tipo de parâmetro de entrada, valor de enumeração ENUM_DATYPE
long integer_value; // campo para armazenar um valor inteiro
duplo duplo_valor; // campo para armazenamento de valor duplo ou flutuante
string string_value; // campo para armazenamento do valor do tipo de string
};

(Primeiro tentei durante muito tempo não funcionar, e depois tentei o dobro - também não funcionou, o que permanece no código).

Deveria ser assim:

MqlParam params[5];


.........

params[4].type = TYPE_COLOR;
params[4].integer_value = clrBlue; // - cor azul 0x00FF0000 (16711680)

stringo, respondi à sua pergunta "porque raio não"?

Mais uma vez, é uma pena que os criadores não tenham feito uma mudança de cor.

Com todo o respeito, Mikhail

 
Mikalas:

Boa tarde, Stringo e Yedelkin!

Provavelmente não leu atentamente a minha mensagem, que dizia

"É pena que os criadores não tenham pensado nisso. "

Mikalas, já há aqui tantos peritos a tirar conclusões precipitadas para outros que é assustador. Não aumente o seu número, por favor.

A seguir, ajudei-o fazendo perguntas específicas não emocionais. Em vez de lhes responder, diz-me "como chegou a este ponto da sua vida". O que quer? -Convencer alguém de que existem bugs que detectou, ou "programmaticamente" melhorar o seu código? Se vir algum "bug" - contacte o Service Desk com uma descrição completa da situação. Se quiser "programar" o trabalho - aprofundar a criação e funcionamento dos indicadores.