Как вывести число справа от текущей цены

 

Добрый день, как вывести любое число возле цены справа? точнее даже вопрос состоит в том, какие координаты у Label

У меня получилось вывести текстом вот так:

      SetText("NAME", "Тут любое число", ColorOnSign(tp), TimeCurrent(), SymbolInfoDouble(Symbol(),SYMBOL_BID), text_size);

где:

TimeCurrent() - последнее текущее время
SymbolInfoDouble(Symbol(),SYMBOL_BID) - цена


Как сделать тоже самое но только с LABEL, ведь там нужно знать координаты X и У


 
Sergey Kolemanov:

Ну наверное перевести координаты X/Y в значения время/цена

Могли бы вы объяснить как заменить их? пожалуйста, я понимаю наверное глупый вопрос

 
vebster005:

Добрый день, как вывести любое число возле цены справа? точнее даже вопрос состоит в том, какие координаты у Label

У меня получилось вывести текстом вот так:

где:


Как сделать тоже самое но только с LABEL, ведь там нужно знать координаты X и У


https://www.mql5.com/en/code/23840

Easy Canvas (iCanvas)
Easy Canvas (iCanvas)
  • www.mql5.com
The library and iCanvas class simplify writing programs using Canvas. Here is an example of a simple indicator using this library. In this example, the indicator body features no function for processing OnChartEvent events. But it may also be present. struct Window:  If you do not need an instance of the Canvas class for the full window, you...
 

В этом случае Label - лишнее звено. Вполне достаточно OBJ_TEXT. Ведь все равно нужно знать время открытия бара, который крайний справа на графике. Вот по этому времени/цене и отображается OBJ_TEXT.

 

Вот так:

#define FONT_NAME       "Tahoma"
#define FONT_SIZE       10

#define OBJECT_NAME "Sample"

int OnInit(void)
{
   return(INIT_SUCCEEDED);
}

void OnDeinit(const int reason)
{
   ObjectDelete(0, OBJECT_NAME);
}

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 &tick_volume[],
                const long &volume[],
                const int &spread[])

{
   int nBars = int(ChartGetInteger(0, CHART_WIDTH_IN_BARS));
   int nFirstBar = int(ChartGetInteger(0, CHART_FIRST_VISIBLE_BAR));
   datetime dtRightBar = (nBars < nFirstBar)? iTime(NULL, 0, nFirstBar - nBars) : iTime(NULL, 0, 0) + (nBars - nFirstBar) * PeriodSeconds();
   ShowText(OBJECT_NAME, dtRightBar, Bid, "MyText", "\n", clrBlue, ANCHOR_RIGHT_LOWER);


   return(rates_total);

}
//+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
//| Отображение объекта "Текст"                                                                                                                                                                       |
//+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
void ShowText(string name, datetime time, double price, string text, string toolTip, color clr, ENUM_ANCHOR_POINT anchor)
{
   if (ObjectFind(0, name) < 0)
   {
      ObjectCreate(0, name, OBJ_TEXT, 0, time, price);
      ObjectSetString(0, name, OBJPROP_FONT, FONT_NAME);
      ObjectSetInteger(0, name, OBJPROP_FONTSIZE, FONT_SIZE);
      ObjectSetString(0, name, OBJPROP_TEXT, text); 
      ObjectSetString(0, name, OBJPROP_TOOLTIP, toolTip);
      ObjectSetInteger(0, name, OBJPROP_COLOR, clr);
      ObjectSetInteger(0, name, OBJPROP_ANCHOR, anchor);
      ObjectSetInteger(0, name, OBJPROP_BACK, false);
      ObjectSetInteger(0, name, OBJPROP_HIDDEN, true);
      ObjectSetInteger(0, name, OBJPROP_SELECTABLE, false);
      return;
   }
   
   ObjectMove(0, name, 0, time, price);
   ObjectSetInteger(0, name, OBJPROP_COLOR, clr);
   ObjectSetString(0, name, OBJPROP_TEXT, text); 
}

Получаем:


 
Ihor Herasko:

Вот так:

Получаем:


Спасибо большое, но такой вариант у меня есть, и он не подходит потому что когда двигаем рафик, этот текст остается на месте, мне поэтому и нужно было на Label 
Пожалуйста помогите перевести

 
vebster005:

Спасибо большое, но такой вариант у меня есть, и он не подходит потому что когда двигаем рафик, этот текст остается на месте, мне поэтому и нужно было на Label 
Пожалуйста помогите перевести

А что не получается? Документацию читали? Там ведь есть пример.

 
vebster005:

Спасибо большое, но такой вариант у меня есть, и он не подходит потому что когда двигаем рафик, этот текст остается на месте, мне поэтому и нужно было на Label 
Пожалуйста помогите перевести

Еще раз - не нужен Вам этот Label для решения поставленной задачи. Дальше всего лишь OnChartEvent() добавить, чтобы отследить изменения графика. Это проще простого уже. Тут приготовили, в рот положили. Жевать уже не будут.

 
Ihor Herasko:

Еще раз - не нужен Вам этот Label для решения поставленной задачи. Дальше всего лишь OnChartEvent() добавить, чтобы отследить изменения графика. Это проще простого уже. Тут приготовили, в рот положили. Жевать уже не будут.

нет, вы не поняли, TEXT остается на графике, а LABEL он идёт вместе с графиком, мне нужно чтобы при просмотре графика текст оставался на месте, тобишь работало как LABEL 

Или же вы это поняли и говорите что так можно сделать только через TEXT, если так ток как это сделать?

 
vebster005:

нет, вы не поняли, TEXT остается на графике, а LABEL он идёт вместе с графиком, мне нужно чтобы при просмотре графика текст оставался на месте, тобишь работало как LABEL 

Или же вы это поняли и говорите что так можно сделать только через TEXT, если так ток как это сделать?

ОК. Жую...

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 &tick_volume[],
                const long &volume[],
                const int &spread[])

{
   CalculateAndShowObject();

   return(rates_total);

}

void OnChartEvent(const int id,const long& lparam,const double& dparam,const string& sparam)
{
   if (id == CHARTEVENT_CHART_CHANGE)
      CalculateAndShowObject();   
}

void CalculateAndShowObject()
{
   int nBars = int(ChartGetInteger(0, CHART_WIDTH_IN_BARS));
   int nFirstBar = int(ChartGetInteger(0, CHART_FIRST_VISIBLE_BAR));
   datetime dtRightBar = (nBars < nFirstBar)? iTime(NULL, 0, nFirstBar - nBars) : iTime(NULL, 0, 0) + (nBars - nFirstBar) * PeriodSeconds();
   ShowText(OBJECT_NAME, dtRightBar, Bid, "MyText", "\n", clrBlue, ANCHOR_RIGHT_LOWER);
}


 
Ihor Herasko:

ОК. Жую...


Спасибо большое я только начинаю познавать этот язык, и я не мог представить что такое можно сделать и через TEXT, ведь TEXT и Label этим и отлючаются, и зачем тогда 2 разных если можно сделать все через TEXT - странно! Спасибо больше, я уже столько информации перерыл, как отследить его) но так и не нашёл, подскажите как можно по быстрому находить ответ, ведь я искал через документацию. Или же всего лишь нужно знать полностью язык. Спасибо за ответ


И ответьте пожалуйста, как быстрее или как более правильнее будет как вы сделали или через преобразование координат X У ???