Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
А, да, это я недосмотрел. В базовом классе CExpertBase.
Но, все равно, похоже, что у вас просто неинициализируется эта перменная.
Все верно, в этой функции мы имеем:
double CExpertBase::Close(int ind) const
{
//--- check pointer
if(m_close==NULL)
return(EMPTY_VALUE);
//--- return the result
return(m_close.GetData(ind));
}
Переменная m_close у нас неинициализирована, равна NULL, и вам возвращается EMPTY_VALUE.
Все верно, в этой функции мы имеем:
double CExpertBase::Close(int ind) const
{
//--- check pointer
if(m_close==NULL)
return(EMPTY_VALUE);
//--- return the result
return(m_close.GetData(ind));
}
Переменная m_close у нас неинициализирована, равна NULL, и вам возвращается EMPTY_VALUE.
Эт понятно. Но вы в CExpertBase. Насколько помню, она инициализируется в СExpert.
Позднее еще гляну, сейчас убегаю.
PS InitIndicators
Чем больше смотрю этот класс, тем меньше понимаю. Имхо, он, сам по себе, лишен всякой функциональности и представляет собой некий шаблон взаимодействия, при этом далеко не лучший, в смысле функциональности.
Возникает вопрос - если все я должен создать сам под этот шаблон, почему бы мне просто не создать все самому под свои задачи без всякого шаблона? По крайней мере структура советников, в общем, ясна и проблем в ее конструировании я не вижу.
Возможно эти классы создавались для автоконструктора в редакторе. Но я, лично, не понимаю что он конструирует, т.к. никакии стандартные стратегии, стандартне индикаторы и вариации на их тему не использую. И не понимаю, как впихнуть свои индикаторы в этот индикаторный шаблон и что они там будут делать.))
Тем не менее, иметь ООП шаблон для стратегий оч. заманчиво. Однако, на данном этапе, изучение шаблона занимает больше времени, чем создание советника. На данном этапе у меня уже готовы класс таймсерий, класс индикаторов и уже работает класс стратегий с пока невнятной (отладочной) самой стратегией.
Это, чтобы не быть голословным.))
ЗЫ Это с нуля. Посмотрел начало темы - 2016.08.14 21:02 - тогда еще вообще ничего не было. Ни строчки.)) Тогда еще хотел для упрощения СExpert использовать.
Не, боюсь, для упрощения CExpert годится только в большом комплексном проекте, в котором десяток различных сигналов, которые при этом взаимодействуют между собой, и вам нужно его поддерживать.
Структура CExpert достаточно логична и стройна, и вы совершенно правы - это именно шаблон взаимодействия между различными частями советника. Я бы не сказал, что он "лишен функциональности" - он как скелет в организме. Осьминог, вероятно, тоже думает, что скелет у позвоночных "лишен функциональности". Более того - он даже мешает, осьминог без проблем может пролезть в такую щель, через которую рыбы одинакового с ним размера никогда не пролезут. Но, тем не менее, в долговременном плане скелет дает больше преимуществ организму. Так и тут.
Для простейших советников CExpert - слишком замудренный и комплексный класс. Плюс, как я уже сказал, похоже, проектировался с целью "утереть нос ребятям из Microsoft, писавшим библиотеку MS MFC, а не для того, чтобы облегчить жизнь советникописателям. Однако, в сложных по структуре советниках CExpert будет вполне себе оправдан. Кроме того, после того, как у вас будет написаны все классы основного шаблона вашего советника - CExpert будет очень даже полезен в дальнейшей поддержке кода. Вы просто меняете классы сигналов, манименеджмента, трейлинга, а все обслуживающие моменты (типа инициализации таймсерий) - уже будут сделаны.
Я сам считаю себя не последним дубом в ООП, и имею достаточно большой опыт написания сложных программ на С++, однако, со структурой шаблонов советника Стандартной библиотеки разбирался достаточно долго.
Так что ваше замечание, что "изучение шаблона занимает больше времени, чем написание советника" не совсем верно, и даже совсем неверно - изучение этого шаблона занимает ГОРАЗДО больше времени, чем написание советника.
День добрый! Возможно тема уже неактуальна, но я просто сейчас тоже разбираюсь с CExpert использовать ли или делать с нуля и решил отписаться:
По поводу EMPTY_VALUE в данных тайм серий я заметил, что после создания тайм-серий, размер буфера у них стоит по умолчанию 1024,
#define DEFAULT_BUFFER_SIZE 1024
и если нужны данные более старых баров то нужно вызывать BufferResize(), возможно на момент темы, по умолчанию был 0.
По крайней мере если судить что библиотека претерпела немало доработок и устранения багов, это вероятно.
На работу советников, которые создаются в конструкторе это никак не влияет, т.к. они все используют существующие индикаторы, которых терминал обеспечивает таймсериями сам.
А вот если пишешь свой класс от CExpert то такие нюансы приходится учитывать. Надеюсь возможностей после изучения получу больше чем если бы писал с нуля.