Обсуждение статьи "Как перенести расчетную часть любого индикатора в код эксперта" - страница 2

 

@Dmitriy Gizlyk Очень хорошая статья. Я внедрил ваш код в свой советник и понял, что индикатор не строится на графике. Как мне построить этот индикатор, созданный внутри советника, на графике?

Спасибо.

 

Жоао Луис Са Марчиоро:

Я искал что-то подобное. Большое спасибо. Отличная статья.


Здравствуйте, вы реализовали этот пример? Я реализовал его и понял, что индикатор не строится на графике. Я пробовал и исследовал различные способы, но безуспешно. Можно ли построить индикатор в коде советника, как это было сделано в исследовании выше?

 
пароль для пополнения счета
 
wellingtondala:

@Dmitriy Gizlyk Очень хорошая статья. Я внедрил ваш код в свой советник и понял, что индикатор не строится на графике. Как мне построить этот индикатор, созданный внутри советника, на графике?

Спасибо.

В статье представлен метод переноса математической части индикатора в советник. Такой подход применим для ускорения расчетов и скрытия индикатора от пользователя. Вывести индикатор из советника, как и индикатор, невозможно. Для его отображения придется создавать графические объекты на графике для каждого движения. Этот процесс займет много времени у программиста и будет стоить вычислительных ресурсов при использовании. Если вам нужен индикатор на графике, нет смысла переносить его код в советник, проще использовать сам индикатор. Чтобы перенести советник с индикатором с помощью файла, можно воспользоваться функционалом ресурса.

 

DMITRIY GIZLYK, спасибо за статью.

Интересует вопрос многопоточности, можно ли как-то класс запустить параллельно, на отдельном ядре процессора? Вы упомянули в конце статьи "преимущество может быть нивелировано многопоточной архитектурой MetaTrader 5".

Dmitriy Gizlyk
Dmitriy Gizlyk
  • www.mql5.com
Опубликовал статью Нейросети - это просто Каждый раз, когда речь заходит об искусственном интеллекте, в голове всплывают какие-то фантастические образы и кажется, что это очень сложное и непостижимое. Но мы все чаще и чаще слышим об искусственном интеллекте в повседневной жизни. В новостных лентах все чаще пишут о каких-либо достижениях с...
 
Dmitriy Gizlyk:
Да, в статье сразу написано, что расчет делается по закрытым свечам. Для расчета на каждом тике нужно из кода убрать проверку открытия нового бара и копировать историю с "0" бара, а не с "1", как сейчас.

Я правильно понял, для работы с полным набором данных таймсерий нужно добавить массивы кроме этого:

массив исходных данных для расчета (m_source_data);

То есть если индикатор обращается к разным данным по барам - времени time[], максимальной и минимальной цене high[] low[], то нужно добавить еще 3 массива аналога m_source_data и скопировать туда данные в  CIndicator::LoadHistory,

а так как функция виртуалка, то можно её переписать прямо в индикаторе?

 

Вот здесь вылетает ошибка, если сделать больше одного буфера

bool CIndicator::SetBufferSize(const int bars)
  {
   if(bars>0)
      m_data_len  =  bars;
   else
      m_data_len  =  Bars(m_Symbol,m_Timeframe);
//---
   if(m_data_len<=0)
     {
      for(int i=0;i<m_buffers;i++)
         ar_IndBuffers[i].Shutdown();
      return false;
     }
//---
   if(m_history_len<m_data_len)
      if(!SetHistoryLen(m_data_len))
         return false;
//---
   for(int i=0;i<m_buffers;i++)
     {
      ar_IndBuffers[i].Shutdown();
      if(!ar_IndBuffers[i].Resize(m_data_len))
         return false;
     }
//---
   return true;
  }

array out of range in 'Indicator.mqh' (156,20)


UPD: добавил в начале функции строчку и проблема решилась.

ArrayResize(ar_IndBuffers,m_buffers,m_buffers);

 

Еще раз огромное спасибо за статью, всё получилось! Самое интересное, что в таком исполнении работает быстрее. Мой стрелочный индикатор использует запрос тиков через функции CopyTicksRange и CopyTicks, что вызывало массу глюков и приводило зачастую к неверным данным. Через class всё работает как часы. Связываю это с тем, что CopyTicksRange и CopyTicks в индикаторах работают несколько иначе, система не дает им время на синхронизацию.



ps. кто будет переносить стрелочные индикаторы с несколькими буферами, учтите, требуются правки функций Indicator.mqh

CIndicator::SetHistoryLen(const int bars)

CIndicator::LoadHistory(void)

в зоне protected 

ну и метод записи и получения данных из индикаторных буферов ar_IndBuffers для стрелочника другой 

 

Привет, ребята,

У меня есть индикатор, который я сам запрограммировал в mql5, и я хотел бы вызывать информацию из буфера этого индикатора в советнике, который я программирую. Не могли бы вы помочь мне, как это сделать? Помогут ли мне коды, приведенные в статье?

Спасибо

 
Carlisson Correia :

Персонал,

У меня есть индикатор, который я сам запрограммировал в mql5, и я хотел бы вызывать информацию из буфера этого индикатора в советнике, который я программирую. Не могли бы вы помочь мне, как это сделать? Помогут ли мне коды, приведенные в статье?

Спасибо

Добрый вечер

Ознакомьтесь с функцией iCustom