Filtro Selecionar OBJ_HLINE por valor

 

Boa noite.


Estou precisando excluir alguns objetos HLINE no meu gráfico, mas necessito utilizar o critério de determinado faixa de preço.


Alguma alma poderia me auxiliar com este script?

 
LuisOrtin:

Boa noite.


Estou precisando excluir alguns objetos HLINE no meu gráfico, mas necessito utilizar o critério de determinado faixa de preço.


Alguma alma poderia me auxiliar com este script?

vc precisa criar os objetos por grupos conforme sua lógica, com isso vc consegue excluir cada objeto individualmente ou um grupo de objetos sem excluir outro grupo.

vc consegue fazer isso através do nome do objeto.

ObjectCreate(0,"grupo1"+nome1,OBJ_HLINE,0,0,pr)
ObjectCreate(0,"grupo1"+nome2,OBJ_HLINE,0,0,pr)
ObjectCreate(0,"grupo1"+nome3,OBJ_HLINE,0,0,pr)

// remove todos os objetos "grupo1"
ObjectsDeleteAll(0,"grupo1",0,-1)

// remove somente o objeto "grupo1"+nome3
ObjectDelete(0,"grupo1"+nome3); 
 
ArmandoJunior70:

vc precisa criar os objetos por grupos conforme sua lógica, com isso vc consegue excluir cada objeto individualmente ou um grupo de objetos sem excluir outro grupo.

vc consegue fazer isso através do nome do objeto.

ArmandoJunior70: Muito obrigado pela inenarrável ajuda, vou utilizar este script com certeza.


Mas fiquei com uma duvida, por exemplo se possuo uma linha no preço de 1.780.25 e preciso deletar somente esta linha (grafico possui várias).


O critério que utilizarei é preço da barra:  open1 < 1.780.25 > close1. 


Você tem alguma idéia de como fazer isso?


Agradeço antecipadamente a ajuda, muito obrigado!

 
LuisOrtin:

ArmandoJunior70: Muito obrigado pela inenarrável ajuda, vou utilizar este script com certeza.


Mas fiquei com uma duvida, por exemplo se possuo uma linha no preço de 1.780.25 e preciso deletar somente esta linha (grafico possui várias).


O critério que utilizarei é preço da barra:  open1 < 1.780.25 > close1. 


Você tem alguma idéia de como fazer isso?


Agradeço antecipadamente a ajuda, muito obrigado!

eu faria assim: criaria a linha com o preço em seu nome:

ObjectCreate(0,DoubletoString(preco),OBJ_HLINE,0,0,pr);

depois faria um loop no fechamento da vela para ver se esta linha esta contida neste range para então excluí-la:

for (int i=open1; i <= close1; i++)    

    {ObjectDelete(0,IntegertoString(i));}

isso deletaria todos as linhas entre o preço de abertura e o preço de fechamento da vela. só atente-se em qdo a vela for de baixa o loop deve ser ao contrário e o incremento do loop deve ser a variação do preço (tick) conforme cada ativo. e precisaria afinar as conversões double, int e string conforme o ativo tb.

acho que daria certo mas precisaria testar.

 
ArmandoJunior70:

eu faria assim: criaria a linha com o preço em seu nome:

depois faria um loop no fechamento da vela para ver se esta linha esta contida neste range para então excluí-la:

isso deletaria todos as linhas entre o preço de abertura e o preço de fechamento da vela. só atente-se em qdo a vela for de baixa o loop deve ser ao contrário e o incremento do loop deve ser a variação do preço (tick) conforme cada ativo. e precisaria afinar as conversões double, int e string conforme o ativo tb.

acho que daria certo mas precisaria testar.

ArmandoJunior70: 

Realizei tudo que é jeito e os objetos não são deletados com base critério de velas.

Minha cabeça esta fritando, mas sou brasileiro não desisto nunca, caso tenha outra sugestão agradeço!

 
LuisOrtin:

ArmandoJunior70: 

Realizei tudo que é jeito e os objetos não são deletados com base critério de velas.

Minha cabeça esta fritando, mas sou brasileiro não desisto nunca, caso tenha outra sugestão agradeço!

Essas são as maneiras de deletar um objeto gráfico via programação:

ObjectsDeleteAll(0,"grupo1",0,-1)
ObjectDelete(0,"grupo1"+nome3); 

Se o nome do objeto (string) estiver correto não há erro. por isso tb é importante a lógica de criação das linhas.

vc precisa informar:

-  as linhas são criadas pelo EA? se sim, qual a lógica de criação?

- a lógica para deletar (pelo que entendi seria deletar as linhas horizontais qdo o preço passa por elas. Seria isso mesmo?)

- ativo que está trabalhando (apesar que dá para fazer uma rotina genérica com base nas variáveis dígitos e tick dos ativos)

 
ArmandoJunior70:

Essas são as maneiras de deletar um objeto gráfico via programação:

Se o nome do objeto (string) estiver correto não há erro. por isso tb é importante a lógica de criação das linhas.

vc precisa informar:

-  as linhas são criadas pelo EA? se sim, qual a lógica de criação?

- a lógica para deletar (pelo que entendi seria deletar as linhas horizontais qdo o preço passa por elas. Seria isso mesmo?)

- ativo que está trabalhando (apesar que dá para fazer uma rotina genérica com base nas variáveis dígitos e tick dos ativos)

ArmandoJunior70:

Segue ultima versão do meu código.

#property indicator_chart_window
double Open1,Close1,Close2;

   
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const int begin,
                const double &price[])                             
  {   
      Open1 =iOpen (_Symbol,PERIOD_M1,1);
      Close1=iClose(_Symbol,PERIOD_M1,1);
      Close2=iClose(_Symbol,PERIOD_M1,2);
        {
   
    for (int i=Open1; i <=Close1; i++)   
    {ObjectDelete(0,IntegerToString(i));}
    }           
       
            if (Open1>Close1 && Open1<Close2)  
                   {
                     CriarLinhaH(0,0,Open1,Open1,clrOrange,STYLE_DOT,1,true,false,true,"Gap Baixa");
                   }
   else
            if (Open1<Close1 && Open1>Close2)     
                   {
                     CriarLinhaH(0,0,Open1,Open1,clrBlue,STYLE_DOT,1,true,false,true,"Gap Alta");
                   } 
    return(rates_total);     
  }


//CÓDIGO PARA A CRIAÇÃO DE LINHAS HORIZONTAIS:
void CriarLinhaH(const long janela,
                 const int subjanela,
                 const string nome,
                 double preco,
                 color cor,
                 const ENUM_LINE_STYLE estilo,
                 const int tamanho,
                 const bool oculto,
                 const bool fundo,
                 bool selecionavel,
                 string dica_=NULL)
  {
    if (ObjectFind(janela,nome)==-1)
    ObjectCreate(janela,nome,OBJ_HLINE,subjanela,0,preco);
    ObjectSetDouble(janela,nome,OBJPROP_PRICE,preco);
    ObjectSetInteger(janela,nome,OBJPROP_COLOR,cor);
    ObjectSetInteger(janela,nome,OBJPROP_STYLE,estilo);
    ObjectSetInteger(janela,nome,OBJPROP_WIDTH,tamanho);
    ObjectSetInteger(janela,nome,OBJPROP_HIDDEN,oculto);
    ObjectSetInteger(janela,nome,OBJPROP_BACK,fundo);
    ObjectSetInteger(janela,nome,OBJPROP_SELECTABLE,selecionavel);
    ObjectSetString(janela,nome,OBJPROP_TOOLTIP,dica_);
  }

Agradeço por todo tempo que tem investido no meu projeto.


- a lógica para deletar (pelo que entendi seria deletar as linhas horizontais qdo o preço passa por elas. Seria isso mesmo?)

Resposta: Correto

- ativo que está trabalhando (apesar que dá para fazer uma rotina genérica com base nas variáveis dígitos e tick dos ativos)

Ativo: XAUUSD


Muito obrigado!

 
LuisOrtin:

ArmandoJunior70:

Segue ultima versão do meu código.

Agradeço por todo tempo que tem investido no meu projeto.


- a lógica para deletar (pelo que entendi seria deletar as linhas horizontais qdo o preço passa por elas. Seria isso mesmo?)

Resposta: Correto

- ativo que está trabalhando (apesar que dá para fazer uma rotina genérica com base nas variáveis dígitos e tick dos ativos)

Ativo: XAUUSD


Muito obrigado!

Ok Luis, agora entendi. Vc está criando um Indicador para fazer isto, não sei se é possível. Com um Expert Advisor com certeza é. Tente fazer com um EA. Vou tentando aqui tb.

Razão: