Определение максимальной и минимальной цены закрытия за предыдущий день часового бара - страница 2

 
Taras Slobodyanik:

используйте свой первоначальный код, но поставьте инициализацию переменных в начале цикла

но это не "последний день", а последние 24 свечи

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

 
mrostrich:

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

вы так написали?
MaxCloseHourPrice=0;
MinCloseHourPrice=DBL_MAX;

for(int i=24; i>0; i--)
   {
   if (iClose(NULL,PERIOD_H1,Hour()+i)>MaxCloseHourPrice)
      MaxCloseHourPrice=iClose(NULL,PERIOD_H1,Hour()+i);
   if (iClose(NULL,PERIOD_H1,Hour()+i)<MinCloseHourPrice)
      MinCloseHourPrice=iClose(NULL,PERIOD_H1,Hour()+i);
   }
 

Обновил пост, походу так оно точнее будет. На самом деле, если вам нужны предыдущие сутки, то с них и начинайте.

 
Taras Slobodyanik:
вы так написали?

Нет, вы просили в начале цикла переменные объявить, но так я тоже сделал и ничего, не хочет

 

Да, объявляйте переменные 

double MaxCloseHourPrice=0, MinCloseHourPrice = DBL_MAX;


не на глобальном уровне, а перед циклом.

Сделал скрипт потренируйтесь.

void OnStart()
  {
//---
double MaxCloseHourPrice=0, MinCloseHourPrice = DBL_MAX;
int iMAX;
int h=Hour();
for(int i=24; i>0; i--)

      {

        if (iClose(NULL,PERIOD_H1,h+i)>MaxCloseHourPrice)
        {
        iMAX=h+i;
        MaxCloseHourPrice=iClose(NULL,PERIOD_H1,h+i);
        }

        if (iClose(NULL,PERIOD_H1,h+i)<MinCloseHourPrice)

        MinCloseHourPrice=iClose(NULL,PERIOD_H1,h+i);

      }
      Alert("Время макс.=",Time[iMAX],"Время начала=",Time[24+h],"Время окончания=",Time[1+h],"MaxCloseHourPrice=",MaxCloseHourPrice);   
  }
//+------------------------------------------------------------------+
 
forexman77:

Да, объявляйте переменные 


не на глобальном уровне, а перед циклом.

Сделал скрипт потренируйтесь.


Еще бы уметь с ними работать, а то зеленый еще в этой теме

 
mrostrich:

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


Справка:

Hour()
Возвращает текущий час последнего известного серверного времени на момент старта программы (в процессе выполнения программы это значение не меняется).

 

Зачем использовать Hour()? Допустим сейчас 15:00: 15+24=39. Вот и получите промежуток не равный предыдущим суткам.

 
Konstantin Nikitin:

Зачем использовать Hour()? Допустим у сейчас 15:00: 15+24=39. Вот и получите промежуток не равный предыдущим суткам.


Эту часть кода не я прописывал, поэтому не вдавался в этот момент

 

Теперь скрипт для поиска в прошлом дне начиная с начала, до такого же часа, что и текущий.

void OnStart()
  {
//---
int h=0,barshift=0,indexPlus=0, iMax=0, iMin=0;
double CloseMax=0.0, CloseMin=0.0;
h=Hour();
datetime data=iTime(NULL,PERIOD_D1,1);//время открытия вчерашнего дневного бара  
barshift=iBarShift(NULL,PERIOD_H1,data);//индекс первого часового бара, вчерашнего дня
indexPlus=barshift-h;
iMax=iHighest(NULL,PERIOD_H1,MODE_CLOSE,h,indexPlus);//индекс максимума часового бара 
iMin=iLowest(NULL,PERIOD_H1,MODE_CLOSE,h,indexPlus);//индекс минимума часового бара 
CloseMax=Close[iMax];
CloseMin=Close[iMin]; 
Alert("время начала=",Time[barshift],"время оконч.=",Time[indexPlus],"время макс.=",Time[iMax],"время минимума=",Time[iMin]);
  }
Причина обращения: