Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Спасибо за отклик и желание помочь!
Зачем x>y и т.д.. По сути сами пытаетесь отслеживать событие.
Ловите событие CHARTEVENT_OBJECT_CREATE , вам же уже посоветовали, вот это и будет последний объект.
В значение параметра sparam будет имя созданного объекта.
Зачем x>y и т.д.. По сути сами пытаетесь отслеживать событие.
Ловите событие CHARTEVENT_OBJECT_CREATE , вам же уже посоветовали, вот это и будет последний объект.
В значение параметра sparam будет имя созданного объекта.
Я вам ничем не помог - не за что. Я не у компьютера сейчас , так что написать вам функцию или предложить решение смогу не раньше, чем буду у компьютера. А это не менее 4-х часов.
Это работает когда я сам создаю объекты на графике, а у меня объекты создает индикатор.
#property link ""
#property version "1.00"
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//---
ChartSetInteger(0,CHART_EVENT_OBJECT_CREATE, true);
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| ChartEvent function |
//+------------------------------------------------------------------+
void OnChartEvent(const int id,
const long &lparam,
const double &dparam,
const string &sparam)
{
if (id == CHARTEVENT_OBJECT_CREATE) {
Print(sparam);
}
}
//+------------------------------------------------------------------+
Обьекты я не создаю... их создает индикатор - мне их надо как-то отлавливать.. Пришла мысль попробовать использовать время создания объекта (OBJPROP_CREATETIME), но в любом случае на каждом новом объекте нужно будет пересматривать весь массив объектов! а если их тысячи.....
Нет. Это работает всегда когда на чарте создаются объекты функцией ObjectCreate. Даже другими скриптами и индикаторами. Вот, запустите. И смотрите в лог, что создает ваш индикатор.
#property link ""
#property version "1.00"
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//---
ChartSetInteger(0,CHART_EVENT_OBJECT_CREATE, true);
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| ChartEvent function |
//+------------------------------------------------------------------+
void OnChartEvent(const int id,
const long &lparam,
const double &dparam,
const string &sparam)
{
if (id == CHARTEVENT_OBJECT_CREATE) {
Print(sparam);
}
}
//+------------------------------------------------------------------+
Общее кол-во обьектов не совпадает с индексом последнего добавленного объекта на графике,(MQL их сортирует по своему!)
{
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)): ""));
}
Я подожду...уже несколько дней мучаюсь)))