Trend.mqh Создание хендлов

Vladimir Karputov  
Как то незаслуженно обошли вниманием эту библиотеку. Будем исправляться ...
Vladimir Karputov  

И если нужно будет создавать несколько объектов индикаторов (например десятка три), то без CArrayObj уже не обойтись ...

Vitaly Muzichenko  
Vladimir Karputov:

И если нужно будет создавать несколько объектов индикаторов (например десятка три), то без CArrayObj уже не обойтись ...

Хорошо, ждём примеры использования

Vladimir Karputov  
Vitaly Muzichenko:

Хорошо, ждём примеры использования


Скорее всего завтра. Сегодня уже никак.


Добавлено: лучше укажите способ задания 30-ти символов:

  • через входные параметры
  • через подключаемый файл с настройками
  • тупо первые 30 символов из окна "Обзор рынка"
  • и тому подобное и так далее

Vitaly Muzichenko  
Vladimir Karputov:

Скорее всего завтра. Сегодня уже никак.


Добавлено: лучше укажите способ задания 30-ти символов:

  • через входные параметры
  • через подключаемый файл с настройками
  • тупо первые 30 символов из окна "Обзор рынка"
  • и тому подобное и так далее

Во входных параметрах кроме маджика, указывать больше нечего.

Vladimir Karputov  
Vitaly Muzichenko:

Во входных параметрах кроме маджика, указывать больше нечего.


То есть во входных тридцать строк с именами символов?

Vitaly Muzichenko  
Vladimir Karputov:

То есть во входных тридцать строк с именами символов?

Нет, во входных всего 3 параметра, два цвета для объектов, и маджик. Всё

Инициализация массива происходит в OnInit, там-же и все остальные действия

 string SymbTrade[]={"EURUSD","GBPUSD","USDJPY","USDCHF","NZDUSD","AUDUSD","EURJPY","USDCAD","EURCHF","EURGBP","GBPCHF","GBPJPY","EURAUD","AUDCAD",
                     "AUDCHF","AUDJPY","CADCHF","CADJPY","CHFJPY","NZDCAD","NZDCHF","NZDJPY","GBPCAD","GBPAUD","GBPNZD","EURCAD","EURNZD","AUDNZD"};
Vladimir Karputov  

Пример:

//+------------------------------------------------------------------+
//|                                                        CiSAR.mq5 |
//|                              Copyright © 2017, Vladimir Karputov |
//|                                           http://wmua.ru/slesar/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2017, Vladimir Karputov"
#property link      "http://wmua.ru/slesar/"
#property version   "1.000"
#property description "An example of using the Trend.mqh library is the CiSAR class"
#include <Arrays\ArrayObj.mqh>
#include <Indicators\Trend.mqh>
CArrayObj      m_array;                      // CArrayObj object
//--- input parameters
string SymbTrade[]=
  {
   "EURUSD","GBPUSD","USDJPY","USDCHF","NZDUSD","AUDUSD","EURJPY","USDCAD","EURCHF",
   "EURGBP","GBPCHF","GBPJPY","EURAUD","AUDCAD","AUDCHF","AUDJPY","CADCHF","CADJPY",
   "CHFJPY","NZDCAD","NZDCHF","NZDJPY","GBPCAD","GBPAUD","GBPNZD","EURCAD","EURNZD",
   "AUDNZD"
  };
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   CiSAR    *isar;
   for(int i=0;i<ArraySize(SymbTrade);i++)
     {
      isar=new CiSAR;
      if(isar==NULL)
        {
         delete isar;
         Print("Object create error");
         return(INIT_FAILED);
        }
      if(isar.Create(SymbTrade[i],Period(),0.02,0.2))
         m_array.Add(isar);
      else
        {
         delete isar;
         Print("SAR ",SymbTrade[i]," create error");
         return(INIT_FAILED);
        }
     }
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   string text="";
   for(int i=0;i<m_array.Total();i++)
     {
      CiSAR    *isar=m_array.At(i);
      isar.Refresh();
      text+=SymbTrade[i]+" #0 : "+DoubleToString(isar.Main(0),Digits())+"\n";
     }
   Comment(text);
  }
//+------------------------------------------------------------------+

Схема работы такая: так как создаваемые при помощи библиотеки Trend.mqh индикаторы - это объекты, значит нужно создать динамический массив указателей на экземпляры этих индикаторов. Этот массив - объект класса CArrayObj.

При работе с Trend.mqh не забываем про метод Refresh.

Файлы:
CiSAR.mq5  6 kb
Vitaly Muzichenko  
Vladimir Karputov:

Пример:

Схема работы такая: так как создаваемые при помощи библиотеки Trend.mqh индикаторы - это объекты, значит нужно создать динамический массив указателей на экземпляры этих индикаторов. Этот массив - объект класса CArrayObj.

При работе с Trend.mqh не забываем про метод Refresh.

Спасибо, сегодня буду разбирать остальные библиотеки индикаторов.

P.S. Почему-то не вижу IndicatorRelease, или он не нужен?
Vladimir Karputov  
Vitaly Muzichenko:

Спасибо, сегодня буду разбирать остальные библиотеки индикаторов.

P.S. Почему-то не вижу IndicatorRelease, или он не нужен?

Нужно ещё очищать m_array иначе будет так (для примера взят массив из ОДНОГО символа:

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
   Print("Total: ",m_array.Total());
//---
   CiSAR    *isar;

и при каждой смене таймфрейма будет размер только увеличиваться (будут оставаться ссылки с предыдущих таймфреймов):

Total: 0
Total: 1
Total: 2
Total: 3
Vitaly Muzichenko  

А есть-ли вообще где-то описание того, что есть внутри, и как его применять в полной мере?