Como inserir objeto ancorado ao preço?

 

Olá, eu criei uma função breakeven e coloquei uma linha horizontal marcando os níveis de breakeven. Porém, eu gostaria de colocar um objeto ancorado ao preço e a direita escrito "breakeven 1" igual a imagem anexada. Já fiz algumas tentativas e não consegui. Quem puder me ajude nessa, por favor.


Meu código de linha horizontal do breakeven:

ObjectCreate(0,"BK1",OBJ_HLINE, 0, velas[0].time, PrecoEntrada + NormalizeDouble(BK1_Distancia*_Point, _Digits));
ObjectSetInteger(0,"BK1",OBJPROP_COLOR,clrAqua); 
ObjectSetInteger(0,"BK1",OBJPROP_STYLE, STYLE_DASHDOT);
ObjectSetInteger(0,"BK1",OBJPROP_BACK, true);


Eu tentei criar o objeto dessa forma logo abaixo, mas não sei como ancorar ao preço. Fiz algumas tentativas que não funcionaram.

         string teste = "Teste";
         ObjectCreate(0, teste, OBJ_RECTANGLE_LABEL, 0, 0, 0);
         ObjectSetInteger(0, teste, OBJPROP_XDISTANCE, 200);   // Distancia esquerda
         ObjectSetInteger(0, teste, OBJPROP_YDISTANCE, 207);  // Distancia baixo
         ObjectSetInteger(0, teste, OBJPROP_XSIZE, 184);      // Largura
         ObjectSetInteger(0, teste, OBJPROP_YSIZE, 22);      // Altura
         ObjectSetInteger(0, teste, OBJPROP_BGCOLOR, clrRed);
         ObjectSetInteger(0, teste, OBJPROP_BORDER_TYPE, BORDER_FLAT);
         ObjectSetInteger(0, teste,OBJPROP_COLOR,clrRed);
         ObjectSetInteger(0, teste, OBJPROP_CORNER, CORNER_RIGHT_LOWER); 
Arquivos anexados:
img.jpg  36 kb
 
Rafael Magalhães:

Olá, eu criei uma função breakeven e coloquei uma linha horizontal marcando os níveis de breakeven. Porém, eu gostaria de colocar um objeto ancorado ao preço e a direita escrito "breakeven 1" igual a imagem anexada. Já fiz algumas tentativas e não consegui. Quem puder me ajude nessa, por favor.


Meu código de linha horizontal do breakeven:


Eu tentei criar o objeto dessa forma logo abaixo, mas não sei como ancorar ao preço. Fiz algumas tentativas que não funcionaram.

Sugiro usar um BUTTON, que já contepla o texto interno. Do contrário, você terá que usar um texto adicional ao retângulo...
 

O meu problema não é a criação do objeto, mas sim a ancoragem ao preço. Se souber como eu posso resolver isso eu agradeço.


Eu vi até outra postagem  com essa minha dúvida e o Fernando Silva chegou a explicar, mas mesmo assim eu ainda não consegui aplicar a função porque não entendi muito bem.

https://www.mql5.com/pt/forum/362241

Criação de Objeto Retângulo
Criação de Objeto Retângulo
  • 2021.02.07
  • www.mql5.com
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...
 
Rafael Magalhães:

O meu problema não é a criação do objeto, mas sim a ancoragem ao preço. Se souber como eu posso resolver isso eu agradeço.


Eu vi até outra postagem  com essa minha dúvida e o Fernando Silva chegou a explicar, mas mesmo assim eu ainda não consegui aplicar a função porque não entendi muito bem.

https://www.mql5.com/pt/forum/362241

Estude a funções ChartXYToTimePrice() e ChartTimePriceToXY().

;)

 

Esse código abaixo irá te ajudar bastante. Porém acredito que ficará mais fácil se voce utilizar a classe "<Controls\Button.mqh>".


             long ChartNm = ChartID();
             int SubWin = 0;
             datetime GimmeTime = iTime(Symbol(),PERIOD_M5,0);
             double CurrPrice = PositionGetDouble(POSITION_PRICE_OPEN);//SymbolInfoDouble(Symbol(),SYMBOL_ASK);
             int x,y;
             ChartTimePriceToXY(ChartNm,SubWin,GimmeTime,CurrPrice,x,y);
             
             ObjectCreate(ChartNm,"Rec",OBJ_RECTANGLE_LABEL,SubWin,0,0);
             ObjectSetInteger(ChartNm,"Rec",OBJPROP_XDISTANCE,x);
             ObjectSetInteger(ChartNm,"Rec",OBJPROP_YDISTANCE,y);
             ObjectSetInteger(ChartNm,"Rec",OBJPROP_XSIZE,70);
             ObjectSetInteger(ChartNm,"Rec",OBJPROP_YSIZE,20);
             ObjectSetInteger(ChartNm,"Rec",OBJPROP_BGCOLOR,clrRed);
             
             ObjectCreate(ChartNm,"Text",OBJ_LABEL,SubWin,0,0);
             ObjectSetInteger(ChartNm,"Text",OBJPROP_XDISTANCE,x+2);
             ObjectSetInteger(ChartNm,"Text",OBJPROP_YDISTANCE,y+1);
             ObjectSetInteger(ChartNm,"Text",OBJPROP_COLOR,clrWhite);
             ObjectSetInteger(ChartNm,"Text",OBJPROP_FONTSIZE,10);
             ObjectSetString(ChartNm,"Text",OBJPROP_TEXT,"some text");