Глюк отрисовки текстовой метки в МТ4

 

В индикаторе в нижнем углу вывожу спред. Проблема в том, что в младшем разряде периодически накладывается цифра на цифру. Обновился принудительно до билда 943, сегодня обещают 950, но это проблема старая, сомневаюсь, что новый билд ее решит. 
Сразу скажу, спред у меня усредняется по 64 значениям, то есть 5-я цифра не "мельтешит". В индикаторах вечно были проблемы с кастомной графикой, кто-нибудь эту болячку решил,

1     2

int OnInit()
{
// инициализаци индикатора
// создаю лейбл
    ObjectCreate(0, ShortName, OBJ_LABEL, 0, 0, 0);
    ObjectSetInteger(0, ShortName, OBJPROP_ANCHOR, ANCHOR_RIGHT_LOWER);
    ObjectSetInteger(0, ShortName, OBJPROP_CORNER, CORNER_RIGHT_LOWER);
    ObjectSetInteger(0, ShortName, OBJPROP_XDISTANCE, 52);
    ObjectSetInteger(0, ShortName, OBJPROP_YDISTANCE, 28);
    ObjectSetInteger(0, ShortName, OBJPROP_FONTSIZE, 11);
    ObjectSetInteger(0, ShortName, OBJPROP_COLOR, LimeGreen);
    ObjectSetInteger(0, ShortName, OBJPROP_SELECTABLE, true);
    ObjectSetString(0, ShortName, OBJPROP_FONT, "Tahoma");

    return(0);
}

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[])
{



    string s = "Spread = " + DoubleToString(sprd, _Digits);
    ObjectSetString(0, ShortName, OBJPROP_TEXT, s);

    //две строчки с redraw менял местами, убирал по отдельности и вместе - не помогает
    ChartRedraw();
    WindowRedraw();

    return(rates_total);
}
 
Alexey Volchanskiy:

В индикаторе в нижнем углу вывожу спред. Проблема в том, что в младшем разряде периодически накладывается цифра на цифру. Обновился принудительно до билда 943, сегодня обещают 950, но это проблема старая, сомневаюсь, что новый билд ее решит. 
Сразу скажу, спред у меня усредняется по 64 значениям, то есть 5-я цифра не "мельтешит". В индикаторах вечно были проблемы с кастомной графикой, кто-нибудь эту болячку решил,

     

Похоже на вывод от нескольких циклов (программ) в одно место. На графике нет задвоенных экземпляров индикатора?
 
Alexey Volchanskiy:

В индикаторе в нижнем углу вывожу спред. Проблема в том, что в младшем разряде периодически накладывается цифра на цифру. Обновился принудительно до билда 943, сегодня обещают 950, но это проблема старая, сомневаюсь, что новый билд ее решит. 
Сразу скажу, спред у меня усредняется по 64 значениям, то есть 5-я цифра не "мельтешит". В индикаторах вечно были проблемы с кастомной графикой, кто-нибудь эту болячку решил,

     

Никогда такого не было, проверьте не стоят ли еще какие индикаторы, посмотрите имена объектов, провертеть что ShortName имеет одно постоянное имя и у других индикаторов нет такого же имени. Я много работаю с графическими объектами и подобного не замечал.
 
Alexey Volchanskiy:

В индикаторе в нижнем углу вывожу спред. Проблема в том, что в младшем разряде периодически накладывается цифра на цифру. Обновился принудительно до билда 943, сегодня обещают 950, но это проблема старая, сомневаюсь, что новый билд ее решит. 
Сразу скажу, спред у меня усредняется по 64 значениям, то есть 5-я цифра не "мельтешит". В индикаторах вечно были проблемы с кастомной графикой, кто-нибудь эту болячку решил,

     

Ctrl+B, нажать "Все" и увидеть лишний объект ;)
 

Всё в порядке, проверила.

string ShortName = "SPREAD";
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
    ObjectCreate    (0, ShortName, OBJ_LABEL, 0, 0, 0);
    ObjectSetInteger(0, ShortName, OBJPROP_ANCHOR, ANCHOR_RIGHT_LOWER);
    ObjectSetInteger(0, ShortName, OBJPROP_CORNER, CORNER_RIGHT_LOWER);
    ObjectSetInteger(0, ShortName, OBJPROP_XDISTANCE, 52);
    ObjectSetInteger(0, ShortName, OBJPROP_YDISTANCE, 28);
    ObjectSetInteger(0, ShortName, OBJPROP_FONTSIZE, 11);
    ObjectSetInteger(0, ShortName, OBJPROP_COLOR, LimeGreen);
    ObjectSetInteger(0, ShortName, OBJPROP_SELECTABLE, true);
    ObjectSetString (0, ShortName, OBJPROP_FONT, "Tahoma");
    return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
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[])
  {
    //string s = "Spread = " + MarketInfo(_Symbol, MODE_SPREAD);
    string s = "Spread = " + DoubleToString(Ask-Bid, _Digits);
    ObjectSetString(0, ShortName, OBJPROP_TEXT, s);

    ChartRedraw();
    WindowRedraw();

    return(rates_total);
  }
//+------------------------------------------------------------------+

Даже когда два индикатора на график кидаю - объект один и отрисовывается корректно. Два варианта спрэда пробовала.

 
Oksana Berenko:

Всё в порядке, проверила.

Даже когда два индикатора на график кидаю - объект один и отрисовывается корректно. Два варианта спрэда пробовала.

Спасибо! Я разбираюсь, у меня почему-то действительно два лейбла на одном месте. Как обычно, Метаквоты не причем, а так хотелось на кого-то свалить свое головотяпство )))
Причина обращения: