Скачать MetaTrader 5

Подскажите с кодом.

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Ilya Shibalov
198
Ilya Shibalov  
Не могу понять как написать одну функцию.
У меня в советнике рисуются линии и хочется сделать чтобы линии которые создались например больше 2х дней назад удалялись.
Подскажите как это сделать.
Sergey Gritsay
6562
Sergey Gritsay  
Ooops:
Не могу понять как написать одну функцию.
У меня в советнике рисуются линии и хочется сделать чтобы линии которые создались например больше 2х дней назад удалялись.
Подскажите как это сделать.
Как то так 
if(TimeCurrent()>=ObjectGetInteger(0,имя объекта,OBJPROP_CREATETIME)+24*60*60*2)
{
ObjectDelete(0,имя объекта);
}
ююю
Ilya Shibalov
198
Ilya Shibalov  
Sergey Gritsay:
Как то так 
if(TimeCurrent()>=ObjectGetInteger(0,имя объекта,OBJPROP_CREATETIME)+24*60*60*2)
{
ObjectDelete(0,имя объекта);
}
ююю

Попробывал этот вариант, почему не работает, возможно из за того что имя объекта не правильно вписываю. Линий очень много получается. Может есть вариант с удалением всех объектов созданных более 2х дней назад.

Опять же прошу помочь с написание этой функции, так как опыта очень мало.

Заранее благодарен. 

Sergey Gritsay
6562
Sergey Gritsay  
Ooops:

Попробывал этот вариант, почему не работает, возможно из за того что имя объекта не правильно вписываю. Линий очень много получается. Может есть вариант с удалением всех объектов созданных более 2х дней назад.

Опять же прошу помочь с написание этой функции, так как опыта очень мало.

Заранее благодарен. 

если у вас код не секретный, выкладывайте его сюда целиком.
Sergey Gritsay
6562
Sergey Gritsay  
Ooops:

Попробывал этот вариант, почему не работает, возможно из за того что имя объекта не правильно вписываю. Линий очень много получается. Может есть вариант с удалением всех объектов созданных более 2х дней назад.

Опять же прошу помочь с написание этой функции, так как опыта очень мало.

Заранее благодарен. 

вот написал в виде отдельной функции удаляет все объекты созданные более 2 дней
void DeleteAllTimeout()
  {
   int total=ObjectsTotal(0);

   for(int i=total-1; i>=0; i--)
     {
      string name=ObjectName(0,i);
      if(TimeCurrent()>=ObjectGetInteger(0,name,OBJPROP_CREATETIME)+24*60*60*2)
        {
         ObjectDelete(0,name);
        }
     }
  }
...
Ilya Shibalov
198
Ilya Shibalov  
Sergey Gritsay:
вот написал в виде отдельной функции удаляет все объекты созданные более 2 дней
void DeleteAllTimeout()
  {
   int total=ObjectsTotal(0);

   for(int i=total-1; i>=0; i--)
     {
      string name=ObjectName(0,i);
      if(TimeCurrent()>=ObjectGetInteger(0,name,OBJPROP_CREATETIME)+24*60*60*2)
        {
         ObjectDelete(0,name);
        }
     }
  }
...

вот такую ошибку выдает, пока незнаю как её решить.
"OdjectTotal" - ambiguous call to overloaded function with the same parameters
насчет кода, не хотелось бы показывать его.

Vladimir Karputov
Модератор
50091
Vladimir Karputov  
Ooops:

вот такую ошибку выдает, пока незнаю как её решить.
"OdjectTotal" - ambiguous call to overloaded function with the same parameters

Напишите так:

   int total=ObjectsTotal(ChartID());


Добавлено: а вообще лучше не лениться и явно указывать все параметры, даже если они стоят по-умолчанию:

   int total=ObjectsTotal(0,-1,-1);


 

Ilya Shibalov
198
Ilya Shibalov  

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

Vladimir Karputov
Модератор
50091
Vladimir Karputov  
Ooops:
Так, ошибка с "OdjectTotal" исправилась, но результата нету, линии не удаляются.
После всех удалений нужно сделать ChartRedraw().
Ilya Shibalov
198
Ilya Shibalov  
void DeleteAllTimeout()
  {
    int total=ObjectsTotal(0,-1,-1);

   for(int i=total-1; i>=0; i--)
     {
      string name=ObjectName(0,i);
      if(TimeCurrent()>=ObjectGetInteger(0,name,OBJPROP_CREATETIME)+24*60*60*Days)
        {
         ObjectDelete(0,name);
        }
     }
     ChartRedraw(0);
  }

Советника тестирую в тестере. Может там этот момент просто не работает?

имя линий выгдядит так 
2016.10.17 03:59:00DWd
2016.10.17 07:55:00UPd
Vladimir Karputov
Модератор
50091
Vladimir Karputov  

В тестере

      datetime time_create=(datetime)ObjectGetInteger(0,name,OBJPROP_CREATETIME);


возвращает дату создания линии из реальной жизни, то есть "D'2016.11.13 15:57:29'".

 

Всего лишь нужно было запустить советник в режиме тестирования на истории 1 и отследить возвращаемые параметры. Смотрите, я на локализацию проблемы потратил всего пять минут. 

 

Добавлено:

ошибку описал в теме MetaEditor build 1470

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