Скачать MetaTrader 5
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Нет времени изучать MQL5? Библиотека исходников для вас!
tutmas
101
tutmas 2006.05.31 07:26 

может быть ктонибуть пытался делать или делал такую вещь как отлов минимумов и максимумов индикатора? то что получилось у меня этой ночью конечно работает (хотя пока не дружит с индикаторами проходящими через ноль, но это я сейчас исправлю) но скажем при загрузке нетатрейдера и обработке RBCI на трех периодах можно минутку покурить...а в пиках загрузка машины до 80% бывает..пенек 3 1200 конечно но всеже...может кто знает как оптимизировать?

double MAX[6][4], MIN[6][4], PH[6][4], PL[6][4], R_FIRST[6];
int HR, n, m, i, j, sleeping, sv;
 
int start()
{
 
div(1);
Sleep(1000);
div(2);
Sleep(1000);
div(3);
//--------------------------
//-----ВЫВОД КОМЕНТАРИЯ-----
//--------------------------
  
Comment(
"\n",MAX[1][0],"  ",MAX[1][1],"  ",MAX[1][2],"  ",MAX[1][3],"   ",
"\n",MIN[1][0],"  ",MIN[1][1],"  ",MIN[1][2],"  ",MIN[1][3],"   ", 
"\n",R_FIRST[1],
"\n",
"\n",MAX[2][0],"  ",MAX[2][1],"  ",MAX[2][2],"  ",MAX[2][3],"   ",
"\n",MIN[2][0],"  ",MIN[2][1],"  ",MIN[2][2],"  ",MIN[2][3],"   ", 
"\n",R_FIRST[2],
"\n",
"\n",MAX[3][0],"  ",MAX[3][1],"  ",MAX[3][2],"  ",MAX[3][3],"   ",
"\n",MIN[3][0],"  ",MIN[3][1],"  ",MIN[3][2],"  ",MIN[3][3],"   ", 
"\n",R_FIRST[3],
"\n",
 
 
"\n");  
      
 
return(0);
}
 
 
 
 
 
 
void div(int id)
{
double R1, R2, R3, HIGH, LOW;
int bed, new, k, t, tt, period;
string ind;
//-----
double RSI0 = iCustom(NULL,period,"RSI",5,0,0);
double RSI1 = iCustom(NULL,period,"RSI",5,0,1);
double RSI2 = iCustom(NULL,period,"RSI",5,0,2);
 
double R_LAST=-10000;
int old=0;
bool f=false;
n=0; m=0; tt=0;
 
  for (i=0; i<=3; i++)
    {
    MAX[id][i]=0;
    MIN[id][i]=0;
    PL[id][i]=0;
    PH[id][i]=0;
    R_FIRST[id]=0;
    }
 
     if (id==1) {period=60  ; ind="RBCI"; k=1;}
else if (id==2) {period=240 ; ind="RBCI"; k=1;}
else if (id==3) {period=1440; ind="RBCI"; k=1;}
else if (id==4) {period=60  ; ind="STLM"; k=4;}
else if (id==5) {period=240 ; ind="STLM"; k=4;}
//-----
for (i=k; i<=100; i++) 
  {
  R1 = iCustom(NULL,period,ind,0,(i+k));                             
  R2 = iCustom(NULL,period,ind,0, i   );                              
  R3 = iCustom(NULL,period,ind,0,(i-k));  
  //-----
  HIGH=High[i];                                   //
  LOW=Low[i];                                     //
  for (j=-k; j<=k; j+=1)                          //
    {                                             // 
    if (High[i+j]>HIGH) {HIGH=High[i+j];}         //
    if (Low [i+j]<LOW ) {LOW =Low [i+j];}         //
    }                                             //
  //-----
     if (R2==0) {R2=-0.000001;}
     if (Ask<50) { if (MathAbs(R_LAST/R2)<1.05 && MathAbs(R_LAST/R2)>0.95) {bed=1;} 
                   else {bed=0;} }  // 
else if (Ask>50) { if (MathAbs(R_LAST/R2)<1.1  && MathAbs(R_LAST/R2)>0.9 ) {bed=1;} 
                   else {bed=0;} }  // 
  //-----
     if (i==1 && R3<R2 && R2>R1 && RSI2>RSI1 && RSI1>RSI0 && (RSI2-RSI0)>18 && 
         (RSI1-RSI0)>6) 
         {f=true ; t=1;}
else if (i==2 && R3<R2 && R2>R1 &&                                             
         (RSI1-RSI0)>7) 
         {f=true ; t=2;} 
else if (i >2 && R3<R2 && R2>R1 && m!=4                                                   ) 
         {f=true ; t=3;}
else                                                                                          
    {f=false; t=0;}
  //-----
  if (  f  ) 
    {
     if (  old==1 && R_LAST==MIN[id][n-1] && bed==0  ) {old=0;}                                                                                  
     if (  m!=0 && ((MathAbs(MAX[id][m-1]/R2)<1.05 && MathAbs(MAX[id][m-1]/R2)>0.95) || 
           R2>MAX[id][m-1]) && old!=1  ) {new=1;} else {new=0;}     
     if (  m == 0  ) {new=1;}                                                                                                                    
     if (  bed==1 && R_LAST==MIN[id][n-1]  ) {old=1;}                                                                       
else if (  bed==0 && new==1 && old!=1  ) {MAX[id][m]=R2; PH[id][m]=HIGH; R_LAST=R2; m++;}                                                        
else if (  old==1 && R2>MAX[id][m-1] && R_LAST==MAX[id][m-1]  ) {MAX[id][m-1]=R2; old=0; 
           R_LAST=R2; PH[id][m-1]=HIGH;}                           
     if (  R_FIRST[id]==0 || (R_FIRST[id]!=MIN[id][0] && R_FIRST[id]!=MAX[id][0])  ) 
           {R_FIRST[id]=MAX[id][0]; sv=i;}
    }
//-----
     if (i==1 && R3>R2 && R2<R1 && RSI2<RSI1 && RSI1<RSI0 && (RSI0-RSI2)>18 && 
         (RSI0-RSI1)>6) 
         {f=true ; t=1;}
else if (i==2 && R3>R2 && R2<R1 &&                                             
         (RSI0-RSI1)>7) 
         {f=true ; t=2;}     
else if (i >2 && R3>R2 && R2<R1 && n!=4                                                     
         ) 
         {f=true ; t=3;}
else                                                                                          
   {f=false; t=0;}
//-----
if (  f  ) 
  {  
     if (  old==1 && R_LAST==MAX[id][m-1] && bed==0  ) {old=0;}                                                                                  
     if (  n!=0 && ((MathAbs(MIN[id][n-1]/R2)<1.05 && MathAbs(MIN[id][n-1]/R2)>0.95) || 
           R2<MIN[id][n-1]) && old!=1  ) {new=1;} else {new=0;}     
     if (  n==0  ) {new=1;}                                                                                                                      
     if (  bed==1 && R_LAST==MAX[id][m-1]  ) {old=1;}                                                                          
else if (  bed==0 && new==1 && old!=1  ) {MIN[id][n]=R2; PL[id][n]=LOW; R_LAST=R2; n++;}                                                         
else if (  old==1 && R2<MIN[id][n-1] && R_LAST==MIN[id][n-1]  ) {MIN[id][n-1]=R2; old=0; 
           R_LAST=R2; PL[id][n-1]=LOW;}                            
     if (  R_FIRST[id]==0 || (R_FIRST[id]!=MIN[id][0] && R_FIRST[id]!=MAX[id][0])  ) 
           {R_FIRST[id]=MIN[id][0]; sv=i;}
  }
 
}
 
}
Rashid Umarov
Админ
11709
Rashid Umarov 2006.05.31 09:07  
Почему бы не использовать ArrayMaximum() и ArrayMinimum(), при этом не забыв оптимизировать индикатор?
tutmas
101
tutmas 2006.05.31 09:31  

была такая идея, но почемуто не стал расти какос...в общем не пошло на этом дело...уж не знаю почему, но при том что вродебы все было правильно глючмло...потом мне нужен именно экстремум, а на определеном промежутке есть максимальная и минимальная точки в любом случае! например крайние...
а как оптимизировать индикатор? предложение есть?

Rashid Umarov
Админ
11709
Rashid Umarov 2006.05.31 09:39  
Нужен критерий экстремума. Находим Макс(Мин), делаем проверку на Экст, если не подошло - делим изучаемый отрезок в этой точке и опять ищем Макс(Мин), опять проверка, и так до победного конца

ЗЫ Код не смотрел, конечно - "как много девушек хороших ... "
tutmas
101
tutmas 2006.05.31 09:44  
а как же учесть что мне надо как минимум 2, а лучше 3 возрастающих максимума и столькоже убывающих минимумов? ведь такая тактика подойдет хорошо в том случае, если надо отрыть один экстремум на куске графика...
Rashid Umarov
Админ
11709
Rashid Umarov 2006.05.31 10:16  
Ищи между минимумами максимумы , но опять по критерию.
tutmas
101
tutmas 2006.05.31 11:00  

в результате получаем еще массивнее код...а готовых решений неужто ни у кого нет? хотелось бы сравнить! хотя бы со слов их авторов!

Rashid Umarov
Админ
11709
Rashid Umarov 2006.05.31 11:12  
Как это нет, а стандартный Zigzag и куча других зигзагов? Влом копать, видимо?
Алгоритм то один, это реализаций куча.
Rashid Umarov
Админ
11709
Rashid Umarov 2006.05.31 11:13  
ЗЫ Кстати. Zigzag не курит минутку при поиске максимумом и минимумов. :)
tutmas
101
tutmas 2006.05.31 11:19  

зигзаг другая история! которая меня не интересует совершенно! а если сидение с утра до вечера перед монитором в течении 5 недель отрываясь на сон называется "влом" то это уже интересно. ..впервый раз сталкиваюсь с такой интерпритацией!

tutmas
101
tutmas 2006.05.31 11:40  

а минутки и не интересуют! мне нужны периоды больше часа! большие движения....отлов на индикаторе экстремумов и соответствующих им цен...в общем для дивера все это делается

/ /12
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий