Как узнать имя последнего созданного объекта? - страница 3

 
Taras Slobodyanik:
Поставить в таймер проверку общего количества объектов. Как только что-то изменилось пересматриваем последние n-объектов.
Зачем? Ведь есть же событие CHARTEVENT_OBJECT_CREATE
 
fxsaber:
Немного разобраться в логике индексирования может помочь этот советник
void OnInit()
{
  ChartSetInteger(0, CHART_EVENT_OBJECT_CREATE, true);
  ChartSetInteger(0, CHART_EVENT_OBJECT_DELETE, true);
}

string ObjectsToString( const int Type = -1, const long chartID = 0, const int SubWindow = -1 )
{
  const int Total = ObjectsTotal(chartID, SubWindow, Type);

  string Str = "Objects " + ((Type == -1) ? "Any" : EnumToString((ENUM_OBJECT)Type)) + " type:";
  
  for (int i = 0; i < Total; i++)
  {
    const string Name = ObjectName(chartID, i, SubWindow, Type);
    
    Str += "\n" + (string)i + " " + Name + " " + EnumToString((ENUM_OBJECT)ObjectGetInteger(chartID, Name, OBJPROP_TYPE)) +
           " " + (string)(datetime)ObjectGetInteger(chartID, Name, OBJPROP_CREATETIME);
  }
  
  return(Str);
}

void OnChartEvent( const int id, const long &lparam, const double &dparam, const string &sparam )
{
  if ((id == CHARTEVENT_OBJECT_CREATE) || (id == CHARTEVENT_OBJECT_DELETE))
    Comment(ObjectsToString() + ((id == CHARTEVENT_OBJECT_CREATE) ? "\n\n" + ObjectsToString((int)ObjectGetInteger(0, sparam, OBJPROP_TYPE)): ""));
}
Понаблюдайте за результатом, добавляя и удаляя объекты вручную.
Очень все подробно и ясно! Спасибо!!!
 
fxsaber:
Немного разобраться в логике индексирования может помочь этот советник
void OnInit()
{
  ChartSetInteger(0, CHART_EVENT_OBJECT_CREATE, true);
  ChartSetInteger(0, CHART_EVENT_OBJECT_DELETE, true);
}

string ObjectsToString( const int Type = -1, const long chartID = 0, const int SubWindow = -1 )
{
  const int Total = ObjectsTotal(chartID, SubWindow, Type);

  string Str = "Objects " + ((Type == -1) ? "Any" : EnumToString((ENUM_OBJECT)Type)) + " type:";
  
  for (int i = 0; i < Total; i++)
  {
    const string Name = ObjectName(chartID, i, SubWindow, Type);
    
    Str += "\n" + (string)i + " " + Name + " " + EnumToString((ENUM_OBJECT)ObjectGetInteger(chartID, Name, OBJPROP_TYPE)) +
           " " + (string)(datetime)ObjectGetInteger(chartID, Name, OBJPROP_CREATETIME);
  }
  
  return(Str);
}

void OnChartEvent( const int id, const long &lparam, const double &dparam, const string &sparam )
{
  if ((id == CHARTEVENT_OBJECT_CREATE) || (id == CHARTEVENT_OBJECT_DELETE))
    Comment(ObjectsToString() + ((id == CHARTEVENT_OBJECT_CREATE) ? "\n\n" + ObjectsToString((int)ObjectGetInteger(0, sparam, OBJPROP_TYPE)): ""));
}
Понаблюдайте за результатом, добавляя и удаляя объекты вручную.

Желательно в цикл добавить строку

    if(ObjectGetInteger(0, ObjectName(0,i), OBJPROP_TYPE)==OBJ_EVENT) continue;

а то весь экран забит в пятёрке

 
Dmitry Fedoseev:
Если бы узнать зачем? Тогда бы можно было что-то придумать.
Есть графический индикатор, который я хочу перевести на буферный индикатор) Т.е. идея такая..мой индикатор будет копировать сигналы от графического индикатора к себе в буфер (8 показателей), на экран мой индикатор соответственно ничего не выводит а только использует эти данные из буфера в советнике для вычислений и для торговли
 
Tango_X:
Есть графический индикатор, который я хочу перевести на буферный индикатор)
Если вы хотите избавиться от графики в индикаторе, то зачем тогда отлавливаете появление граф.объектов?
 
Artyom Trishkin:
Если вы хотите избавиться от графики в индикаторе, то зачем тогда отлавливаете появление граф.объектов?
Графика сохраняется... просто через буфер легче производить потом вычисления чем работать с графикой в советнике. Во всяком случае так это вижу я))
 
Tango_X:
Графика сохраняется... просто через буфер легче производить потом вычисления чем работать с графикой в советнике. Во всяком случае так это вижу я))

Бардак.

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

 
Artyom Trishkin:

Бардак.

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

в том то и проблема что исходника нет!
 
Tango_X:
в том то и проблема что исходника нет!
тогда вы всё равно не избавитесь от объектов же. Зачем тогда ещё один индикатор? В советник значения передавать? Так и читайте сразу из советника данные по объектам.
 
Tango_X:
Вот здесь действительно работает!!! Спасибо огромное! Но работает когда накидываешь индикатор на график, тогда обьекты подхватывает а если вызываешь пользовательский индикатор через свой индикатор через iCustom - то обьекты не видит...может не правильно вызываю...буду разбираться.. Спасибо еще раз!!!!
Ну если в итоге на чарте создается объект - событие будет, если не создается, то нужен другой  механизм. Да, некоторые граф построения, которые могут вами приниматься за объекты, таковыми не являются (стрелки в некоторых индикаторах и тд) т.к. не используется ObjectCreate.