Criação de Objeto Retângulo

 

Bom dia amigos,

estou implementando em meu código, ao criar uma ordem stop, a plotagem de etiquetas nos níveis de preço de entrada, sl e tp. Seria uma linha horizontal (que o mt5 já plota) e um objeto retângulo à direita colado a linha de preços, como várias plataformas de negociação fazem. A linha vertical sem problemas mas o retângulo estou tendo dificuldades na coordenada Y que deveria receber a linha de preço. Alguém por gentileza poderia me ajudar?

void desenhaRetangulo(string nomer, datetime dtr, double prr, color corr)
    {ObjectCreate(0,nomer,OBJ_RECTANGLE_LABEL,0,0,0);
     ObjectSetInteger(0,nomer,OBJPROP_CORNER,CORNER_RIGHT_UPPER);
     ObjectSetInteger(0,nomer,OBJPROP_XDISTANCE,50);      // distância do eixo de preços 
     ObjectSetInteger(0,nomer,OBJPROP_XSIZE,50);          // largura
     ObjectSetInteger(0,nomer,OBJPROP_YDISTANCE,0);       // distância do eixo de datas
     ObjectSetInteger(0,nomer,OBJPROP_YSIZE,15);          // altura 
     ObjectSetInteger(0,nomer,OBJPROP_BGCOLOR,corr);
     ObjectSetInteger(0,nomer,OBJPROP_BORDER_TYPE,BORDER_FLAT);}
 

Olá.


Vc pode usar a função ChartTimePriceToXY para converter o teu valor em coordenada gráfica.


Se quiser que o retângulo fique metade para cima da linha e metade para baixo, só verificar qual o tamanho que você vai dar para o retângulo e diminuir a metade deste valor da coordenada recebida pela função.

 
void desenhaRetangulo(string nomer, datetime dtr, double prr, color corr)
    {int x;
     int y;
     ChartTimePriceToXY(0,0,dtr,prr,x,y);
    
     Print("x -> ",x," ------ y -> ",y);
    
     ObjectCreate    (0,nomer,OBJ_RECTANGLE,0,0,0);
     ObjectSetInteger(0,nomer,OBJPROP_CORNER,CORNER_RIGHT_UPPER);
     ObjectSetInteger(0,nomer,OBJPROP_XDISTANCE,50);                                  // distância do eixo de preços 
     ObjectSetInteger(0,nomer,OBJPROP_XSIZE,50);                                      // largura
     ObjectSetInteger(0,nomer,OBJPROP_YDISTANCE,y-7);                                 // distância do eixo de datas
     ObjectSetInteger(0,nomer,OBJPROP_YSIZE,14);                                      // altura 
     ObjectSetInteger(0,nomer,OBJPROP_BGCOLOR,corr);
     ObjectSetInteger(0,nomer,OBJPROP_BORDER_TYPE,BORDER_FLAT);}

Obrigado Fernando, deu certo. O único problema é que o retângulo desenhado fica fixo em tamanho e posição no gráfico. Se vc amplia ou diminui o gráfico ele fica no mesmo tamanho e posição perdendo o efeito desejado. Sabe como corrigir isso?

 
É so deletar a imagem e inserir novamente com os novos pontos
 
Obrigado Eduardo. Qual seria o evento para eu saber se o tamanho do gráfico foi alterado?