Текст в Индюке

 

Добрый День!

Идея:

Под собственно сигналом на основном графике индюк должен рисовать ещё и результаты вычислений. То есть - стрелка, под ней цифра. Написал вот такую штуку:
(выдержки)
//---- indicator settings

#property  indicator_chart_window

#property  indicator_buffers 3

#property  indicator_color1  Blue

#property  indicator_color2  Red

#property  indicator_color3  White

//---- indicator buffers

double BufferUp[],BufferDn[],BufferCl[],BuyTg[],SellTg[];

int st,st1, nA, i;

int init()

  {

   IndicatorBuffers(3);

//---- drawing settings

   SetIndexStyle(0,DRAW_ARROW,2,1);

   SetIndexArrow(0,233);

   SetIndexStyle(1,DRAW_ARROW,2,1);

   SetIndexArrow(1,234);

   SetIndexStyle(2,DRAW_ARROW,2,2);

   SetIndexArrow(2,251);  

   SetIndexBuffer(0,BufferUp);//стрелка синяя верх

   SetIndexBuffer(1,BufferDn);//стрелка красная вниз

   SetIndexBuffer(2,BufferCl);//крестик

return(0);}

int start()

  {

……………………………..

for(i=limit1; i>=0; i--) 

   {

     if(nA == 0)

       {

       if(……………………………)

         {

         BuyTg[i] = Close[i] + ……………………………;

        

  //      Print("BuyTg=",BuyTg[i],"  ADX=",ADX[i]);

ObjectCreate("BuyTg"+i,OBJ_TEXT,0,Time[i+1],Low[i+1]-st1*Point);

ObjectSetText("BuyTg"+i,DoubleToStr(BuyTg[i],5),10,NULL,White);

         BufferUp[i+1]=Low[i+1]-st*Point;

         nA = 20;

         }

        }

//=========================================

это - покупка, дальше - продажа, то же самое....

Так вот - самое интересное:

1) БУФЕРА-СТРЕЛКИ ОН РИСУЕТ, А ЦИФРЫ НЕ ХОЧЕТ, ХОТЬ ТРЕСНИ! И НА ИСТОРИИ, И ОН-ЛАЙН. Иногда - рисует, но как-то выборочно.....)))

2) А если рисует цифру, то вместо вот этого самого BuyTg[i] выдаёт нули. Послушно, как велено с пятью дополнительными нулями после запятой! 

3) Печатать (Print) в журнале не хочет вообще ничего! Поэтому я его заремил за ненадобностью.

4) Пробовал ObjectCreate("BuyTg"[i],.........) - один хрен.


ПОМОГИТЕ, ЛЮДИ ДОБРЫЕ! КАК ЕГО ЗАСТАВИТЬ РАБОТАТЬ???

 

...или, может, через дополнительные буфера как-то?...............

 

поможет?

только печатайте не в цикле, а после него

 

Если добавить в начале индикатора:

#property strict

то, я думаю, Вы сможете понять, в чем дело. Индикатор вообще перестанет работать по ошибке выхода за пределы массива.

 
Ihor Herasko:

Если добавить в начале индикатора:

то, я думаю, Вы сможете понять, в чем дело. Индикатор вообще перестанет работать по ошибке выхода за пределы массива.


Интересно, Спасибо!

Вот только легче не стало))))

по поводу:

ObjectCreate("BuyTg"[i],OBJ_TEXT,0,Time[i+1],Low[i+1]-st1*Point); 

пишет:

implicit conversion from 'number' to 'string'


 
Artemij:

Интересно, Спасибо!

Вот только легче не стало))))

по поводу:

ObjectCreate("BuyTg"[i],OBJ_TEXT,0,Time[i+1],Low[i+1]-st1*Point); 

пишет:

implicit conversion from 'number' to 'string'


По поводу последнего, это легко, здесь неявное преобразование из integer в string. Здесь нужно i преобразовать в string например, так:

ObjectCreate("BuyTg"+(string)i,OBJ_TEXT,0,Time[i+1],Low[i+1]-st1*Point);

или так:

ObjectCreate("BuyTg"+IntegerToString(i),OBJ_TEXT,0,Time[i+1],Low[i+1]-st1*Point);

 

Подскажите, кто знает.

Как текст писать через буфер?

Т.е., надо расположить определённый текст на графике в определённом месте. Функция OBJ_TEXT не работает на истории. Кроме того, при изменении настроек индюка текст -  как объект - не изменится, а перепишется "сверху". Если вставить OBJ_DELET, все текстовые метки будут переписываться при каждом тике, что тоже не есть гуд.

Идея же в том, чтобы значения на графике на истории менялись с изменением настроек индюка.

Не хватает у меня образования для реализации этой идеи. Помогите, пожалуйста, кто может/знает.

 
Artemij:

Подскажите, кто знает.

Как текст писать через буфер?

Т.е., надо расположить определённый текст на графике в определённом месте. Функция OBJ_TEXT не работает на истории. Кроме того, при изменении настроек индюка текст -  как объект - не изменится, а перепишется "сверху". Если вставить OBJ_DELET, все текстовые метки будут переписываться при каждом тике, что тоже не есть гуд.

Идея же в том, чтобы значения на графике на истории менялись с изменением настроек индюка.

Не хватает у меня образования для реализации этой идеи. Помогите, пожалуйста, кто может/знает.

Просто внимательно посмотрите на рисунок, потом на описание, а потом изучите код в документации и всё будет.

https://docs.mql4.com/ru/constants/objectconstants/enum_object/obj_text

OBJ_TEXT - Типы объектов - Константы объектов - Стандартные константы, перечисления и структуры - Справочник MQL4
OBJ_TEXT - Типы объектов - Константы объектов - Стандартные константы, перечисления и структуры - Справочник MQL4
  • docs.mql4.com
OBJ_TEXT - Типы объектов - Константы объектов - Стандартные константы, перечисления и структуры - Справочник MQL4
 
Renat Akhtyamov:

Просто внимательно посмотрите на рисунок, потом на описание, а потом изучите код в документации и всё будет.

https://docs.mql4.com/ru/constants/objectconstants/enum_object/obj_text


Видел я эту статью, разумеется. На мой взгляд:

1)  слишком громоздко

2) что-то я совершенно не понял оператор TextCreate. И не только я, но и MetaEditor его тоже не понимает)))))

 
Artemij:

Интересно, Спасибо!

Вот только легче не стало))))

по поводу:

ObjectCreate("BuyTg"[i],OBJ_TEXT,0,Time[i+1],Low[i+1]-st1*Point); 

пишет:

implicit conversion from 'number' to 'string'



Вы точно с BuyTg и c SellTg разобрались? Поняли, что в приведенном коде это реально пустое место, из которого Вы хотите что-то получить?

 
Artemij:

Подскажите, кто знает.

Как текст писать через буфер?

Т.е., надо расположить определённый текст на графике в определённом месте. Функция OBJ_TEXT не работает на истории. Кроме того, при изменении настроек индюка текст -  как объект - не изменится, а перепишется "сверху". Если вставить OBJ_DELET, все текстовые метки будут переписываться при каждом тике, что тоже не есть гуд.

Идея же в том, чтобы значения на графике на истории менялись с изменением настроек индюка.

Не хватает у меня образования для реализации этой идеи. Помогите, пожалуйста, кто может/знает.


Строки через буфер не отображаются, только символы. Ведь буфер - это число типа double. Некуда там строку записывать. 

Все тексты отображаются через OBJ_TEXT. Прекрасно работает. Удалять на каждом тике информацию, конечно же, не нужно. Это делается один раз при инициализации индикатора или при подкачке истории. На каждом новом тике нужно будет отобразить новый текст или изменить последний имеющийся. В чем именно загвоздка? Покажите код (код вставляется через кнопку SRC).