Поиск по ArrayMinimum и ArrayMaximum

 

Покажите на примере как искать допустим цены закрытия, максимум, минимум за опред кол-во нами выбранное.

Например найти в массиве 2 значения:

1) Максимум за 30 баров

2) Ближайшие максимальное число после максимального  

Обьясните плз. 

 
Kirill Andreev:

Покажите на примере как искать допустим цены закрытия, максимум, минимум за опред кол-во нами выбранное.

Например найти в массиве 2 значения:

1) Максимум за 30 баров

2) Ближайшие максимальное число после максимального  

Обьясните плз. 

2) После это слева или справа?

 
Kirill Andreev:

Покажите на примере как искать допустим цены закрытия, максимум, минимум за опред кол-во нами выбранное.

Например найти в массиве 2 значения:

1) Максимум за 30 баров

2) Ближайшие максимальное число после максимального  

Обьясните плз. 

Я вот таким пользуюсь, на выходе номера баров, а не цена, нужно по номеру бара узнавать цену, а можно и время. Может и не красиво, но работает

два Low: lkey1, lkey2

два High: hkey1, hkey2 

{
int lkey1=-1, lkey2=-1, hkey1=-1, hkey2=-1;

int Range = 300; // Диапазон поиска
int Skip  = 96;  // С какого бара начинать
ENUM_TIMEFRAMES TFRange = PERIOD_CURRENT; // Таймфрейм поиска

LowHighRange(lkey1, lkey2, hkey1, hkey2, dSymbol, TFRange, Range, Skip);
if(lkey1<0 || lkey2<0 || hkey1<0 || hkey2<0) { Print("Not History. Search Bars= ",Range); return;}
  double RangeLows_1= Low(dSymbol,TFRange,lkey1);
  double RangeLows_2= Low(dSymbol,TFRange,lkey2);
  double RangeHigh_1= High(dSymbol,TFRange,hkey1);
  double RangeHigh_2= High(dSymbol,TFRange,hkey2);
}
//===============================================================================================
//------------------- Функция расчёта Двух High/Low для заданного промежутка -------------------+
//===============================================================================================
void LowHighRange(int &_lkey1, int &_lkey2, int &_hkey1, int &_hkey2,
                                  string symb, ENUM_TIMEFRAMES timeframe, int ne=5, int skip=1) {

double _Low[],_low1=-1,_low2 =-1,_High[],_high1=-1,_high2=-1;
_lkey1=-1; _lkey2=-1; _hkey1=-1; _hkey2=-1;

  ArraySetAsSeries(_Low,true);
  ArraySetAsSeries(_High,true);
  int lcopy=CopyLow(symb,timeframe,skip,ne,_Low);
  int hcopy=CopyHigh(symb,timeframe,skip,ne,_High);
   if(lcopy==ne && hcopy==ne) {
    _low1=_Low[ArrayMinimum(_Low)];
    _lkey1=ArrayMinimum(_Low)+skip;
    _high1=_High[ArrayMaximum(_High)];
    _hkey1=ArrayMaximum(_High)+skip;

    for(int z=0;z<ne;z++) {
     // Low
     if((_Low[z]!=_low1 && _low2>_Low[z]) || _low2<0) {
      _low2=_Low[z];
      _lkey2=z+skip;
     }
     // High
     if(_High[z]!=_high1 && _high2<_High[z]) {
      _high2=_High[z];
      _hkey2=z+skip;
     }
    }// for
   }//if
}
 
Vitalie Postolache:

2) После это слева или справа?

   слева или справа? допстим макс за 30 баров 1,06500 а ближайшие закрытие свечи с такой же ценой только 1,06450 , значит берем его, берем то которое больше подходит.
 
Kirill Andreev:
   слева или справа? допстим макс за 30 баров 1,06500 а ближайшие закрытие свечи с такой же ценой только 1,06450 , значит берем его, берем то которое больше подходит.

Тогда можно скопировать в массив цены закрытия и применить ArraySort(num_array,WHOLE_ARRAY,0,MODE_DESCEND);

Первое значение и будет максимум, а второе, соответственно, искомое "Ближайшие максимальное число после максимального". Ну и последним будет как раз минмиум цены в заданном диапазоне баров.

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