Como adicionar cor verde vermelho no histograma?
Results 1 to 6 of 6

Thread: Como adicionar cor verde vermelho no histograma?

  1. #1
    1 Anexo (s) Olá amigos,

    Eu não sou um codificador especialista e confundo o caminho para adicionar cor verde para obter histograma positivo e cor vermelha para histograma negativo com este indicador.


    O código do indicador:
    Código Inserido/ --------------------------------------------- --------------------- /| CandleAverage_v1. mq4 |/| Copyright © 2006, Forex-TSD. Com |/| Composta por IgorAD, igorad2003 @ yahoo.co.uk |/| http://finance.groups.yahoo.com/group/TrendLaboratory |/p ----------------------------------------------- ------------------- #property copyright Copyright © 2006, Forex-TSD. Link com #property http://www.forex-tsd.com/#property indior_separate_window #property indior_buffers 1 #property indior_color1 DeepSkyBlue/- insira parâmetros extern int Comprimento = 31; extern int H_period = 25; extern int L_period = 27; extern int C_period = 9;/- buffers dual CandleAvg # 91; # 93 ;; dual BarValue # 91; # 93;/ ----------------------------------------------- ------------------- /| Função de inicialização do indicador personalizado |/ ----------------------------------------------- ------------------- int init ()/- indicadores IndiorBuffers (2); SetIndexStyle (0, DRAW_HISTOGRAM); SetIndexBuffer (0, CandleAvg); SetIndexBuffer (1, BarValue);/- nome para DataWindow e indicador subwindow label string short_name = CandleAverage ( Length ); IndiorShortName (short_name); SetIndexLabel (0, CandleAvg); SetIndexDrawBegin (0, comprimento);/- return (0);/ ----------------------------------------------- ------------------- /| Indicador de iteração personalizada serve |/ ----------------------------------------------- ------------------- int begin () int mudança, limite, counted_bars = IndiorCounted (); UpDel duplo, DnDel, H, L, C;/- if (counted_barslt; 0) return (-1); if (counted_bars == 0) limit = Barras-Comprimento-1;/- a barra contada final será contada se (counted_barsgt; 0) limit = Bars-counted_bars; limitação - para (shift = limitação; shiftgt; = 0; alteração -) H = iMA (NULL, 0, H_period, 0, MODE_EMA, PRICE_HIGH, change); L = iMA (NULL, 0, L_period, 0, MODE_EMA, PRICE_LOW, alteração); C = iMA (NULL, 0, C_período, 0, MODE_EMA, PRICE_CLOSE, alteração); UpDel = H - C; DnDel = C - L; if (UpDel lt; DnDel) BarValue # 91, altere # 93; = 1; if (UpDel gt; DnDel) BarValue # 91; altere # 93; = -1; if (UpDel == DnDel) BarValue # 91, altere # 93; = 0; para (shift = limitação; shiftgt; = 0; mudança -) CandleAvg # 91; = iMAOnArray (BarValue, 0, Length, 0, MODE_SMA, change);/- return (0);/ ----------------------------------------------- ------------------- Eu tentei alterar o código abaixo:

    Inserido Código # propriedade indicador_separar_janela # propriedade indior_buffers 2 # propriedade indior_color1 DeepSkyBlue # propriedade indior_color2 Vermelho Mas não funcionou porque o valor do histograma foi salvo apenas em 1 buffer, CandleAvg.

    Como separar o valor negativo e positivo do buffer CandleAvg e adicionar a cor verde vermelho?

    Conselho por favor.

    Obrigado pela ajuda.






  2. #2
    Inclua dois buffers: CandleAvgPlus [] e CandleAvgMinus [] e defina o valor a ser esvaziado por ambos. Em seguida, use uma instrução if em um loop for para atender a esses dois novos buffers. . If (CandleAvg [I] gt; = somenumber) CandleAvgPlus [I] = CandleAvg [Eu]; if (CandleAvg [I]; somenumber) CandleAvgMinus [I] = CandleAvg [Eu]; Agora apenas plotar CandleAvgPlus e CandleAvgMinus em vez de CandleAve Obviamente, declare-os corretamente e inicialize-os corretamente, mas este é realmente o método para separá-los fora sem que eu escreva o código para você. Em uma nota diferente, descobri a maior parte da minha programação apenas observando o código de outras pessoas. Neste cenário, um arquivo na cor MACD mostraria o item inteiro para você

  3. #3

    inclua mais dois buffers: [CandleAvgPlus [] e CandleAvgMinus [] e definido como valor vazio. Em seguida, use uma instrução if em um loop for para preencher esses dois novos buffers. . If (CandleAvg [I] gt; = somenumber) CandleAvgPlus [I] = CandleAvg [Eu]; if (CandleAvg [I]; somenumber) CandleAvgMinus [I] = CandleAvg [Eu]; Agora apenas plotar CandleAvgPlus e CandleAvgMinus em vez de CandleAve Obviamente, declare-os corretamente e inicialize-os corretamente, mas este é o método para separá-los fora sem que eu escreva o código para você. Em uma nota diferente, eu aprendi mais ...
    Obrigado pelo folheto de ajuda415. Obrigado também por sua vontade de reescrever o código para mim, pessoalmente, mas eu prefiro desvendar por mim mesmo e aprender com isso. Eu sou bastante novo no código MQL e preciso descobrir muito. Tentei seguir seu conselho e modificar o código, mas não funcionou. Eu tentei por horas e não sei o motivo pelo qual não está funcionando. Código Inserido/ --------------------------------------------- --------------------- /| CandleAverage_v1. mq4 |/| Copyright © 2006, Forex-TSD. Com |/| Composta por IgorAD, igorad2003 @ yahoo.co.uk |/| http://finance.groups.yahoo.com/group/TrendLaboratory |/ ----------------------------------------------- ------------------- #property copyright Copyright © 2006, Forex-TSD. Com # hyperlink de propriedade http://www.forex-tsd.com/#property indior_separate_window #property indior_buffers 4 #property indior_color1 DeepSkyBlue #propriedade indior_color3 Green #property indior_color4 Vermelho/- parâmetros de entrada extern int Length = 31; extern int H_period = 25; extern int L_period = 27; extern int C_period = 9;/- buffers double CandleAvgNumber91; # 93 ;; double BarValue # 91; # 93; double CandleAvgPlus # 91; # 93 ;; double CandleAvgMinus # 91; # 93 ;;/ ----------------------------------------------- ------------------- /| Função de inicialização do indicador personalizado |/ ----------------------------------------------- ------------------- int init ()/- indicadores IndiorBuffers (4); SetIndexStyle (0, DRAW_NONE); SetIndexStyle (1, DRAW_NONE); SetIndexStyle (2, DRAW_HISTOGRAM); SetIndexStyle (3, DRAW_HISTOGRAM); SetIndexBuffer (0, CandleAvg); SetIndexBuffer (1, BarValue); SetIndexBuffer (2, CandleAvgPlus); SetIndexBuffer (3, CandleAvgMinus);/- nome para DataWindow e indicador subwindow label string short_name = CandleAverage ( Length ); IndiorShortName (short_name); SetIndexLabel (0, CandleAvg); SetIndexDrawBegin (0, comprimento);/- return (0);/ ----------------------------------------------- ------------------- /| Indicador de iteração personalizada serve |/ ----------------------------------------------- ------------------- int begin () int alteração, limitação, counted_bars = IndiorCounted (); double UpDel, DnDel, H, L, C;/- if (counted_barslt; 0) return (-1); if (counted_bars == 0) limit = Barras-Comprimento-1;/- a última barra contada será recontada se (counted_barsgt; 0) restrict = Bars-counted_bars; limitação -; para (shift = limitação; shiftgt; = 0; alteração -) H = iMA (NULL, 0, H_period, 0, MODE_EMA, PRICE_HIGH, change); L = iMA (NULL, 0, L_period, 0, MODE_EMA, PRICE_LOW, alteração); C = iMA (NULL, 0, C_período, 0, MODE_EMA, PRICE_CLOSE, alteração); UpDel = H - C; DnDel = C - L; if (CandleAvgNumber91; altere # 93;gt; = UpDel) CandleAvgPlusNumber91; alteração # 93; = CandleAvg # 91; altere # 93; if (CandleAvg # 91; mudar # 93; lt; DnDel) CandleAvgMinus # 91; mudar # 93; = CandleAvg # 91; altere # 93; if (UpDel lt; DnDel) BarValue # 91, altere # 93; # 1; if (UpDel gt; DnDel) BarValue # 91; altere # 93; = -1; if (UpDel == DnDel) BarValue # 91, altere # 93; = 0; para (shift = limitação; shiftgt; = 0; alteração -) CandleAvgPlus # 91; = iMAOnArray (BarValue, 0, Length, 0, MODE_SMA, change); CandleAvgMinus # 91, altere # 93; = iMAOnArray (BarValue, 0, Length, 0, MODE_SMA, change);/- return (0);/ ----------------------------------------------- ------------------- Por favor ajude.

  4. #4
    Volte ao seu código. Você precisa permitir que o indicador calcule o CandleAve [] como por regular você separa os valores em negativo e positivo. Para que o seu loop inicial faça um monte de cálculos, o próximo loop preenche CandleAve []. Você não precisa alterar esses loops. Hoje devemos criar um terceiro loop for antes da declaração de retorno. As declarações serão usadas se por esse terceiro loop for. Basicamente se CandleAve [i] gt; = 0 então CandleAvePlus [i] = CandleAve [i] mais CandleAveMinus [i] = CandleAve [i]. Basicamente, para codificar em cores, queremos produzir fundamentalmente os buffers de indicador de acordo com o padrão, logo antes do propósito de retorno, os separamos. Para mim, o código de cores é o último passo em um indicador. Apenas um pequeno ponto, mas como você está planejando o CandleAvePlus e o CandleAveMinus, eles devem ser os indicadores 1 e 0. Obviamente, é melhor que seja assim, caso contrário, você terá números misturados. E eu preencho os dois novos buffers com valores para que eles planejem bem.

  5. #5

    Volte para o seu código original ....
    Finalmente funciona perfeitamente. Muito obrigado por sua gentileza e seu indivíduo me ensinando. Desculpe se eu sou muito burro e lento aprendendo o código MQL fora de você. Mais uma vez obrigado. Aqui está o código modificado: Código Inserido/ --------------------------------------- --------------------------- /| CandleAverage_v1. mq4 |/| Copyright © 2006, Forex-TSD. Com |/| Composta por IgorAD, igorad2003 @ yahoo.co.uk |/| http://finance.groups.yahoo.com/group/TrendLaboratory |/ ----------------------------------------------- ------------------- #property copyright Copyright © 2006, Forex-TSD. Com # hyperlink de propriedade http://www.forex-tsd.com/#property indior_separate_window #property indior_buffers 4 #propriedade indior_color1 Green #propriedade indior_color2 Vermelho/- insira parâmetros extern int Comprimento = 31; extern int H_period = 25; extern int L_period = 27; extern int C_period = 9;/- buffers dual CandleAvgPlus # 91; # 93 ;; dual CandleAvgMinus # 91; # 93 ;; CandleAvg dual # 91; # 93 ;; dual BarValue # 91; # 93;/ ----------------------------------------------- ------------------- /| Função de inicialização do indicador personalizado |/ ----------------------------------------------- ------------------- int init ()/- indicadores IndiorBuffers (4); SetIndexStyle (0, DRAW_HISTOGRAM); SetIndexStyle (1, DRAW_HISTOGRAM); SetIndexBuffer (0, CandleAvgPlus); SetIndexBuffer (1, CandleAvgMinus); SetIndexBuffer (2, CandleAvg); SetIndexBuffer (3, BarValue);/- título para DataWindow e indicador subwindow label string short_name = CandleAverage ( Length ); IndiorShortName (short_name); SetIndexLabel (0, CandleAvg); SetIndexDrawBegin (0, comprimento);/- return (0);/ ----------------------------------------------- ------------------- /| Função de iteração do indicador personalizado |/ ----------------------------------------------- ------------------- int start () int shift, limite, counted_bars = IndiorCounted (); UpDel duplo, DnDel, H, L, C;/- if (counted_barslt; 0) return (-1); if (counted_bars == 0) limit = Barras-Comprimento-1;/- o último pub contado será recontado se (counted_barsgt; 0) restrict = Bars-counted_bars; limite; para (deslocamento = limite; deslocamento = 0; deslocamento) H = iMA (NULL, 0, H_period, 0, MODE_EMA, PRICE_HIGH, shift); L = iMA (NULL, 0, L_period, 0, MODE_EMA, PRICE_LOW, shift); C = iMA (NULL, 0, C_period, 0, MODE_EMA, PRICE_CLOSE, shift); UpDel = H - C; DnDel = C - L; deve (UpDel lt; DnDel) BarValue # 91; turno # 93; = 1; deve (UpDel gt; DnDel) BarValue # 91; turno # 93; = -1; deve (UpDel == DnDel) BarValue # 91; turno # 93; = 0; para (shift = limite; shiftgt; = 0; turno) CandleAvg # 91; turno # 93; = iMAOnArray (BarValue, 0, Length, 0, MODE_SMA, shift);para (shift = limite; shiftgt; = 0; shift--) if (CandleAvg # 91; turno # 93; gt; = 0) CandleAvgPlus # 91; turno # 93; = CandleAvg # 91; shift # 93; deve (CandleAvg # 91; turno # 93; lt; 0) CandleAvgMinus # 91; turno # 93; = CandleAvg # 91; shift # 93;/- return (0);/ ----------------------------------------------- -------------------

  6. #6
    [quote = wieb; 3232106] funciona perfeitamente. Muito obrigado pela sua gentileza e seu indivíduo me ensinando. Desculpe quando eu sou tão lento e estúpido aprendendo o código MQL de você. Mais uma vez obrigado. For (shift = limitação; shiftgt; = 0; alteração -) CandleAvg [alterar] = iMAOnArray (BarValue, 0, Length, 0, MODE_SMA, change);* você poderia colocar o código e poupar um loop se (CandleAvg [mudar] gt; = 0) CandleAvgPlus [alterar] = CandleAvg [alterar]; if (CandleAvg [alterar] lt; 0) CandleAvgMinus [alterar] = CandleAvg [alterar]; * Aprendi com os outros, fazendo perguntas e estudando código. Você poderia eliminar um loop como mostrado no código em negrito. Ainda bem que funciona. Você pode criar qualquer indicador multicor, pois é um conceito idêntico.

Permissões de Publicação

  • Não pode publicar novos tópicos
  • Não pode publicar respostas
  • Não pode publicar anexos
  • Não pode editar as suas publicações
  •  
  • Código BB está Ativo
  • Smilies estão Ativos
  • Código [IMG] está Ativo
  • Código [VIDEO] está Ativo
  • Código HTML está Desligado
O site da tradingintuitivo utiliza cookies
O site da tradingintuitivo utiliza cookies, alguns já foram definidos. Pode ler sobre a nossa utilização de cookies aqui. Por favor, clique no botão à direita para aceitar os nossos cookies. Se continuar a usar o site da tradingintuitivo, vamos supor que aceita os nossos cookies.