Help Sova - побороть зависание советника в окне терминала при отрисовке ObjectCreate

 

Добрый день.

имею такую функцию. 

void Object_get(string name_of_object, datetime time_of_bars, double gap_of_object, int code_of_char, color color_of_object, string text_of_object)

{

            ObjectCreate(name_of_object, OBJ_ARROW, 0, time_of_bars, gap_of_object); //рисуем стрелку вверх

            ObjectSet(name_of_object, OBJPROP_STYLE, STYLE_DOT);

            ObjectSet(name_of_object, OBJPROP_ARROWCODE, code_of_char);

            ObjectSet(name_of_object, OBJPROP_COLOR, color_of_object);

            ObjectSetText(name_of_object,text_of_object,10,"Times New Roman",color_of_object);

и вызов ее при определенных факторах

Object_get ("tmp"+Time[0], Time[0], High[0]+(gap+280)*Point, 138, Green, "Descriptions");  

Все достаточно банально,  вызвали нанесли на окно кружочек. Все прекрасно работает работает и в один прекрасный час, все подвисает. Тики бегут, а советник больше ничего не отрисовывает, пока его не перезагрузишь на данном окне. Причем из трех графикоф, может например завернуть только на одном, потом вырубить второй и останется работоспособным только на одном. или на двух сразу прекратит рисовать кружочки. Мучаюсь уже не один месяц - не знаю как побороть. терминал: 4.00 Build 950.

Есть еще одна проблема, если зависает терминал - все кружочки исчезают с графиков ровно до того места, где терминал был запущен. Те явно кружочки как и все остальное тупо валяться в память компа и комом сжирают память компьютера. В связи с чем, после недели работы - комп уже как i386 работает. Как заставить все это не копить в памяти - а сбрасывать и очищать память компьютера во время работы терминала без его перегруза?

 

Может вопрос не в эту ветку, пхните куда его отправить. Всем спасибо за советы и помощь! 

 
Alex Zukovic:

Object_get ("tmp"+Time[0], Time[0], High[0]+(gap+280)*Point, 138, Green, "Descriptions");  

Имя обьекта должно быть уникальным
 

Скорее всего нужно добавить проверку, чтоб не пытался создавать одно и тоже:

void Object_get(string name_of_object, datetime time_of_bars, double gap_of_object, int code_of_char, color color_of_object, string text_of_object)

{
      if(ObjectFind(0,name_of_object)<0) {
            ObjectCreate(name_of_object, OBJ_ARROW, 0, time_of_bars, gap_of_object); //рисуем стрелку вверх

            ObjectSet(name_of_object, OBJPROP_STYLE, STYLE_DOT);

            ObjectSet(name_of_object, OBJPROP_ARROWCODE, code_of_char);

            ObjectSet(name_of_object, OBJPROP_COLOR, color_of_object);

            ObjectSetText(name_of_object,text_of_object,10,"Times New Roman",color_of_object);
      }
} 
 
Vitaly Muzichenko:

Скорее всего нужно добавить проверку, чтоб не пытался создавать одно и тоже:

У него имя везде " идинаково"  ------>"tmp"+Time[0]
 
pako:
У него имя везде " идинаково"  ------>"tmp"+Time[0]
Видно сразу программисты пришли :). И видно сразу поняли суть вопроса. Вопрос не в том что удаляются при новом тике, они все красиво отображаются до поры до времени. пока тупо советник не перестает работать. прикрепляю рисунок, на котором как пример видно, там где красная вертикальная линия показывает старт советника, а через 7 тиков - он улыбаясь перестал рисовать ни экстремум ни кружочки. Рожица улыбается а ничего не происходит совершенно. Я больше думаю на баг терминала. Тогда возникает вопрос - как отловить момент подвисания советника, чтобы его перегрузить, потому как до очередного перегруза - он отработал пару дней почти сутки, а это на 5 минутах достаточно много. 
Файлы:
 
Alex Zukovic:

Добрый день.

имею такую функцию. 

void Object_get(string name_of_object, datetime time_of_bars, double gap_of_object, int code_of_char, color color_of_object, string text_of_object)

{

            ObjectCreate(name_of_object, OBJ_ARROW, 0, time_of_bars, gap_of_object); //рисуем стрелку вверх

            ObjectSet(name_of_object, OBJPROP_STYLE, STYLE_DOT);

            ObjectSet(name_of_object, OBJPROP_ARROWCODE, code_of_char);

            ObjectSet(name_of_object, OBJPROP_COLOR, color_of_object);

            ObjectSetText(name_of_object,text_of_object,10,"Times New Roman",color_of_object);

и вызов ее при определенных факторах

Object_get ("tmp"+Time[0], Time[0], High[0]+(gap+280)*Point, 138, Green, "Descriptions");  

Все достаточно банально,  вызвали нанесли на окно кружочек. Все прекрасно работает работает и в один прекрасный час, все подвисает. Тики бегут, а советник больше ничего не отрисовывает, пока его не перезагрузишь на данном окне. Причем из трех графикоф, может например завернуть только на одном, потом вырубить второй и останется работоспособным только на одном. или на двух сразу прекратит рисовать кружочки. Мучаюсь уже не один месяц - не знаю как побороть. терминал: 4.00 Build 950.

Есть еще одна проблема, если зависает терминал - все кружочки исчезают с графиков ровно до того места, где терминал был запущен. Те явно кружочки как и все остальное тупо валяться в память компа и комом сжирают память компьютера. В связи с чем, после недели работы - комп уже как i386 работает. Как заставить все это не копить в памяти - а сбрасывать и очищать память компьютера во время работы терминала без его перегруза?

 

Может вопрос не в эту ветку, пхните куда его отправить. Всем спасибо за советы и помощь! 

Слышали такое выражение: "Хвост виляет собакой"? 

Кстати, всех касается.  

 
Alex Zukovic:

Добрый день.


Как заставить все это не копить в памяти - а сбрасывать и очищать память компьютера во время работы терминала без его перегруза?


А почему ты решил что проблема в этих кружочках?

То что после перезагрузки терминала не остаются кружочки связано с аварийной выгрузкой МТ. Там не только кружочки не остаются, а даже индикаторы и советник не останется если их поставить на график при последнем запуске МТ. Тоесть, запускаем МТ, ставим индикатор, советник, подвешиваем МТ, перезагружаем его и не находим ни индикатор ни советника...

 
Алексей Тарабанов:

Слышали такое выражение: "Хвост виляет собакой"? 

Кстати, всех касается.  

это ты о чем?
 
Alexey Viktorov:

А почему ты решил что проблема в этих кружочках?

То что после перезагрузки терминала не остаются кружочки связано с аварийной выгрузкой МТ. Там не только кружочки не остаются, а даже индикаторы и советник не останется если их поставить на график при последнем запуске МТ. Тоесть, запускаем МТ, ставим индикатор, советник, подвешиваем МТ, перезагружаем его и не находим ни индикатор ни советника...

верно. вот это то и страно для меня. почем так происходит? это говорит что терминал все в памяти держит временной. что к чему. не я понимаю - быстрота все дела, но все это приводит к тормозам, особенно если какой сов с анализатором больших данных запускать. да даже пару анализаторов а 30мин графике и все, пару дней и терминал в перегруз. а без анализа никак

 проблема может быть косвенной - каждый кружочек под собой имеет определенную функцию-анализ. в зависимости от условий и ставиться он на график = это раз. второе, каждое нанесение чего либо на график терминала-несет доп расходы по памяти - эт два. история тиков зранящяяся в памяти эт три. все приводит где то да к зависанию одного графика. повторюсь, одного графика а не всего терминала. Возможно где то стопору какой нить if. попробую вчера поставил контрольные точки, посмотрю на чем зависнит в очередной раз.

 да и замечено что больше всего и чаще всего зависон на золоте и фунте. 

 
Alex Zukovic:

верно. вот это то и страно для меня. почем так происходит? это говорит что терминал все в памяти держит временной. что к чему. не я понимаю - быстрота все дела, но все это приводит к тормозам, особенно если какой сов с анализатором больших данных запускать. да даже пару анализаторов а 30мин графике и все, пару дней и терминал в перегруз. а без анализа никак

 проблема может быть косвенной - каждый кружочек под собой имеет определенную функцию-анализ. в зависимости от условий и ставиться он на график = это раз. второе, каждое нанесение чего либо на график терминала-несет доп расходы по памяти - эт два. история тиков зранящяяся в памяти эт три. все приводит где то да к зависанию одного графика. повторюсь, одного графика а не всего терминала. Возможно где то стопору какой нить if. попробую вчера поставил контрольные точки, посмотрю на чем зависнит в очередной раз.

 да и замечено что больше всего и чаще всего зависон на золоте и фунте. 

Не всё в памяти держит, а текущую конфигурацию скидывает в .ini файл при нормальном завершении работы МТ.

Вот ещё вопрос: Это в тестере зависание происходит?

 
Alex Zukovic:
ObjectCreate(chart_ID,name,OBJ_ARROW,sub_window,time,price)

У вас не хватает одного параметра

 ObjectCreate(name_of_object, OBJ_ARROW, 0, time_of_bars, gap_of_object)

и на имя обьекта обратите внимание-я уже писал об этом