[АРХИВ!] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 4. - страница 398

 
DanLett:

т.е. пока строиться текущий бар[0] предыдущий определяем


Ну как вариант:

datetime last_time;   // глобальная переменная

...

int start()
{
   if (last_time != Time[0])
   {
      // Ура, новый бар!
      last_time = Time[0];      // запоминаем новый бар
      //... ваши расчеты с плюсованием
   }
   
... дальше работаем
 
7777877:

Да, спасибо помогло... Но хотелось бы понять, почему не работает (как надо) вариант ObjectSet(object_name,OBJPROP_TIMEFRAMES,PERIOD_H1)? Это что, глюки внутри самого языка?

Де-факто и PERIOD_H1 и OBJ_PERIOD_H1 это просто буквенная замена некоторого числового значения.

OBJ_PERIOD_H1 = 0x0010 (на данный билд) = 0001 0000 (в двоичном виде)

PERIOD_H1 = 60 (на данный билд) = 0011 1100 (в двоичном виде)


Как легко заменить, вы случайно подставили вместо одного таймфрейма как раз 4 - H4, H1, M30 и M15


А вы вместо вызова ObjectSet(object_name,OBJPROP_TIMEFRAMES,0x0010) (который вы хотели сделать) сделали вызов

ObjectSet(object_name,OBJPROP_TIMEFRAMES,0x3C)

 
datetime last_time;   // глобальная переменная

...

int start()
{
   if (last_time != Time[0])
   {
      // Ура, новый бар!
      last_time = Time[0];      // запоминаем новый бар
      if(close[1]>open[1]) 
xBost_b=xBost_b+((close[1]-low[1])*10000);
   }

а что за Time[0] и как это повлияет на 1раз плюсование ?! просто чуть не понял...

 
DanLett:

а что за Time[0] и как это повлияет на 1раз плюсование ?! просто чуть не понял...

Time[0] это время открытия самого последнего (текущего) бара. Как только наступает новый бар, оно меняется.

наберите Time в MetaEditor и нажмите F1 для подробной информации

 
ilunga:

Time[0] это время открытия самого последнего (текущего) бара. Как только наступает новый бар, оно меняется.

наберите Time в MetaEditor и нажмите F1 для подробной информации

сейчас прочитаю! большое спасибо!
 
DanLett:
сейчас прочитаю! большое спасибо!

Тогда не забудьте посмотреть iTime()
 
   datetime last_time;   // глобальная переменная
  int xBost_b;
  int xBost_s;
double hi=High[1];
double op=Open[1];
double cl=Close[1];
double lo=Low[1];
int Sum_xb;
int Sum_xs;
 
 if (last_time != Time[0])
   {
      // Ура, новый бар!
      last_time = Time[0];      // запоминаем новый бар
      if(Close[1]>Open[1]) 
xBost_b=(hi-cl)*10000;
Sum_xb=Sum_xb+xBost_b;<---------не плюсует,выдает такое же число как и xBost

      if(Close[1]<Open[1])
 xBost_s=(cl-lo)*10000; 
Sum_xs=Sum_xs+xBost_s;    
Comment("\n kolvo_b=",xBost_b,"\n Sum_xb=",Sum_xb,"\n kolvo_s=",xBost_s,"\n Sum_xs=",Sum_xs);

   }
как сделать что бы плюсовала каждый раз???
 
DanLett:
как сделать что бы плюсовала каждый раз???
глобальные переменные должны находиться вне всех функций. Суммы тоже туда отправьте. или объявите эти переменные как static
 
DanLett:
как сделать что бы плюсовала каждый раз???
Вытащить last_time из функции start() и объявить статической
 
Как на синтетических барах (https://www.mql5.com/ru/articles/1353 ) сделать чтобы функция внутри советника работала только по ценам открытия? На обычных это делалось по времени открытия текущего бара-типа такого if (Time[0] == prevtime4) return;
prevtime4=Time[0]; но синт бары без времени..по идее здесь можно написать if bid является ценой открытия,но как это сделать хз.