задача: соединить Close ТОЛЬКО БЫЧЬИХ баров. Как это сделать??? - страница 2

 
Mathemat:

Оптимизацию по скорости расчетов сделаете сами. Это только набросок. Нулевой бар не обрабатывается.

Да, еще: это советник!



т.е. предлагаете сделать через линию тренда на 2-х координатах ... должно получиться....

большое спасибо!

с утра попробую!

 
vit-fx:
а вот что должно быть

Я понял что должно рисоваться, не понял что из этого можно узнать.
 
evillive:

Я понял что должно рисоваться, не понял что из этого можно узнать.
А вдруг? Можно еще попробовать добавить вторую линию, по опен медвежьих свечей, а потом входить по их пересечениям. Вот будет перпетуум! Дарю идею...)
 
OnGoing:
А вдруг? Можно еще попробовать добавить вторую линию, по медвежьим свечам, а потом входить по их пересечениям. Вот будет перпетуум!

Это можно проверить, отрисовав на паре недель истории отрезки и вручную, за пару-тройку часов можно успеть :)
 
vit-fx: т.е. предлагаете сделать через линию тренда на 2-х координатах ... должно получиться....

Это уже получилось.

Ну можно и поизящнее, индикатором. Примерно как OnGoing предложил. Только тут не машку, а просто буфер ввести, заполнить только бычьи бары значениями цен закрытия, а потом рисовать стилем DRAW_SECTION.

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

//+------------------------------------------------------------------+
//|                                                 onlyBullsInd.mq4 |
//+------------------------------------------------------------------+

#property indicator_chart_window
#property indicator_buffers 1
#property indicator_color1 Green
#property indicator_width1 2

double _buff[];

int init()
{
   IndicatorBuffers( 1 );
   SetIndexStyle( 0, DRAW_SECTION );
   SetIndexBuffer( 0, _buff );
   return(0);
}


int deinit()
{
   return( 0 );
}


int start()
{
   for( int sh = Bars - 1; sh >= 0; sh -- )
      if( Close[ sh ] > Open[ sh ] )         _buff[ sh ] = Close[ sh ];

   return( 0 );
}//+------------------------------------------------------------------+

Ну тут можно уже и нулевой бар обработать. И считает мгновенно уже сразу.

Лоханулся я сильно с этими трендовыми линиями...


 
Mathemat:

Это уже получилось.

Ну можно и поизящнее, индикатором. Примерно как OnGoing предложил. Только тут не машку, а просто буфер ввести, заполнить только бычьи бары значениями цен закрытия, а потом рисовать стилем DRAW_SECTION.

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

Ну тут можно уже и нулевой бар обработать. И считает мгновенно уже сразу.

Лоханулся я сильно с этими трендовыми линиями...



А в чём лоханулся-то? У меня аналогичный код получился, вот только если добавить второй буфер для медведей то он не отрисовывается :(

#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 Blue
#property indicator_color2 Maroon


double bullbuffer[], bearbuffer[];

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   IndicatorBuffers(2);
//---- indicator buffers
   SetIndexBuffer(0,bullbuffer);
    SetIndexStyle(0,DRAW_SECTION,STYLE_SOLID,2,indicator_color1);
   SetIndexBuffer(1,bearbuffer);
    SetIndexStyle(1,DRAW_SECTION,STYLE_SOLID,2,indicator_color2);
    IndicatorDigits(MarketInfo(Symbol(),MODE_DIGITS));
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
  for (int i = Bars-1; i>=0 ;i--)
{
    if(Open[i]<Close[i]) bullbuffer[i]=Close[i];
    if(Open[i]>Close[i]) bearbuffer[i]=Close[i];
}
}
 

Вручную нарисовал линии по ТЗ, всё равно не ясна цель данного индикатора...

Пы.Сы.: МАшку забыл нарисовать, звиняюсь :)

 
evillive: А в чём лоханулся-то? У меня аналогичный код получился, вот только если добавить второй буфер для медведей то он не отрисовывается :(

В том, что с самого начала стал думать об отрезках и советнике, а не об индюке.

Удали индюк с окна и снова запусти. У меня вышло. Есть такая странная... фича МТ4.


О какой машке ты говоришь?
 

Перезагрузил терминал, теперь и у меня рисует )))

МАшку топикстартер на своем примере рисовал зачем-то, а я пытаюсь понять что он с этих линий поиметь хочет.

 
Ребята, я потом дополнил, на медведях надо по опен рисовать (на бычьих по клоуз). Тогда иногда пересекаются)
Причина обращения: