[ВНИМАНИЕ, ТЕМА ЗАКРЫТА!] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда. - страница 333

 

Спорить не буду! Попробуете - поймете в чем дело. Просто пишу для тех, кто сталкнется с этой проблеммой. ТАМ ОБРАТНОЕ ИНДЕКСИРОВАНИЕ. поэтому график перевернут во времени. Выкладываю текст индикатора. ПРАВИЛЬНЫЙ. Посмотрите на график очень интересные входы можно по нему обнаружить. Мне показалось он раньше и точнее входит чем МАСД

#property indicator_separate_window
#property indicator_buffers 1
#property indicator_color1 Red

double Buf_0[1000],Bears_array[1000],Bulls_array[1000],Line1[1000],Line2[1000];
int init()
  {
  SetIndexBuffer(0,Buf_0);
  SetIndexStyle (0,DRAW_HISTOGRAM,STYLE_SOLID,2);
  return;
  }
extern double PeriodPower=13;
extern double MA_Period=5;

int start()
{
  int i=Bars-IndicatorCounted()-1;
  while(i>=0)
  {
  Bulls_array[i]=iBullsPower(NULL,0,PeriodPower,PRICE_CLOSE,i);
  Bears_array[i]=iBearsPower(NULL,0,PeriodPower,PRICE_CLOSE,i);
  ArraySetAsSeries(Bears_array,true); // Применено для синхронизации индексирования в функции iMAOnArray
  ArraySetAsSeries(Bulls_array,true);  
  Line1[i]=iMAOnArray(Bears_array,0,MA_Period,0,MODE_SMMA,i); 
  Line2[i]=iMAOnArray(Bulls_array,0,MA_Period,0,MODE_SMMA,i);  
  Buf_0[i]=(Line2[i]+Line1[i])/Point/10;

  i--;
  }
return;
}


 
Stepan241 писал(а) >>

Спорить не буду! Попробуете - поймете в чем дело. Просто пишу для тех, кто сталкнется с этой проблеммой. ТАМ ОБРАТНОЕ ИНДЕКСИРОВАНИЕ. поэтому график перевернут во времени. Выкладываю текст индикатора. ПРАВИЛЬНЫЙ. Посмотрите на график очень интересные входы можно по нему обнаружить. Мне показалось он раньше и точнее входит чем МАСД

#property indicator_separate_window
#property indicator_buffers 1
#property indicator_color1 Red

double Buf_0[1000],Bears_array[1000],Bulls_array[1000],Line1[1000],Line2[1000];
int init()
{
SetIndexBuffer(0,Buf_0);
SetIndexStyle (0,DRAW_HISTOGRAM,STYLE_SOLID,2);
return;
}
extern double PeriodPower=13;
extern double MA_Period=5;

int start()
{
int i=Bars-IndicatorCounted()-1;
while(i>=0)
{
Bulls_array[i]=iBullsPower(NULL,0,PeriodPower,PRICE_CLOSE,i);
Bears_array[i]=iBearsPower(NULL,0,PeriodPower,PRICE_CLOSE,i);
ArraySetAsSeries(Bears_array,true); // Применено для синхронизации индексирования в функции iMAOnArray
ArraySetAsSeries(Bulls_array,true);
Line1[i]=iMAOnArray(Bears_array,0,MA_Period,0,MODE_SMMA,i);
Line2[i]=iMAOnArray(Bulls_array,0,MA_Period,0,MODE_SMMA,i);
Buf_0[i]=(Line2[i]+Line1[i])/Point/10;

i--;
}
return;
}

Можно изголяться, а можно нормально делать.

Индикатор может содержать до 8 буферов. Часть может использоваться для промежуточных расчетов.

Хотя если для себя и производительность не критична, то да, можно и так делать.

 
Vinin >>:

Можно изголяться, а можно нормально делать.

Индикатор может содержать до 8 буферов. Часть может использоваться для промежуточных расчетов.

Хотя если для себя и производительность не критична, то да, можно и так делать.

Понятие нормально относительно. Так же как и понятие правильно. Это уже больше философские вопросы. Я же старался реализовать алгоритм ОПТИМАЛЬНО. Чтобы индюк строился за ОДИН цикл. На мой взгляд это наименьшим образом загружает железо ПРИ ТОМ ЖЕ ДОСТОВЕРНОМ РЕЗУЛЬТАТЕ.

Ну а точ то буферов 8, а в военное время их число может достигать аж 54 с половиной, так это любой сапер знает. :-)

 
Stepan241 писал(а) >>

Понятие нормально относительно. Так же как и понятие правильно. Это уже больше философские вопросы. Я же старался реализовать алгоритм ОПТИМАЛЬНО. Чтобы индюк строился за ОДИН цикл. На мой взгляд это наименьшим образом загружает железо ПРИ ТОМ ЖЕ ДОСТОВЕРНОМ РЕЗУЛЬТАТЕ.

Ну а точ то буферов 8, а в военное время их число может достигать аж 54 с половиной, так это любой сапер знает. :-)

Можно сделать и за один цикл все, и количество буферов использовать по минимуму, но это уже совсем другой разговор.

Любая операция с массивом (не буфером) занимает продолжительное время. И потому проще и быстрее было сделать несколько циклов, чем все совать в один.

Быстрее в смысле работы индикатора

 
Vinin >>:

Можно сделать и за один цикл все, и количество буферов использовать по минимуму, но это уже совсем другой разговор.

Любая операция с массивом (не буфером) занимает продолжительное время. И потому проще и быстрее было сделать несколько циклов, чем все совать в один.

Быстрее в смысле работы индикатора

Уважаемый Vinin, Скажите а Вы пытались посмотреть что рисует предложенная Вами идея?

 
Vinin >>:

Можно сделать и за один цикл все, и количество буферов использовать по минимуму, но это уже совсем другой разговор.

Любая операция с массивом (не буфером) занимает продолжительное время. И потому проще и быстрее было сделать несколько циклов, чем все совать в один.

Быстрее в смысле работы индикатора

Уважаемый Vinin, Скажите а Вы пытались посмотреть что рисует предложенная Вами идея?

int start()
{
  int i, limit=Bars-IndicatorCounted()-1;
  for (i=limit;i>=0;i--){
  Bears_array[i]=iBearsPower(NULL,0,PeriodPower,PRICE_CLOSE,i);
  Bulls_array[i]=iBullsPower(NULL,0,PeriodPower,PRICE_CLOSE,i);
  }
  for (i=limit;i>=0;i--){
  MA_Bears[i]=iMAOnArray(Bears_array,0,MA_Period,0,MODE_EMA,i); 
  MA_Bulls[i]=iMAOnArray(Bulls_array,100,MA_Period,0,MODE_SMA,i); 
  }
  return;
}

Я понял, что в первом цикле вы формируете массив быков и медведей. Во втором цикле эти два массива сглаживаете. Тогда если так все шоколадно то просто посмотрите на результат этого сглаживания и все поймете.И сравните, если не трудно с ОРИГИНАЛЬНЫМИ Быками и Медведями ЗА ТОТ ЖЕ ПЕРИОД.



 


Посмотрите внимательно на СГЛАЖЕННЫЙ ГРАФИК

 
Stepan241 писал(а) >>

Я вообще говорил о подобном коде индикатора.

Файлы:
test.mq4  2 kb
 
Сравни скорость работы моего варианта и своего
 

Согласен. Все нормально выводит и все правильно. Просто мне надо было сам вывод на экран

Buf_0[i]=(Line2[i]+Line1[i])/Point/10;  

Делать в отдельном цикле. Ваш вариант мне более предпочтительней потому как цикл FOR больше по душе. Спасибо за помощь и внимание.