Вопросы от начинающих MQL5 MT5 MetaTrader 5 - страница 991

 
kopeyka2:

Именно я так и думал. Вопрос непонимания в словах "параметры". И я начал смотреть ВСЕ переменные которые участвуют в хэндл --> CopyBuffer

1) Мой вопрос с самого начала был в том, что бы переключив ЭКРАН таймфрейна сохранить данные  хэндла. Ну как это в МТ4.

А на деле получается так: 

ВСЕГДА и на ВСЕХ таймфреймах дает одно и тоже значение 10

Ничего не получив тут я двинулся дальше.

2)  Цитирую: "Получает в массив buffer данные указанного буфера указанного индикатора в указанном количестве".

То есть, установив count от руки мы должны иметь ИНТЕРВАЛ со значениями. И они есть! НО!!!!!! Только когда период хэндла соответствует

таймфрейму на экране монитора PERIOD_H1. Все значения передаются четко. Но перейдя на другой таймфрейм на экране данных НЕТ.

Они НЕ ПЕРЕДАЮТСЯ НИКАК!!!! А мой вопрос был именно в этом. И количество баров для count тут не так важно, если их там НЕТ!!!


Я посмотрел предложенный индикатор MTF_LRMA.mq5 Но в нем тоже самое . Переключаемся на другой таймфрейм на экране и данные идут по таймфрейму экрана. А мне надо по хэндэлу.

Напррмер: iClose(NULL, PERIOD_H1, 5); на всех таймфреймах будут давать одно и тоже значение : 10 баров по Н1. 

Пока что все примеры были по корректировке count буфера CopyBuffer. НО массив то ПУСТОЙ


Вы не правы. Хэндл отдает данные на любом таймфрейме. Часов через 10 дам пример. С мобилы не смогу
 
Artyom Trishkin:
Вы не правы. Хэндл отдает данные на любом таймфрейме. Часов через 10 дам пример. С мобилы не смогу

Ок. Спасибо за ответ 


Исправил сам себя 

Напррмер: iClose(NULL, PERIOD_H1, 5); на всех таймфреймах будут давать одно и тоже значение : Закрытие на 5 баре по Н1. 

Думал может так

MqlParam params[]; 
//--- create iMA("EURUSD",PERIOD_M15,8,0,MODE_EMA,PRICE_CLOSE); 
   ArrayResize(params,4); 
//--- set ma_period 
   params[0].type         =TYPE_INT; 
   params[0].integer_value=0; 
//--- set ma_shift 
   params[1].type         =TYPE_INT; 
   params[1].integer_value=0; 
//--- set ma_method 
   params[2].type         =TYPE_INT; 
   params[2].integer_value=MODE_EMA; 
//--- set applied_price 
   params[3].type         =TYPE_INT; 
   params[3].integer_value=PRICE_CLOSE; 
//--- create MA 
   h_MA=IndicatorCreate("EURUSD",PERIOD_M15,IND_MA,4,params); 
//--- release indicators (first h_MACD) 
   
  if(h_MA==INVALID_HANDLE)
     {
      Print("The iMA (",string(PERIOD_M15),") object was not created: Error ",GetLastError());
      return INIT_FAILED;
     }
//---
   return(INIT_SUCCEEDED);

Но если Вы меня переубедите, что можно по первому способу получить значение технического индикатора (iMA) , подожду. Но пока непонимаю… 

 
kopeyka2:

Ок. Спасибо за ответ 


Исправил сам себя 

Думал может так

Но если Вы меня переубедите, что можно по первому способу получить значение технического индикатора (iMA) , подожду. Но пока непонимаю… 

Я же Выше показал, что число баров на разных TF разное, и соответственно запрашивать надо разное число баров для копирования, в зависимости от ТФ на котором должен считаться индикатор. Проверяйте через BarsCalculated() число посчитанных индикатором баров и от этого исходите, вот кусок примера такой реализации для MTF

//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
   if(rates_total==prev_calculated) return(rates_total);
//---
   int    i;
   double diff;
//--- check for rates count
   if(rates_total<=ExtPeriodRSI)
      return(0);
//---
   if(TF!=PERIOD_CURRENT)
   {
      if(handle==INVALID_HANDLE)
        {
         handle=iCustom(Symbol(),TF,ind_name,Variant,RSIPeriod,Levl_Up,Levl_Down,PERIOD_CURRENT);
         return(0);
        }
      else
        {
         int bars_calculated=BarsCalculated(handle);
                  //Print("Начнем расчет - " , bars_calculated);
         if(bars_calculated<=0) return(0);
         if(Bars(Symbol(),TF)!=bars_calculated)
           {
            for(i=rates_total-prev_calculated-1;i>=0;i--)
              {
               Delta[i]=0.0;   
              }
            return(prev_calculated);
           } 
        }
 
Aleksey Vyazmikin:

Я же Выше показал, что число баров на разных TF разное, и соответственно запрашивать надо разное число баров для копирования, в зависимости от ТФ на котором должен считаться индикатор. Проверяйте через BarsCalculated() число посчитанных индикатором баров и от этого исходите, вот кусок примера такой реализации для MTF

Спасибо. Попробую. Но как указал ранее массив пустой вообще. Сдиги я по массиву делал руками. Он пустой весь
 
kopeyka2:
Спасибо. Попробую. Но как указал ранее массив пустой вообще. Сдиги я по массиву делал руками. Он пустой весь
Вы игнорируете что обязательно нужно дождаться погрузку данных с иного таймфрейма? Примеры я приводил. В показанном индикаторе данные берутся только со старших таймфреймов. Если задать тф меньше или равным текущему, то данные берутся с текущего. Все это есть в коде, но поглядеть вы не удосужились. Зато делаете заявления.
 
Artyom Trishkin:
Вы игнорируете что обязательно нужно дождаться погрузку данных с иного таймфрейма? Примеры я приводил. В показанном индикаторе данные берутся только со старших таймфреймов. Если задать тф меньше или равным текущему, то данные берутся с текущего. Все это есть в коде, но поглядеть вы не удосужились. Зато делаете заявления.
Не только смотрел, а разобрал Ваш индикатор по винтику. Вот мысль по поводу задержки передачи данных была с самого начала. И сразу, с первого просмотра, увидел у Вас Timer. Поищу в этом направлении
 
kopeyka2:
Не только смотрел, а разобрал Ваш индикатор по винтику. Вот мысль по поводу задержки передачи данных была с самого начала. И сразу, с первого просмотра, увидел у Вас Timer. Поищу в этом направлении
Последний цикл с преобразованием данных в текущий тф закоментируйте, и в любой графический буфер передайте данные от расчётный буферов МАшек, и увидите на графике то, что хотите увидеть. 
 

пока так 

другой (не родной) таймфрейм 


 
kopeyka2:

пока так 

другой (не родной) таймфрейм 


Вы нарочно закоментировали строку возврата в случае, если данные не получены? Зачем? Если открутить колеса и говорить что мотор гудит, руль поворачивается, но машина не едет, а значит не исправна, это как-то жёстко. 
 
kopeyka2:
Спасибо. Попробую. Но как указал ранее массив пустой вообще. Сдиги я по массиву делал руками. Он пустой весь

Ранее я Вам давал кусок кода Вашего индикатора с принтом, Вы его пробовали скопировать? В логе прям ничего не выводится, не ошибки не цифры?