Здесь таймсерии не сортирует у меня... Метод Sort() в CArray надо реализовывать отдельно в наследуемом классе для сортировки объектов, разве нет?
Нет. В CArrayObj есть метод Sort():
//+------------------------------------------------------------------+//| Search of position of element in a sorted array |//+------------------------------------------------------------------+int CArrayObj::Search(const CObject *element) const
{
int pos;
//--- checkif(m_data_total==0 || !CheckPointer(element) || m_sort_mode==-1)
return(-1);
//--- search
pos=QuickSearch(element);
if(m_data[pos].Compare(element,m_sort_mode)==0)
return(pos);
//--- not foundreturn(-1);
}
//+------------------------------------------------------------------+
Внутри метода используется метод Compare(), который и нужно переопределять в наследуемых классах.
В классе CBar, объекты которого хранятся в списке, где ищем нужный бар, метод Compare() уже переопределён (равно как и во всех классах объектов библиотеки):
//+------------------------------------------------------------------+//| Сравнивает объекты CBar между собой по указанному свойству |//+------------------------------------------------------------------+int CBar::Compare(const CObject *node,constint mode=0) const
{
const CBar *bar_compared=node;
//--- сравнение целочисленных свойств двух баровif(mode<BAR_PROP_INTEGER_TOTAL)
{
long value_compared=bar_compared.GetProperty((ENUM_BAR_PROP_INTEGER)mode);
long value_current=this.GetProperty((ENUM_BAR_PROP_INTEGER)mode);
return(value_current>value_compared ? 1 : value_current<value_compared ? -1 : 0);
}
//--- сравнение вещественных свойств двух баровelseif(mode<BAR_PROP_DOUBLE_TOTAL+BAR_PROP_INTEGER_TOTAL)
{
double value_compared=bar_compared.GetProperty((ENUM_BAR_PROP_DOUBLE)mode);
double value_current=this.GetProperty((ENUM_BAR_PROP_DOUBLE)mode);
return(value_current>value_compared ? 1 : value_current<value_compared ? -1 : 0);
}
//--- сравнение строковых свойств двух баровelseif(mode<BAR_PROP_DOUBLE_TOTAL+BAR_PROP_INTEGER_TOTAL+BAR_PROP_STRING_TOTAL)
{
string value_compared=bar_compared.GetProperty((ENUM_BAR_PROP_STRING)mode);
string value_current=this.GetProperty((ENUM_BAR_PROP_STRING)mode);
return(value_current>value_compared ? 1 : value_current<value_compared ? -1 : 0);
}
return0;
}
//+------------------------------------------------------------------+
Структура поиска объектов в библиотеке организована верно.
Что у Вас не выходит? Может просто потому, что не с начала начали изучать библиотеку?
Что у Вас не выходит? Может просто потому, что не с начала начали изучать библиотеку?
Здравствуйте. Да я не жалуюсь, конечно, я не прочитал все ваши статьи. Сомневаюсь, что вообще такие были. Но простые вещи не работают и даже не описано толком, как они должны работать.
Вот у вас есть стандартные графические элементы. Кстати, на множество базовых элементов даже нет примеров (Edit в данном случае).
Ну так вот, CreateEditField() не работает. Вылетает в методе CreateNewStdGraphObjectAndGetCtrlObj(). Вот здесь:
CChartObjectsControl *CGraphElementsCollection::GetChartObjectCtrlObj(constlong chart_id)
{
//--- В цикле во общему количеству объектов в спискеfor(int i=0;i<this.m_list_charts_control.Total();i++)
{
//--- Получаем указатель на очередной объект
CChartObjectsControl *obj=this.m_list_charts_control.At(i);
//--- Если указатель получить не удалось - переходим к следующемуif(obj==NULL)
continue;
//--- Если идентификатор графика объекта равен искомому - возвращаем указатель на объект в спискеif(obj.ChartID()==chart_id)
return obj;
}
//--- Не нашли объект - возвращаем NULLreturnNULL;
}
Ну а m_list_charts_control пустой.. соответственно, ничего не добавляется и метод ничего не возвращает.
Вообще, косяков хватает. Такое чувство, что на практике никто библиотеку не использует. Возьмите инструмент с единственным разрешенным типом заполнения IOC. Ну вот, не будет работать. Не определяет он правильно. Пришлось мне море методов отредактировать... Вы просто пройдите по своему торговому методу. Причем, изначальный метод в инициалазации корректирует filling, но торговый метод его не подцепляет.
Здравствуйте. Да я не жалуюсь, конечно, я не прочитал все ваши статьи. Сомневаюсь, что вообще такие были. Но простые вещи не работают и даже не описано толком, как они должны работать.
Вот у вас есть стандартные графические элементы. Кстати, на множество базовых элементов даже нет примеров (Edit в данном случае).
Ну так вот, CreateEditField() не работает. Вылетает в методе CreateNewStdGraphObjectAndGetCtrlObj(). Вот здесь:
Ну а m_list_charts_control пустой.. соответственно, ничего не добавляется и метод ничего не возвращает.
Вообще, косяков хватает. Такое чувство, что на практике никто библиотеку не использует. Возьмите инструмент с единственным разрешенным типом заполнения IOC. Ну вот, не будет работать. Не определяет он правильно. Пришлось мне море методов отредактировать... Вы просто пройдите по своему торговому методу. Причем, изначальный метод в инициалазации корректирует filling, но торговый метод его не подцепляет.
Метод CTrading::OpenPosition()
Ок, нашли правильный тип заполнения, если он в ордере не указан явно.
Но дальше-то мы передаем в следующий метод изначальную переменную. Какой смысл-то? Или я чего-то не понимаю...
Вот это обсуждение как-то относится именно к этой статье? Нет.
По какой именно статье вопросы?
Давайте в еë обсуждении и разберëм их.
PS не помню, чтобы делал уже для библиотеки класс поля ввода. CreateEditField() откуда взяли?
leonerd #: Ну так вот, CreateEditField() не работает. Вылетает в методе CreateNewStdGraphObjectAndGetCtrlObj().
А зачем Вы в приватные методы лезете? Они нужны только для работы библиотеки.
Для пользователя нужны публичные методы. Конечному пользователю не нужна работа внутренних методов.
Если же хотите разобраться в работе всего этого, то для этого статьи с описанием всей этой кухни и написаны. Не очень понятно что и как Вы хотите сделать. Вы ж не говорите, примеров не приводите, а лишь указываете на строчку, взятую из огромного их количества, и говорите, что вот она не работает...
leonerd #: Вообще, косяков хватает. Такое чувство, что на практике никто библиотеку не использует.
Если не читали описания, и пытаетесь под себя переделывать и для себя использовать внутренние методы, то косяков хватает не у автора, а у переделывающего.
И, да, библиотека ещё на стадии разработки.
С типом заливки погляжу, спасибо.
Но лучше обсуждать в обсуждении соответствующих статей - чтобы сразу же было видно описание, а не разговор вести об одном в обсуждении совсем другого.
Для авторизации и пользования сайтом MQL5.com необходимо разрешить использование файлов Сookie.
Пожалуйста, включите в вашем браузере данную настройку, иначе вы не сможете авторизоваться.
Вы вошли в аккаунт. Двухфакторная аутентификация отключена. Настройте её заново и отсканируйте новый QR-код или продолжите с отключённой двухфакторной аутентификацией.
Здесь таймсерии не сортирует у меня... Метод Sort() в CArray надо реализовывать отдельно в наследуемом классе для сортировки объектов, разве нет?
Нет. В CArrayObj есть метод Sort():
Внутри метода используется метод Compare(), который и нужно переопределять в наследуемых классах.
В классе CBar, объекты которого хранятся в списке, где ищем нужный бар, метод Compare() уже переопределён (равно как и во всех классах объектов библиотеки):
Структура поиска объектов в библиотеке организована верно.
Что у Вас не выходит? Может просто потому, что не с начала начали изучать библиотеку?
Что у Вас не выходит? Может просто потому, что не с начала начали изучать библиотеку?
Здравствуйте. Да я не жалуюсь, конечно, я не прочитал все ваши статьи. Сомневаюсь, что вообще такие были. Но простые вещи не работают и даже не описано толком, как они должны работать.
Вот у вас есть стандартные графические элементы. Кстати, на множество базовых элементов даже нет примеров (Edit в данном случае).
Ну так вот, CreateEditField() не работает. Вылетает в методе CreateNewStdGraphObjectAndGetCtrlObj(). Вот здесь:
Ну а m_list_charts_control пустой.. соответственно, ничего не добавляется и метод ничего не возвращает.
Вообще, косяков хватает. Такое чувство, что на практике никто библиотеку не использует. Возьмите инструмент с единственным разрешенным типом заполнения IOC. Ну вот, не будет работать. Не определяет он правильно. Пришлось мне море методов отредактировать... Вы просто пройдите по своему торговому методу. Причем, изначальный метод в инициалазации корректирует filling, но торговый метод его не подцепляет.
Метод CTrading::OpenPosition()
Ок, нашли правильный тип заполнения, если он в ордере не указан явно.
Но дальше-то мы передаем в следующий метод изначальную переменную. Какой смысл-то? Или я чего-то не понимаю...
Здравствуйте. Да я не жалуюсь, конечно, я не прочитал все ваши статьи. Сомневаюсь, что вообще такие были. Но простые вещи не работают и даже не описано толком, как они должны работать.
Вот у вас есть стандартные графические элементы. Кстати, на множество базовых элементов даже нет примеров (Edit в данном случае).
Ну так вот, CreateEditField() не работает. Вылетает в методе CreateNewStdGraphObjectAndGetCtrlObj(). Вот здесь:
Ну а m_list_charts_control пустой.. соответственно, ничего не добавляется и метод ничего не возвращает.
Вообще, косяков хватает. Такое чувство, что на практике никто библиотеку не использует. Возьмите инструмент с единственным разрешенным типом заполнения IOC. Ну вот, не будет работать. Не определяет он правильно. Пришлось мне море методов отредактировать... Вы просто пройдите по своему торговому методу. Причем, изначальный метод в инициалазации корректирует filling, но торговый метод его не подцепляет.
Метод CTrading::OpenPosition()
Ок, нашли правильный тип заполнения, если он в ордере не указан явно.
Но дальше-то мы передаем в следующий метод изначальную переменную. Какой смысл-то? Или я чего-то не понимаю...
Вот это обсуждение как-то относится именно к этой статье? Нет.
CreateEditField() в Engine.mqh
CreateEditField() в Engine.mqh
Ну так вот, CreateEditField() не работает. Вылетает в методе CreateNewStdGraphObjectAndGetCtrlObj().
А зачем Вы в приватные методы лезете? Они нужны только для работы библиотеки.
Для пользователя нужны публичные методы. Конечному пользователю не нужна работа внутренних методов.
Если же хотите разобраться в работе всего этого, то для этого статьи с описанием всей этой кухни и написаны. Не очень понятно что и как Вы хотите сделать. Вы ж не говорите, примеров не приводите, а лишь указываете на строчку, взятую из огромного их количества, и говорите, что вот она не работает...
Вообще, косяков хватает. Такое чувство, что на практике никто библиотеку не использует.
Если не читали описания, и пытаетесь под себя переделывать и для себя использовать внутренние методы, то косяков хватает не у автора, а у переделывающего.
И, да, библиотека ещё на стадии разработки.
С типом заливки погляжу, спасибо.
Но лучше обсуждать в обсуждении соответствующих статей - чтобы сразу же было видно описание, а не разговор вести об одном в обсуждении совсем другого.
Не имею ни малейшего желания туда лезть. Если б всё работало, то даже не открывал бы.
Что у Вас не работает? Код, пожалуйста. Просто говорить, что не работает - не продуктивно.
Что у Вас не работает? Код, пожалуйста. Просто говорить, что не работает - не продуктивно.
Согласен, что непродуктивно. Поэтому я и предоставил максимум деталей в этом комменте https://www.mql5.com/ru/forum/438481/page2#comment_53551638
я и предоставил максимум деталей в этом комменте
Максимум деталей - это код, который можно скомпилировать, запустить, посмотреть, что не работает и найти и сообщить причину.
Без тестов статьи не публикуются. В тестах всё работает. Потому и задаю третий раз вопрос: что делаете, и что там у Вас не работает. Код, пожалуйста.