Прошу переделать индикатор

 
//+------------------------------------------------------------------+ 
//| prusax_v2.mq4 
//| 
//+------------------------------------------------------------------+ 

#property indicator_chart_window 
#property indicator_buffers 4 
#property indicator_color1 White 
#property indicator_color2 White 
#property indicator_color3 Red 
#property indicator_color4 Red 
#property indicator_width1 3
#property indicator_width2 3
#property indicator_width3 3
#property indicator_width4 3

//---- buffers 
double BufferUP[];
double BufferDN[];
double BufferUP1[];
double BufferDN1[];

//+------------------------------------------------------------------+ 
//| Custom indicator initialization function | 
//+------------------------------------------------------------------+ 
int init() 
{ 
string short_name; 
//---- indicator line 
IndicatorBuffers(4); 
SetIndexStyle(0,DRAW_HISTOGRAM); 
SetIndexBuffer(0,BufferUP); 
SetIndexStyle(1,DRAW_HISTOGRAM); 
SetIndexBuffer(1,BufferUP1); 
SetIndexStyle(2,DRAW_HISTOGRAM); 
SetIndexBuffer(2,BufferDN);
SetIndexStyle(3,DRAW_HISTOGRAM); 
SetIndexBuffer(3,BufferDN1);
SetIndexDrawBegin(0,10); 
SetIndexDrawBegin(1,10); 
SetIndexDrawBegin(2,10); 
SetIndexDrawBegin(3,10); 
//---- 
return(0); 
} 
//+------------------------------------------------------------------+ 
//| 
//+------------------------------------------------------------------+ 
int start() 
{ 
int i,counted_bars=IndicatorCounted(); 

for(i=Bars-counted_bars-1;i>=0;i--)

{
BufferUP[i]    = High[i];
BufferUP1[i]   = (High[i]-(((High[i]-Open[i])+(Close[i]-Low[i]))/2));
BufferDN[i]    = (High[i]-(((High[i]-Open[i])+(Close[i]-Low[i]))/2));
BufferDN1[i]   = (High[i]-(((High[i]-Open[i])+(Close[i]-Low[i]))/2))-(((Open[i]-Low[i])+(High[i]-Close[i]))/2);
}


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

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

Я бар разграничил: верхнюю часть бара отметил буквой «Н» середину разграничивающую цвета «S» и низ бара буквой «L». Потом отнимаем верхнее значение цены «Н» от средней цены «S» (к примеру 1,5479-1,5472= 0,0007), эту разницу обозначим «Т», далее отнимаем от средней цены «S» нижнее значение цены «L» (к примеру 1,5472-1,5455=0,0017), эту разницу обозначим «О». Потом от верхней разницы «Т» отнимаем нижнюю разницу «О», в нашем случае это 0,0007-0,0017=-0,0010. Эта разница получилась со знаком минус (-), следовательно после закрытия бара эта разница на баре будет красного цвета. Если эта разница получается со знаком плюс (+), то естественно после закрытия бара разница будет белого цвета. Ну а если разница после закрытия будет равна нулю(0), то бар остаётся зелёного цвета . Вот пожалуй и всё.

 

 
prusax:

Извиняюсь, что всё сразу не получилось уложить!

 
Неужели это ни кого не заинтересовало?
 
prusax:
Неужели это ни кого не заинтересовало?

А смысл?

 
Vinin:
prusax:
Неужели это ни кого не заинтересовало?

А смысл?

У меня есть немного по другому переделаный этот же индикатор(прикладываю исходник), но я хотел бы сравнить их работу, где будет более ясная картина.

//+------------------------------------------------------------------+ 
//| prusax_v2.mq4 
//| 2008 modified by zIG
//+------------------------------------------------------------------+ 

#property indicator_chart_window 
#property indicator_buffers 4 
#property indicator_color1 White 
#property indicator_color2 White 
#property indicator_color3 Red 
#property indicator_color4 Red 
#property indicator_width1 2
#property indicator_width2 2
#property indicator_width3 2
#property indicator_width4 2

//---- buffers 
double BufferUP[];
double BufferDN[];
double BufferUP1[];
double BufferDN1[];

//+------------------------------------------------------------------+ 
//| Custom indicator initialization function | 
//+------------------------------------------------------------------+ 
int init() 
{ 
string short_name; 
//---- indicator line 
IndicatorBuffers(4); 
SetIndexStyle(0,DRAW_HISTOGRAM); 
SetIndexBuffer(0,BufferUP); 
SetIndexStyle(1,DRAW_HISTOGRAM); 
SetIndexBuffer(1,BufferUP1); 
SetIndexStyle(2,DRAW_HISTOGRAM); 
SetIndexBuffer(2,BufferDN);
SetIndexStyle(3,DRAW_HISTOGRAM); 
SetIndexBuffer(3,BufferDN1);
SetIndexDrawBegin(0,10); 
SetIndexDrawBegin(1,10); 
SetIndexDrawBegin(2,10); 
SetIndexDrawBegin(3,10); 
//---- 
return(0); 
} 
//+------------------------------------------------------------------+ 
//| 
//+------------------------------------------------------------------+ 
int start() 
{ 
int i,counted_bars=IndicatorCounted(); 

for(i=Bars-counted_bars-1;i>=0;i--)
{
if(i==0)
   {
   BufferUP[i]    = High[i];
   BufferUP1[i]   = (High[i]-(((High[i]-Open[i])+(Close[i]-Low[i]))/2));
   BufferDN[i]    = (High[i]-(((High[i]-Open[i])+(Close[i]-Low[i]))/2));
   BufferDN1[i]   = (High[i]-(((High[i]-Open[i])+(Close[i]-Low[i]))/2))-(((Open[i]-Low[i])+(High[i]-Close[i]))/2);
   }
   else
   {
   if(Close[i]>Open[i])
      {
      BufferUP[i]    = High[i];
      BufferUP1[i]   = Open[i];
      BufferDN[i]    =0.0;
      BufferDN1[i]   =0.0;
      }
   else
   if(Close[i]<Open[i])
      {
      BufferUP[i]    = 0.0;
      BufferUP1[i]   = 0.0;
      BufferDN[i]    =Open[i];
      BufferDN1[i]   =Low[i];
      }
   }
}


return(0); 
} 
//+------------------------------------------------------------------+
 
prusax:
Vinin:
prusax:
Неужели это ни кого не заинтересовало?

А смысл?

У меня есть немного по другому переделаный этот же индикатор(прикладываю исходник), но я хотел бы сравнить их работу, где будет более ясная картина.

Первый не перерисовывает на первом баре, второй перерисовывает. А идею все таки хотелось бы услышать.

Да и скобки раскрой в этом выражении

BufferDN1[i]   = (High[i]-(((High[i]-Open[i])+(Close[i]-Low[i]))/2))-(((Open[i]-Low[i])+(High[i]-Close[i]))/2);
Посмотри что получится.
 
Vinin:
prusax:
Vinin:
prusax:
Неужели это ни кого не заинтересовало?

А смысл?

У меня есть немного по другому переделаный этот же индикатор(прикладываю исходник), но я хотел бы сравнить их работу, где будет более ясная картина.

Первый не перерисовывает на первом баре, второй перерисовывает. А идею все таки хотелось бы услышать.

Да и скобки раскрой в этом выражении

BufferDN1[i]   = (High[i]-(((High[i]-Open[i])+(Close[i]-Low[i]))/2))-(((Open[i]-Low[i])+(High[i]-Close[i]))/2);
Посмотри что получится.

Значит второй индикатор перерисовывает? А какие скобки убрать? Я попробовал убрать первую и последнюю скобку, так после презагрузки индикатор

вообще пропал. Какие всё же скобки надо убрать. Про идею я по моему выше написал. Просто при закрытии бара мы бы видели разницу, если она с минусом, т.е. с показанием, что движение идёт вниз и если на следующем баре эта разница дальше увеличивается, то движение продолжается вниз. Так начиная с минутки и на все таймфреймы. Вот пожалуй и всё .

 
prusax:
Vinin:
prusax:
Vinin:
prusax:
Неужели это ни кого не заинтересовало?

А смысл?

У меня есть немного по другому переделаный этот же индикатор(прикладываю исходник), но я хотел бы сравнить их работу, где будет более ясная картина.

Первый не перерисовывает на первом баре, второй перерисовывает. А идею все таки хотелось бы услышать.

Да и скобки раскрой в этом выражении

BufferDN1[i]   = (High[i]-(((High[i]-Open[i])+(Close[i]-Low[i]))/2))-(((Open[i]-Low[i])+(High[i]-Close[i]))/2);
Посмотри что получится.

Значит второй индикатор перерисовывает? А какие скобки убрать? Я попробовал убрать первую и последнюю скобку, так после презагрузки индикатор

вообще пропал. Какие всё же скобки надо убрать. Про идею я по моему выше написал. Просто при закрытии бара мы бы видели разницу, если она с минусом, т.е. с показанием, что движение идёт вниз и если на следующем баре эта разница дальше увеличивается, то движение продолжается вниз. Так начиная с минутки и на все таймфреймы. Вот пожалуй и всё .

Если убрать все скобки (все), то получится BufferDN1[i] = Low[i];

 

Может ты S как-то по другому должен считать, судя по рисункам.

 
Vinin:

Может ты S как-то по другому должен считать, судя по рисункам.

S - Это граница разделения. Верхнюю разницу я считал следующим образом: от самого верхнего значения Н отнимал значение S получается разница Т.

Потом от значения S отнимал значение L получалась разница О. Далее от Т отнимаем О, если со знаком +, то разница на баре белого цвета, если разница со знаком -(минус), то красного цвета, если разница равна нулю(0), то бар остаётся зелёный

Причина обращения: