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

 

Продублирую вопрос, возможно, никто не заметил из-за последующих вопросов.

 

 Решил я понять как работает индикатор ATR, и, заодно, изучить его код. Суть то  понял, но странно он написан.

Вот его функция start:

int start()
  {
   int i,counted_bars=IndicatorCounted();
//----
   if(Bars<=AtrPeriod) return(0);
//---- initial zero
   if(counted_bars<1)
      for(i=1;i<=AtrPeriod;i++) AtrBuffer[Bars-i]=0.0;
//----
   i=Bars-counted_bars-1;
   while(i>=0)
     {
      double high=High[i];
      double low =Low[i];
      if(i==Bars-1) TempBuffer[i]=high-low;
      else
        {
         double prevclose=Close[i+1];
         TempBuffer[i]=MathMax(high,prevclose)-MathMin(low,prevclose);
        }
      i--;
     }
//----
   if(counted_bars>0) counted_bars--;
   int limit=Bars-counted_bars;
   for(i=0; i<limit; i++)
      AtrBuffer[i]=iMAOnArray(TempBuffer,Bars,AtrPeriod,0,MODE_SMA,i);
//----
   return(0);
  }
//+----------------

 Вот первый блок с непоняткой:

//---- initial zero
   if(counted_bars<1)
      for(i=1;i<=AtrPeriod;i++) AtrBuffer[Bars-i]=0.0;
//----

 Какой смыл что-либо делать, если значение counted_bars<1. По-моему это значит что индикатор не просчитал ни одного бара, и нужно просто выйти из функции, т.к. значений никаких ещё нет... В чём подвох?

 Почему AtrBuffer с индексом [Bars-i] ? Ведь я так понял, тут смысл в том, что если нет значений, то задать буферу значение 0.0. Но тут же получается что значение 0.0 задаётся только для баров от (Bars) до (AtrPeriod), а от AtrPeriod до 0-ого бара ничего в буфер не записываем. Почему?

 Я логики не понял этого фрагмента кода

 В следующем блоке:

//----
   i=Bars-counted_bars-1;
   while(i>=0)
     {
      double high=High[i];
      double low =Low[i];
      if(i==Bars-1) TempBuffer[i]=high-low;
      else
        {
         double prevclose=Close[i+1];
         TempBuffer[i]=MathMax(high,prevclose)-MathMin(low,prevclose);
        }
      i--;
     }
//----

 В строчке:

if(i==Bars-1) TempBuffer[i]=high-low;

  Условие, если i==Bars-1. Выходит, что учитывается значение 1-ого бара с начала графика слева.. НО это очень далеко, какой прок с этого значения? 

 
hoz:

Продублирую вопрос, возможно, никто не заметил из-за последующих вопросов.

 

 Решил я понять как работает индикатор ATR, и, заодно, изучить его код. Суть то  понял, но странно он написан.

Вот его функция start:

 Вот первый блок с непоняткой:

 Какой смыл что-либо делать, если значение counted_bars<1. По-моему это значит что индикатор не просчитал ни одного бара, и нужно просто выйти из функции, т.к. значений никаких ещё нет... В чём подвох?

 Почему AtrBuffer с индексом [Bars-i] ? Ведь я так понял, тут смысл в том, что если нет значений, то задать буферу значение 0.0. Но тут же получается что значение 0.0 задаётся только для баров от (Bars) до (AtrPeriod), а от AtrPeriod до 0-ого бара ничего в буфер не записываем. Почему?

 Я логики не понял этого фрагмента кода

 В следующем блоке:

 В строчке:

  Условие, если i==Bars-1. Выходит, что учитывается значение 1-ого бара с начала графика слева.. НО это очень далеко, какой прок с этого значения? 


Бары считаются справа налево (с 0 до последнего (Ваrs) минус 1). С каждым новым баром (0) все бары соответственно увеличиваются на единицу, и последний (слева) никогда не указывается в числовом измерении, а этой переменной Ваrs, т.к. никто не знает, какая у вас история, но это гарантирует работу индикатора на всей истории, какая есть. Тренируйте логику, без ней никак нельзя понять ничего!
 
laveosa:
у меня 1 пункт-1 цент. получается мне надо 20USD чтоб выдержать движение вниз до стопа размером в 200 пунктов?
Если при лоте 0.01 пункт = 1 цент, то для позиции в 0.1 лота и стоп-лоссе 200 пунктах убыток = 20 USD.
 
borilunad:

Бары считаются справа налево (с 0 до последнего (Ваrs) минус 1). С каждым новым баром (0) все бары соответственно увеличиваются на единицу, и последний (слева) никогда не указывается в числовом измерении, а этой переменной Ваrs, т.к. никто не знает, какая у вас история, но это гарантирует работу индикатора на всей истории, какая есть. Тренируйте логику, без ней никак нельзя понять ничего!

 Я знаю, что бары считаются справа налева. Если на графике 5000 баров, и период ATR = 14, то [Bars-i]  примет значение от (5000 - 1) до (5000 - 14), т.е. от 4999 до 4986.

 Таким образом AtrBuffer будет с индексом i равным от 4999 до 4986. И где остальные бары от 0 до 4986 ???

 
hoz:

 Я знаю, что бары считаются справа налева. Если на графике 5000 баров, и период ATR = 14, то [Bars-i]  примет значение от (5000 - 1) до (5000 - 14), т.е. от 4999 до 4986.

 Таким образом AtrBuffer будет с индексом i равным от 4999 до 4986. И где остальные бары от 0 до 4986 ???


Как вы считаете? Если период АТR = 14, значит нулевой бар даёт среднее значение 14-ти баров перед нулевым и т.д. в глубину истории.

i проходит по 14-барам последним по времени, но по  первым по номерам, чтобы их усреднить или что сделать по формуле. Также считает значение 4986-го бара по 14-ти предыдущим по времени, то есть по стоящим слева.

Изучайте оператор for в Доке и в учебнике!

 
borilunad:


Как вы считаете? Если период АТR = 14, значит нулевой бар даёт среднее значение 14-ти баров перед нулевым и т.д. в глубину истории.

i проходит по 14-барам последним по времени, но по  первым по номерам, чтобы их усреднить или что сделать по формуле. Также считает значение 4986-го бара по 14-ти предыдущим по времени, то есть по стоящим слева.

Изучайте оператор for в Доке и в учебнике!

 Вопрос был не о том, то что ты сказал я понимаю. Это я перетрудился и тупанул. Там был затуп в том, что в буфер AtrPeriod передаётся кол-о баров истории.. А я смотрел на это и не въезжал. У меня такое бывает, когда переработаю..
 
hoz:
 

Виктор, Ваши предположения алогичны. 

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

А значения индикатора  на истории нужны для анализа истории:) 

 
 Уважаемые профи,   матодижание в 4 спреда  советника при тесте на 5минутках все тики - это еще плохо, или уже более-менее?
 
kakin:
 Уважаемые профи,   матодижание в 4 спреда  советника при тесте на 5минутках все тики - это еще плохо, или уже более-менее?

Мало информации, да и спят профи:) 
 
paladin80:
Если при лоте 0.01 пункт = 1 цент, то для позиции в 0.1 лота и стоп-лоссе 200 пунктах убыток = 20 USD.
спасибо дружище я так и думал......спс  :)