Оценка индикаторов

 
скачал случайно но не знаю как работает

//+------------------------------------------------------------------+
//| Forecast Oscillator.mq4 |
//| Copyright © 2005, Nick Bilak, beluck[AT]gmail.com |
//| http://forexsystems.ru/phpBB/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2005, Nick Bilak, beluck[AT]gmail.com"
#property link "http://forexsystems.ru/phpBB/index.php"

#property indicator_separate_window
#property indicator_buffers 4
#property indicator_level1 0
#property indicator_color1 DarkTurquoise
#property indicator_color2 LawnGreen
#property indicator_color3 Magenta
#property indicator_color4 Aqua
//---- input parameters
extern int regress=15;
extern int t3=10;
extern double b=0.7;
//---- buffers
double osc[];
double osct3[];
double hiSig[];
double loSig[];

int shift,limit,length;
double b2,b3,c1,c2,c3,c4,w1,w2,n,WT,forecastosc,t3_fosc,sum,e1,e2,e3,e4,e5,e6,tmp, tmp2;

//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
//---- indicators
SetIndexStyle(0,DRAW_LINE);
SetIndexBuffer(0,osc);
SetIndexEmptyValue(0,0);
SetIndexStyle(1,DRAW_LINE);
SetIndexBuffer(1,osct3);

SetIndexStyle(2,DRAW_ARROW);
SetIndexBuffer(2,hiSig);
SetIndexEmptyValue(2,EMPTY_VALUE);
SetIndexArrow(2,159);
SetIndexStyle(3,DRAW_ARROW);
SetIndexBuffer(3,loSig);
SetIndexEmptyValue(3,EMPTY_VALUE);
SetIndexArrow(3,159);
//----
return(0);
}


int start()
{
int counted_bars=IndicatorCounted();

if (counted_bars<0) return(-1);
if (counted_bars>0) counted_bars--;
limit=Bars-31;
if(counted_bars>=31) limit=Bars-counted_bars+2;

for (shift=limit+30;shift>=0;shift--) {

b2=b*b;
b3=b2*b;
c1=-b3;
c2=(3*(b2+b3));
c3=-3*(2*b2+b+b3);
c4=(1+3*b+b3+3*b2);
n=t3;

if (n<1) n=1;
n = 1 + 0.5*(n-1);
w1 = 2 / (n + 1);
w2 = 1 - w1;

length=regress;
sum = 0;
for (int i = length; i>0; i--) {
tmp = length+1;
tmp = tmp/3;
tmp2 = i;
tmp = tmp2 - tmp;
sum = sum + tmp*Close[shift+length-i];
}
tmp = length;
WT = sum*6/(tmp*(tmp+1));

forecastosc=(Close[shift]-WT)/WT*100;

e1 = w1*forecastosc + w2*e1;
e2 = w1*e1 + w2*e2;
e3 = w1*e2 + w2*e3;
e4 = w1*e3 + w2*e4;
e5 = w1*e4 + w2*e5;
e6 = w1*e5 + w2*e6;

t3_fosc = c1*e6 + c2*e5 + c3*e4 + c4*e3;

osc[shift] = forecastosc;
osct3[shift] = t3_fosc;

if (osc[shift+1] > osct3[shift+2] && osc[shift+2] <= osct3[shift+3] && osct3[shift+1]<0) loSig[shift+1] = t3_fosc-0.05;
if (osc[shift+1] < osct3[shift+2] && osc[shift+2] >= osct3[shift+3] && osct3[shift+1]>0) hiSig[shift+1] = t3_fosc+0.05;

}
Comment("WT=",WT);
return(0);
}
//+------------------------------------------------------------------+
 
Хотелось бы по нему эсперта написать. на днях красиво работает
Но я не знаю как из него суть вытащить
 
//+------------------------------------------------------------------+ //| Forecast Oscillator.mq4 | //| Copyright © 2005, Nick Bilak, beluck[AT]gmail.com | //| http://forexsystems.ru/phpBB/ | //+------------------------------------------------------------------+ #property copyright "Copyright © 2005, Nick Bilak, beluck[AT]gmail.com" #property link "http://forexsystems.ru/phpBB/index.php" #property indicator_separate_window #property indicator_buffers 4 #property indicator_level1 0 #property indicator_color1 DarkTurquoise #property indicator_color2 LawnGreen #property indicator_color3 Magenta #property indicator_color4 Aqua //---- input parameters extern int regress=15; extern int t3=10; extern double b=0.7; //---- buffers double osc[]; double osct3[]; double hiSig[]; double loSig[]; int shift,limit,length; double b2,b3,c1,c2,c3,c4,w1,w2,n,WT,forecastosc,t3_fosc,sum,e1,e2,e3,e4,e5,e6,tmp,tmp2; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { //---- indicators SetIndexStyle(0,DRAW_LINE); SetIndexBuffer(0,osc); SetIndexEmptyValue(0,0); SetIndexStyle(1,DRAW_LINE); SetIndexBuffer(1,osct3); SetIndexStyle(2,DRAW_ARROW); SetIndexBuffer(2,hiSig); SetIndexEmptyValue(2,EMPTY_VALUE); SetIndexArrow(2,159); SetIndexStyle(3,DRAW_ARROW); SetIndexBuffer(3,loSig); SetIndexEmptyValue(3,EMPTY_VALUE); SetIndexArrow(3,159); //---- return(0); } int start() { int counted_bars=IndicatorCounted(); if (counted_bars<0) return(-1); if (counted_bars>0) counted_bars--; limit=Bars-31; if(counted_bars>=31) limit=Bars-counted_bars+2; for (shift=limit+30;shift>=0;shift--) { b2=b*b; b3=b2*b; c1=-b3; c2=(3*(b2+b3)); c3=-3*(2*b2+b+b3); c4=(1+3*b+b3+3*b2); n=t3; if (n<1) n=1; n = 1 + 0.5*(n-1); w1 = 2 / (n + 1); w2 = 1 - w1; length=regress; sum = 0; for (int i = length; i>0; i--) { tmp = length+1; tmp = tmp/3; tmp2 = i; tmp = tmp2 - tmp; sum = sum + tmp*Close[shift+length-i]; } tmp = length; WT = sum*6/(tmp*(tmp+1)); forecastosc=(Close[shift]-WT)/WT*100; e1 = w1*forecastosc + w2*e1; e2 = w1*e1 + w2*e2; e3 = w1*e2 + w2*e3; e4 = w1*e3 + w2*e4; e5 = w1*e4 + w2*e5; e6 = w1*e5 + w2*e6; t3_fosc = c1*e6 + c2*e5 + c3*e4 + c4*e3; osc[shift] = forecastosc; osct3[shift] = t3_fosc; if (osc[shift+1] > osct3[shift+2] && osc[shift+2] <= osct3[shift+3] && osct3[shift+1]<0) loSig[shift+1] = t3_fosc-0.05; if (osc[shift+1] < osct3[shift+2] && osc[shift+2] >= osct3[shift+3] && osct3[shift+1]>0) hiSig[shift+1] = t3_fosc+0.05; } Comment("WT=",WT); return(0); } //+------------------------------------------------------------------+


Тэги ставить - красивее выглядит. Один из юриковских вариантов сглаживания(насколько я понимаю), самый распространенный.
 
Rosh:

.........
Один из юриковских вариантов сглаживания (насколько я понимаю), самый распространенный.
Симпотично.
Не могли бы Вы дать еще ссылки на индикаторы сигналов разворота.
Я в программировании не силен, так что единственный путь - смотреть, как делают другие и использовать (читай - воровать) подходящие куски кода. Максимум - чуть-чуть видоизменяя.
 
На самом деле, индикатор слегка с подковыркой, проше это показать наглядно, я запустил индикатор утром, а попозже добавил второй с точно такими же параметрами. По коду видно, что он перегонялся из МТ3, без логической обработки (раз) и фиксации указанного баг (2)ю То есть, он перерисовывает себя на истории. Я собираюсь перегнать подобный индикатор из МТ3 в МТ4 с подробными комментариями - http://forum.alpari-idc.ru/showthread.php?p=387171#post387171
Файлы:
forecast.gif  12 kb
 
Во-первых, не удивляйтесь репликам, а то уже было... :). У нас разные весовые категории, Ваши посты я читаю.

Rosh:
На самом деле, индикатор слегка с подковыркой...
Если давно тому назад, то и ... хотя и обидно. Я ищу не точки входа, а чтоб соскочить, лучше раньше чем с лосем. А то, что все зигзаги, мягко говоря, на пипсовке не очень удобоваримы как и многое другое из-за малого ТФ, это мне уже давно понятно. Достаточно паралельно построить резиновую нить через медианы(например) баров, где зигзаг дает вершины, и в конце меняющуюся к close[0] от последнего отмеченного зигзагом бара - и картина станет не всегда столь приятной для глаза.
Поэтому я смотрю в сочетании с другими сигналами, стараясь понять - есть ли путь просто не строить некоторые вершины, отсеять.
А то, что стопроцентную гарантию дает только паталогоанатом. .. Так на это есть аксиома имени мене "Все индикаторы - для самообмана". Но (я уже где-то писал) - нет ничего увлекательнее изобретения перпетуум-мобиля. Особенно - красивого.

За ссылку спасибо.
 
Rosh, не поможете с прогой:
- Сделал МинМакс а ля Порамон, но не для дня, а для внутридневного периода (например - сессии);
- Вопрос: можно ли закрасить фон между двумя ломаными (Мин и Макс)?
У KimIV есть индикатор i-Sessions, где время сессий выделяется закраской фона, но прямоугольником. Посылал вопрос ему, но занят наверное... :).
Индюк ниже.
Файлы:
 
Закрасить можно только гистограммлй, но будет не очень красиво. Заливку каналов разработчики в ближайшее время не обещают.
 
Rosh:
Закрасить можно только гистограммлй, но будет не очень красиво. Заливку каналов разработчики в ближайшее время не обещают.
Спасибо.
Тогда уж лучше бары в разный цвет. С учетом перекрытия сессий.
 
Rosh:
Закрасить можно только гистограммлй, но будет не очень красиво. Заливку каналов разработчики в ближайшее время не обещают.
А OBJ_CHANNEL не употребить никак? Для меня это только название...
 
OBJ_CHANNE - это объект, получается несколько тяжеловесно и придется впихивать логику обработки объектов при смене тайм-фрейма и приходе нового тика.
Причина обращения: