Как получить параметры Open,Low,High,Close в МQL5? - страница 5

 
Igor Makanu:

можно так class CNewbar , или поиском по форуму NewBar


У Вас в классе вызов iTime. Мне посоветовали о ней забыть.) К тому же, где гарантия что она в свою очередь не делает туже работу, что и CopyRates? Вы же ее на каждом тике вызываете. Короче, буду вызывать CopyRates на каждом тике и вопрос закрыт.

 
Artyom Trishkin:

Да, на каждом тике проверяем время:

И вкратце как-то так:

просто на коленке писал - показать идею, а не точность написания

Нет смысла вычислять новый бар, если само вычисление задействует CopyRates или его аналог. Те же расходы будут.

Буду вызывать на каждом тике. Спс.

 
Igor Makanu:

можно так class CNewbar , или поиском по форуму NewBar

ЗЫ: целая статья! https://www.mql5.com/ru/articles/159



понятно, все как обычно..уфф,ай,ой.. и ни строчки кода ))) 

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

ладно, не хворай!

Да ладно. Толстые чаще всего тёплые. Поэтому можно и этими сравнениями пользоваться. Кому какое дело до того что тебе надо OHLC... Игорь сказал что надо фракталами пользоваться, вот и пользуйся...

 
Реter Konow:

У Вас в классе вызов iTime. Мне посоветовали о ней забыть.) К тому же, где гарантия что она в свою очередь не делает туже работу, что и CopyRates? Вы же ее на каждом тике вызываете. Короче, буду вызывать CopyRates на каждом тике и вопрос закрыт.

Это дольше, чем один раз вызвать на каждом тике CopyTime() или iTime().

CopyRates() вызывайте только тогда, когда вам разом нужно получить одновременно все значения бара - в момент определения нового бара.

 
Реter Konow:
Нет смысла вычислять новый бар, если само вычисление задействует CopyRates или его аналог. Те же расходы будут.

Буду вызывать на каждом тике. Спс.

Ответил - ошибаетесь.

 
Artyom Trishkin:

Это дольше, чем один раз вызвать на каждом тике CopyTime() или iTime().

CopyRates() вызывайте только тогда - когда вам разом нужно получить одновременно все значения бара - в момент определения нового бара.

Хорошо. Значит установку забыть о iXXX функциях нужно забыть.))

 
Реter Konow:

Хорошо. Значит утверждение забыть о iXXX функциях нужно забыть.))

Конечно. Не всё полезно, что говорят. И я могу фигню наговорить :)))

Но тут - из соображений скорости: CopyRates() удобна когда нужно получить одновременно несколько значений одного бара (ваш случай). Она медленнее, чем CopyTime() или iTime(), но если вы четыре раза вызовите CopyOpen(), CopyHigh(), CopyLow() и CopyClose() + (CopyTime() при необходимости), то это получится медленнее, чем один раз вызывать CopyRates(), которая разом вернёт все нужные значения.

Вывод: на каждом тике работаем с CopyTime() или iTime() для определения нового бара, а в момент появления нового бара единожды вызываем CopyRates().

А религиозные заявления, не подтверждённые ничем, кроме веры - не стоит брать в расчёт. Можете сами проверить что будет быстрее для вашего случая определения нового бара - CopyTime() или iTime() - с недавнего времени полноценная MQL5-функция, облегчающая написание кроссплатформенного кода (тут вру - так как в MQL4 тоже есть CopyXXX-функции, но портирование MQL4-кода в MQL5 облегчается - не нужно iXXX-функции переделывать)

 
Реter Konow:
Иначе как узнать, что изменилось время открытия текущего бара?
//+------------------------------------------------------------------+
//|                                                       NewBar.mq5 |
//|                        Copyright 2019, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2019, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"

MqlDateTime time;

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
{

   EventSetMillisecondTimer(100);
   return(INIT_SUCCEEDED);
}

//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
   EventKillTimer();   
}

//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
{

   
}

//+------------------------------------------------------------------+
//| Timer function                                                   |
//+------------------------------------------------------------------+
void OnTimer()
{
   TimeGMT(time);   
   //TimeLocal(time);

   if(NewMinute())
   {
     Print("Я новая минута");
   }		
}

//####################################################################

//Получить новое время
int zero = 0;
bool NewMinute()
{
  int minute = time.min; //time.sec; time.hour;  time.day; 
  if(zero != minute)
  {    
    zero = minute;
    return(true);
  }
  else return(false); 
}
 
Реter Konow:

У Вас в классе вызов iTime. Мне посоветовали о ней забыть.) К тому же, где гарантия что она в свою очередь не делает туже работу, что и CopyRates? Вы же ее на каждом тике вызываете. Короче, буду вызывать CopyRates на каждом тике и вопрос закрыт.

Вы всегда только пишете и не пытаетесь читать? я Вам ссылку на целую статью про "Новый бар" дал! Статьи проверяют - проверяют люди другой компетенции, чем те кто пишут постоянно на форуме  ;)

ЗЫ: если бросите писать и начнете читать , например статью по моей ссылке, то можете найти еще один способ (  SERIES_LASTBAR_DATE  ) не использовать функции iXXX() -  сказали же, что ими не пользоваться ))) - кто бы в баги и ошибки сообщил, что разработчики халтуру выпустили )))))

 
Igor Makanu:

Вы всегда только пишете и не пытаетесь читать? я Вам ссылку на целую статью про "Новый бар" дал! Статьи проверяют - проверяют люди другой компетенции, чем те кто пишут постоянно на форуме  ;)

ЗЫ: если бросите писать и начнете читать , например статью по моей ссылке, то можете найти еще один способ (  SERIES_LASTBAR_DATE  ) не использовать функции iXXX() -  сказали же, что ими не пользоваться ))) - кто бы в баги и ошибки сообщил, что разработчики халтуру выпустили )))))

С SERIES_LASTBAR_DATE были какие-то проблемы. Обсуждалось тут где-то давно. Может и поправили уже.

Причина обращения: