Скачать MetaTrader 5

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

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Интересно узнать о развитии MQL5.community? Заходи в раздел Стена!
Alex Zukovic
40
Alex Zukovic 2016.03.21 12:49 

Добрый день.

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

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 работает. Как заставить все это не копить в памяти - а сбрасывать и очищать память компьютера во время работы терминала без его перегруза?

 

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

pako
3309
pako 2016.03.21 13:13  
Alex Zukovic:

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

Имя обьекта должно быть уникальным
Vitaly Muzichenko
3466
Vitaly Muzichenko 2016.03.21 15:33  

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

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);
      }
} 
pako
3309
pako 2016.03.21 16:38  
Vitaly Muzichenko:

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

У него имя везде " идинаково"  ------>"tmp"+Time[0]
Alex Zukovic
40
Alex Zukovic 2016.03.21 21:51  
pako:
У него имя везде " идинаково"  ------>"tmp"+Time[0]
Видно сразу программисты пришли :). И видно сразу поняли суть вопроса. Вопрос не в том что удаляются при новом тике, они все красиво отображаются до поры до времени. пока тупо советник не перестает работать. прикрепляю рисунок, на котором как пример видно, там где красная вертикальная линия показывает старт советника, а через 7 тиков - он улыбаясь перестал рисовать ни экстремум ни кружочки. Рожица улыбается а ничего не происходит совершенно. Я больше думаю на баг терминала. Тогда возникает вопрос - как отловить момент подвисания советника, чтобы его перегрузить, потому как до очередного перегруза - он отработал пару дней почти сутки, а это на 5 минутах достаточно много. 
Файлы:
Алексей Тарабанов
7196
Алексей Тарабанов 2016.03.21 22:51  
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 работает. Как заставить все это не копить в памяти - а сбрасывать и очищать память компьютера во время работы терминала без его перегруза?

 

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

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

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

Alexey Viktorov
6823
Alexey Viktorov 2016.03.22 06:26  
Alex Zukovic:

Добрый день.


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


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

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

Alex Zukovic
40
Alex Zukovic 2016.03.22 10:32  
Алексей Тарабанов:

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

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

это ты о чем?
Alex Zukovic
40
Alex Zukovic 2016.03.22 10:39  
Alexey Viktorov:

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

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

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

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

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

Alexey Viktorov
6823
Alexey Viktorov 2016.03.22 10:57  
Alex Zukovic:

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

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

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

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

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

pako
3309
pako 2016.03.22 15:53  
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)

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

123
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий