Изучаем и пишем вместе на MQL5 - страница 8

 

пишу алгоритм переноса простых ценовых конструкций на мкл5 с мкл4, на примеры копирования мкл4 кода на мкл5  стохастика масд и рсай, там используются основные методы доступа к данным мкл4.

скора будет, то что должно получиться

сейчас борюсь с функцией иМаОнАррау поскольку в мт5 её не предусмотренно получать наипростейшие методы скользящих средних с пользовательских массивов.

расширю библиотечки до всех технических инструментов, почти все алгоритмы знаю

Документация по MQL5: Стандартные константы, перечисления и структуры / Константы индикаторов / Методы скользящих
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы индикаторов / Методы скользящих
  • www.mql5.com
Стандартные константы, перечисления и структуры / Константы индикаторов / Методы скользящих - Документация по MQL5
 

Что-то я туплю... Никак не соображу, как написать...

Есть такой код:

   MqlRates rates[];
   
   ArraySetAsSeries(rates,true);
   int copied=CopyRates(_Symbol,_Period,0,1000,rates);
   

 Далее мне нужно получить индекс бара с минимальным Low среди баров с i-го по j-тый.

Пытаюсь использовать функцию ArrayMinimum.

int k=ArrayMinimum(rates.low,i,j-i+1); - неправильно

int k=ArrayMinimum(rates[].low,i,j-i+1); - неправильно

А как правильно? 

Документация по MQL5: Операции с массивами / ArrayMinimum
Документация по MQL5: Операции с массивами / ArrayMinimum
  • www.mql5.com
Операции с массивами / ArrayMinimum - Документация по MQL5
 
owl:

Что-то я туплю... Никак не соображу, как написать...

Есть такой код:

 Далее мне нужно получить индекс бара с минимальным Low среди баров с i-го по j-тый.

Пытаюсь использовать функцию ArrayMinimum.

int k=ArrayMinimum(rates.low,i,j-i+1); - неправильно

int k=ArrayMinimum(rates[].low,i,j-i+1); - неправильно

А как правильно? 

Используй функции прямого доступа, MqlRates  - это массив "структур", а тебе нужем массив Low вот пример, сразу и для High.

   rates_total=CopyHigh(NULL,_Period,_start,_end,iHigh);
   if(rates_total<=0)
      return;
   else
      HighDay=iHigh[ArrayMaximum(iHigh,0,rates_total)];
   rates_total=CopyLow(NULL,_Period,_start,_end,iLow);
   if(rates_total<=0)
      return;
   else
      LowDay=iLow[ArrayMinimum(iLow,0,rates_total)];

Смотрите примеры кодов. Это из https://www.mql5.com/ru/code/102

PivotPointUniversal
PivotPointUniversal
  • голосов: 17
  • 2010.04.26
  • Dmitry
  • www.mql5.com
Опорные точки Pivot без использования объектов строятся по всей доступной истории. Пять вариантов расчета. Три варианта построения: дневной, недельный, месячный. Для дневных уровней есть возможность смещения по GMT.
 
vdv2001:

Используй функции прямого доступа, MqlRates  - это массив "структур", а тебе нужем массив Low вот пример, сразу и для High.

Это понятно. В моём случае я просто написал:

         int k=i; double min=rates[k].low;
         for (int m=i+1;m<=j;m++)
            if (rates[m].low<min) {min=rates[m].low; k=m;}

 Ну не хочется мне кучу массивов... Не экономно по ресурсам и не очень красиво...

Просто хотелось разобраться именно с  ArrayMinimum - можно ли использовать эту функцию с массивом структур....

 
owl:

Это понятно. В моём случае я просто написал:

 Ну не хочется мне кучу массивов... Не экономно по ресурсам и не очень красиво...

Просто хотелось разобраться именно с  ArrayMinimum - можно ли использовать эту функцию с массивом структур....

Если ты считаеш что хранить кучу информации в массиве структур экономичнее чем массив double, то я просто развожу руки

 

struct MqlRates
  {
   datetime time;         // время начала периода
   double   open;         // цена открытия
   double   high;         // наивысшая цена за период
   double   low;          // наименьшая цена за период
   double   close;        // цена закрытия
   long     tick_volume;  // тиковый объем
   int      spread;       // спред
   long     real_volume;  // биржевой объем 
  };

 

или ты думаеш, что хранение интов, лонгов и даты экономичнее в плане памяти?  ;)) 

или выбирать из кучи мусора то, что тебе нужно экономичнее, ха ха ... 

 
vdv2001:

Если ты считаеш что хранить кучу информации в массиве структур экономичнее чем массив double, то я просто развожу руки

 

 

или ты думаеш, что хранение интов, лонгов и даты экономичнее в плане памяти?  ;)) 

или выбирать из кучи мусора то, что тебе нужно экономичнее, ха ха ... 

Ну... на счёт экономичности я, конечно слегка погорячился... Но, вообще-то, мне как раз нужна практически вся инфа из MqlRates (за исключением, может быть объёмов, и то не факт...)
Документация по MQL5: Стандартные константы, перечисления и структуры / Структуры данных / Структура исторических данных
Документация по MQL5: Стандартные константы, перечисления и структуры / Структуры данных / Структура исторических данных
  • www.mql5.com
Стандартные константы, перечисления и структуры / Структуры данных / Структура исторических данных - Документация по MQL5
 

Обычно, прежде чем что-либо спросить, я просматриваю различные источники в поисках ответа.

Но сейчас, после недели мытарств, я уже  понял - ответа у меня нет и помоему никто еще не сталкивался с этим. Поэтому предлагаю головоломку.

 Исходные данные:

1) есть простенький индикатор типа    Уровни и Стрелки   iS7N_SacuL_v3.mq5 (прикреплен)

2) эксперт, который пытается получать от этого индикатора данные aS7N_TIC.mq5  (прикреплен)

Так вот!

Из пяти индикаторных буферов, верно возвращаются данные только из двух.

Подробные пояснения последуют!!! 

Усреднение ценовых рядов без дополнительных буферов для промежуточных расчетов
Усреднение ценовых рядов без дополнительных буферов для промежуточных расчетов
  • 2010.10.25
  • Nikolay Kositsin
  • www.mql5.com
Статья о традиционных и не совсем традиционных алгоритмах усреднения, упакованных в максимально простые и достаточно однотипные классы. Они задумывались для универсального использования в практических разработках индикаторов. Надеюсь, что предложенные классы в определенных ситуациях могут оказаться достаточно актуальной альтернативой громоздким, в некотором смысле, вызовам пользовательских и технических индикаторов.
Файлы:
 

Посмотрев на ситуацию болеетвнимательно, обнаружил, что и 3 и 4 индикаторные буферы не всегда выдают правильные данных (хотя какие правильные а какие нет не разобрать)

Посмотрите на график. Слева в окне Данных значения индикатора установленного на график, внизу данные полученные экспертом. Большинство значений совпадает, но попадаются и такие смотри ниже...

 

 

В связи с этим появилось предположение, что на графике и в тестере используются различные исторические данные.

Кто что думает? 

 

И наконец главная проблема! Получить данные 1,2 и 5 индикаторных буферов обычным путем не представляется возможным.

Проблема в том, что при расчете данных для этих массивов учитываются ранее расчитанные данные предыдущих баров.

Можно конечно, при вызове индикатора указать ему принудительно перерасчитать  N предстоящих баров независимо от значения   prev_calculated

Я предполагаю, что вызов и расчет значений индикатора происходит со значением  prev_calculated не равным   0

 Для большинства индикаторов это верно, т.к. экономит ресурсы, но для приведенного примера работать не будет.

Что делать? Какие мысли?

Как вариант, можно все расчеты перенести в эксперт!!! Этот вариант работает, но не то... Хочется все же штаны не через голову одевать. 

Способы вызова индикаторов в MQL5
Способы вызова индикаторов в MQL5
  • 2010.03.09
  • KlimMalgin
  • www.mql5.com
C появлением новой версии языка MQL, не только изменился подход к работе с индикаторами, но и появились новые способы создания индикаторов. Кроме того, появилась дополнительная гибкость при работе с индикаторными буферами - теперь вы можете самостоятельно указать нужное направление индексации и получать ровно столько значений индикатора, сколько вам требуется. В этой статье рассмотрены базовые методы вызова индикаторов и получения данных из индикаторных буферов.
 

в советнике используется

int resIup = CopyBuffer(iCusHandlI_H4,2,0,1,dBufIup_H4);
берется значение с 0-го бара, значения индикаторных буферов  для него изменяются на каждом тике до закрытия свечи.
Усреднение ценовых рядов без дополнительных буферов для промежуточных расчетов
Усреднение ценовых рядов без дополнительных буферов для промежуточных расчетов
  • 2010.10.25
  • Nikolay Kositsin
  • www.mql5.com
Статья о традиционных и не совсем традиционных алгоритмах усреднения, упакованных в максимально простые и достаточно однотипные классы. Они задумывались для универсального использования в практических разработках индикаторов. Надеюсь, что предложенные классы в определенных ситуациях могут оказаться достаточно актуальной альтернативой громоздким, в некотором смысле, вызовам пользовательских и технических индикаторов.