Learning and writing together in MQL5 - page 8

 

i'm writing an algorithm of simple price constructions transfer to mcl5 from mcl4, on examples of mcl4 code copying to mcl5 stochastic masd and rsi, there are basic methods of access to mcl4 data.

Soon we'll have what we need.

now I'm struggling with iMaOnArRAu function as mt5 doesn't provide it to get the simplest methods of moving averages from user arrays.

i will expand libraries to all technical tools, i know almost all algorithms

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

I'm so dumb... I can't figure out how to write...

There is this code:

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

I want to get the index of the bar with the lowest Low among the bars from i-th to j-th.

I'm trying to use the ArrayMinimum function.

int k=ArrayMinimum(rates.low,i,j-i+1); - wrong

int k=ArrayMinimum(rates[].low,i,j-i+1); - wrong

What is the correct way?

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

I'm so dumb... I can't figure out how to write...

There is this code:

I want to get the index of the bar with the lowest Low among the bars from i-th to j-th.

I'm trying to use the ArrayMinimum function.

int k=ArrayMinimum(rates.low,i,j-i+1); - wrong

int k=ArrayMinimum(rates[].low,i,j-i+1); - wrong

What is the correct way?

Use functions of direct access, MqlRates is an array of "structures", and you need an array Low, here is an example, for High as well.

   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)];

Take a look at examples of codes. This is from https://www.mql5.com/ru/code/102

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

Use direct access functions, MqlRates is an array of "structures" and you need an array of Low, here is an example, immediately and for High.

It's understandable. In my case, I've just written:

         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;}

I don't want a bunch of arrays. It's not thrifty on resources and not very nice...

I just wanted to understand exactly withArrayMinimum - is it possible to use this function with an array of structures....

 
owl:

It's understandable. In my case, I just wrote:

I don't want a bunch of arrays... It's not resource-saving and not very nice...

I just wanted to deal with ArrayMinimum - is it possible to use this function with an array of structures....

If you think that storing a bunch of information in an array of structures is more economical than an array of doubles, I'm just holding up my hands.

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

or do you think storing ints, longs and dates is more economical in terms of memory?)

or picking out what you need from a pile of rubbish is more economical, ha ha ...

 
vdv2001:

If you think storing a bunch of information in an array of structures is more economical than an array of doubles, then I'm just giving up

or do you think storing ints, lows and dates is more economical in terms of memory? ;))

or picking out what you need from a pile of rubbish is more economical, ha ha ...

Well... I'm a little bit over the top about cost-effectiveness, of course... But, actually, I need almost all information fromMqlRates(except maybe volumes, and that's not a fact...)
Документация по MQL5: Стандартные константы, перечисления и структуры / Структуры данных / Структура исторических данных
Документация по MQL5: Стандартные константы, перечисления и структуры / Структуры данных / Структура исторических данных
  • www.mql5.com
Стандартные константы, перечисления и структуры / Структуры данных / Структура исторических данных - Документация по MQL5
 

Usually, before I ask anything, I go through various sources in search of an answer.

But now, after a week of searching, I've realised that I don't have an answer and I don't think anyone has come across it yet. Therefore I propose a puzzle.

Initial data:

1) I have a simple indicator such as Levels and Arrows iS7N_SacuL_v3.mq5 (attached)

2) an Expert Advisor that tries to receive data from this indicator aS7N_TIC.mq5 (attached)

So!

Out of five indicator buffers, only two data are correctly returned.

A detailed explanation will follow!!!

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

Having looked at the situation carefully, I found that both 3 and 4 indicator buffers do not always give the correct data (although it is impossible to tell which are correct and which are not)

Look at the chart. In the Data window on the left side there are values of the indicator in the chart and below there are values obtained by the Expert Advisor. Most of the values are the same, but there are some more...

In this regard, I have suggested that different historical data are used in the chart and in the tester.

What do you think?

 

Finally, the main problem! It is not possible to get the data of 1,2 and 5 indicator buffers in the usual way.

The problem is that the previously calculated data of the previous bars are taken into account when calculating the data for these arrays.

Of course, when calling the indicator, you can force it to recalculate N upcoming bars, regardless of the value of prev_calculated .

I suppose that the calling and calculation of indicator values is performed with the value ofprev_calculated not equal to 0

For most indicators this is true, because it saves resources, but for the given example it won't work.

What to do? What are your thoughts?

Alternatively, you can move all calculations to the Expert Advisor! This option works, but not the same... I'd like to not wear my trousers over my head.

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

in the Expert Advisor is used

int resIup = CopyBuffer(iCusHandlI_H4,2,0,1,dBufIup_H4);
value from bar 0 is taken, the values of indicator buffers for it are changed on every tick until the candle closes.
Усреднение ценовых рядов без дополнительных буферов для промежуточных расчетов
Усреднение ценовых рядов без дополнительных буферов для промежуточных расчетов
  • 2010.10.25
  • Nikolay Kositsin
  • www.mql5.com
Статья о традиционных и не совсем традиционных алгоритмах усреднения, упакованных в максимально простые и достаточно однотипные классы. Они задумывались для универсального использования в практических разработках индикаторов. Надеюсь, что предложенные классы в определенных ситуациях могут оказаться достаточно актуальной альтернативой громоздким, в некотором смысле, вызовам пользовательских и технических индикаторов.