Script para criar linha horizontal de abertura e fechamento

 

Boa tarde.


Por favor alguma alma caridosa poderia me passar um scrip para mql5 com seguintes condições:

1 - Cria duas linhas horizontais, sendo uma para maxima e outra para minima;

2 - Começa a traçar as linhas de hoje em diante;

3- Tem que ser editavel onde poderei deletar ou movimentar as linhas criadas.

Agradeço de coração, muito obrigado.

 

Jonathan, boa noite.

Muito obrigado pelo envio do material, dei uma estudada e realizei o código com base alguns modelos, porém as linhas aparecem somente na barra atual.

Ou seja não é guardado no gráfico as linhas anteriores. Realizei alguns teste manualmente e acredito que tem haver com nome do objeto LinhaAbertura (como sempre é o mesmo nome ele considera a última informação).

Teste realizado: Alterei o nome LinhaAbertura para LinhaAbertura1 e compilei ai no grafico ficou guardado as duas linhas horizontais (LinhaAbertura e LinhaAbertura1).

Nota: Não sei se existe uma string variavel que vai mudando LinhaAbertura1, LinhaAbertura2, LinhaAbertura3, 4, 5,6,7,8......

Agradeço se alguém poder me ajudar, sou leigo no assunto, minha cabeça fritou!!!

#property indicator_chart_window
#property indicator_buffers 3

double op[],cl[]; 
double Abertura;

int OnInit()
  {
   SetIndexBuffer(0,op,INDICATOR_DATA);
   SetIndexBuffer(1,cl,INDICATOR_DATA);
   
   return(INIT_SUCCEEDED);
  }


int OnCalculate(const int rates_total,
               const int prev_calculated,
               const datetime &Time[],
               const double &Open[],
               const double &High[],
               const double &Low[],
               const double &Close[],
               const long &TickVolume[],
               const long &Volume[],
               const int &Spread[])
  {
    int i = 0;
    if(prev_calculated == 0) i = 1;
    else i = prev_calculated-1;
    while(i < rates_total){
            
       op[i] = Open[i];
       cl[i] = Close[i];
       Abertura= op[i];
       
       
        if (op[i]>cl[i] && op[i]<cl[i-1]) //Abertura da primeira barra menor que o Fechamento da segunda barra (gap de baixa linha laranja)
        
        {
            CriarLinhaH(0,0,"LinhaAbertura",Abertura,clrOrange,STYLE_DOT,1,true,false,true,"Candle de abertura");
        }

  else
        if (op[i]<cl[i] && op[i]>cl[i-1]) //Abertura da primeira barra maior que o Fechamento da segunda barra (gap de alta linha azul)
        
        {
            CriarLinhaH(0,0,"LinhaAbertura",Abertura,clrBlue,STYLE_DOT,1,true,false,true,"Candle de abertura");
        }
        
        else
         {
           CriarLinhaH(0,0,"LinhaAbertura",Abertura,clrWhite,STYLE_DOT,1,true,false,true,"Candle de abertura"); // demais linha branca
        }
        i++;
    }
   return(rates_total-1);
  }
  
  

//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);}
    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_);
  }
 
LuisOrtin:

Jonathan, boa noite.

Muito obrigado pelo envio do material, dei uma estudada e realizei o código com base alguns modelos, porém as linhas aparecem somente na barra atual.

Ou seja não é guardado no gráfico as linhas anteriores. Realizei alguns teste manualmente e acredito que tem haver com nome do objeto LinhaAbertura (como sempre é o mesmo nome ele considera a última informação).

Teste realizado: Alterei o nome LinhaAbertura para LinhaAbertura1 e compilei ai no grafico ficou guardado as duas linhas horizontais (LinhaAbertura e LinhaAbertura1).

Nota: Não sei se existe uma string variavel que vai mudando LinhaAbertura1, LinhaAbertura2, LinhaAbertura3, 4, 5,6,7,8......

Agradeço se alguém poder me ajudar, sou leigo no assunto, minha cabeça fritou!!!

Realizei alteração no código e as linhas estão sendo criadas, porém preciso alterar a logica do int linha pois esta sendo criada varias linhas no mesmo preço, pois o contador esta por tick.

Exemplo se no periodo de um minuto tem 20 ticks e criado 20 linhas no memo preço.

Alguem tem uma solução para que só altere o número do contador a cada nova vela?

 

Segue novo código.

Parte a ser corrigida:

int Linha = 0;

Linha +=1;


#property indicator_chart_window

double Open1,Open2,Close1,Close2;

int Linha = 0;


int OnCalculate(const int rates_total,

                const int prev_calculated,

                const int begin,

                const double &price[])                             

  { 

      Open1 =iOpen(_Symbol,PERIOD_M1,1);

      Open2 =iOpen(_Symbol,PERIOD_M1,2);

      Close1=iClose(_Symbol,PERIOD_M1,1);

      Close1=iClose(_Symbol,PERIOD_M1,2);

     

        Linha +=1;

        Comment(Linha);

  

       

      if   (Open1>Close1 && Open1>Close2) //Abertura da primeira barra maior que o Fechamento da segunda barra (gap invertido/linha amarela)

                       

        {

           CriarLinhaH(0,0,IntegerToString(Linha),Open1,clrRed,STYLE_DOT,1,true,false,true,"Fechamento do dia");

        }


      else

            

       CriarLinhaH(0,0,IntegerToString(Linha),Open1,clrWhite,STYLE_DOT,1,true,false,true,"Fechamento do dia");

         

   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);}

    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_);

  }

  





 

ola amigos, na compilaçao aponta erro nesse linha: "unexpected token"

  maValue = iMA(Symbol(), 0, MA_Period, 0, MODE_SMA, PRICE_CLOSE, 0);


please

aguem sabe como resolver??

 grato