Скачать MetaTrader 5

Вызов пользовательского индикатора

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Нашел ошибку в наших продуктах? Смело пиши в Сервисдеск!
Forex Trader
114255
Forex Trader 2006.09.05 13:23 
Господа по каким причинам может выходить ошибка: Не возможно открыть файл и.т.д..

вызываю так (скриптом):

 Print (iCustom( NULL, 0, "ZIGOSK2",12,5,3,0.5, 0, 20 ));
Forex Trader
114255
Forex Trader 2006.09.05 14:01  
Нет такого индикатора в папке experts\indicators\ ?
Forex Trader
114255
Forex Trader 2006.09.05 14:19  
Нет такого индикатора в папке experts\indicators\ ?


:)))) нет я конечно лопух но не до такой степени))) есть вот индюк:

#property indicator_separate_window
#property indicator_buffers 4
#property indicator_color3 Blue
#property indicator_color4 Red
//---- indicator parameters
extern int ExtDepth=12;
extern int ExtDeviation=5;
extern int ExtBackstep=3;
// extern double DrawlinesAt=0.5;


//---- indicator buffers
double ExtMapBuffer0[];
double ExtMapBuffe#property indicator_separate_window
#property indicator_buffers 4
#property indicator_color3 Blue
#property indicator_color4 Red
//---- indicator parameters
extern int ExtDepth=12;
extern int ExtDeviation=5;
extern int ExtBr1[];
double ExtMapBuffer2[];
double ExtMapBuffer3[];

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
   IndicatorBuffers(4);
//---- drawing settings
   
  SetIndexStyle(0,DRAW_NONE);
    SetIndexStyle(2,DRAW_HISTOGRAM,0,1);
 SetIndexStyle(3,DRAW_HISTOGRAM,0,1);
 

    SetIndexDrawBegin(2,1);
  SetIndexDrawBegin(3,1);
 
 
//---- indicator buffers mapping
   SetIndexBuffer(0,ExtMapBuffer0);
   SetIndexBuffer(1,ExtMapBuffer1);
   SetIndexBuffer(2,ExtMapBuffer2);
   SetIndexBuffer(3,ExtMapBuffer3);
   SetIndexEmptyValue(0,0.0);
   SetIndexEmptyValue(1,0.0);

   
   ArraySetAsSeries(ExtMapBuffer0,true);
   ArraySetAsSeries(ExtMapBuffer1,true);
   
//---- indicator short name
   IndicatorShortName("ZIGOSK("+ExtDepth+","+ExtDeviation+","+ExtBackstep+")");
SetIndexLabel(0,"%");
     SetIndexLabel(1,NULL);
        SetIndexLabel(2,NULL);
          SetIndexLabel(3,NULL);
          
          
         
  
          
//---- initialization done
   return(0);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int start()
  {
   int    shift, back,lasthighpos,lastlowpos,shift_bar,i;
   double val,res;
   double curlow,curhigh,lasthigh,lastlow,sravnenie=0.0,ZIGOSK,Draw;
/*
Draw=DrawlinesAt*(-1);
ObjectCreate("Line2",OBJ_HLINE,1,0,DrawlinesAt); 
ObjectCreate("Line3",OBJ_HLINE,1,0,Draw); 
ObjectSet("Line2",6, Silver);
  ObjectSet("Line3",6, Silver);
ObjectSet("Line3",7,STYLE_DOT );
ObjectSet("Line2",7,STYLE_DOT );
*/

   for(shift=Bars-ExtDepth; shift>=0; shift--)
     {
      val=Low[Lowest(NULL,0,MODE_LOW,ExtDepth,shift)];
      if(val==lastlow) val=0.0;
      else 
        { 
         lastlow=val; 
         if((Low[shift]-val)>(ExtDeviation*Point)) val=0.0;
         else
           {
            for(back=1; back<=ExtBackstep; back++)
              {
               res=ExtMapBuffer0[shift+back];
               if((res!=0)&&(res>val)) ExtMapBuffer0[shift+back]=0.0; 
              }
           }
        } 
      ExtMapBuffer0[shift]=val;
      //--- high
      val=High[Highest(NULL,0,MODE_HIGH,ExtDepth,shift)];
      if(val==lasthigh) val=0.0;
      else 
        {
         lasthigh=val;
         if((val-High[shift])>(ExtDeviation*Point)) val=0.0;
         else
           {
            for(back=1; back<=ExtBackstep; back++)
              {
               res=ExtMapBuffer1[shift+back];
               if((res!=0)&&(res<val)) ExtMapBuffer1[shift+back]=0.0; 
              } 
           }
        }
      ExtMapBuffer1[shift]=val;
     }

   // final cutting 
   lasthigh=-1; lasthighpos=-1;
   lastlow=-1;  lastlowpos=-1;

   for(shift=Bars-ExtDepth; shift>=0; shift--)
     {
      curlow=ExtMapBuffer0[shift];
      curhigh=ExtMapBuffer1[shift];
      if((curlow==0)&&(curhigh==0)) continue;
      //---
      if(curhigh!=0)
        {
         if(lasthigh>0) 
           {
            if(lasthigh<curhigh) ExtMapBuffer1[lasthighpos]=0;
            else ExtMapBuffer1[shift]=0;
           }
         //---
         if(lasthigh<curhigh || lasthigh<0)
           {
            lasthigh=curhigh;
            lasthighpos=shift;
           }
         lastlow=-1;
        }
      //----
      if(curlow!=0)
        {
         if(lastlow>0)
           {
            if(lastlow>curlow) ExtMapBuffer0[lastlowpos]=0;
            else ExtMapBuffer0[shift]=0;
           }
         //---
         if((curlow<lastlow)||(lastlow<0))
           {
            lastlow=curlow;
            lastlowpos=shift;
           } 
         lasthigh=-1;
        }
     }
  
   for(shift=Bars-1; shift>=0; shift--)
     {
      if(shift>=Bars-ExtDepth) ExtMapBuffer0[shift]=0.0;
      else
        {
         res=ExtMapBuffer1[shift];
         if(res!=0.0) ExtMapBuffer0[shift]=res;
        }
     }
     
     
     //             Модуль Осцилятора 
     
     /*
   for(shift=Bars-1; shift>=0; shift--)
   {
   ExtMapBuffer2[shift]=-1;
      ExtMapBuffer3[shift]=3;
   }
   
   */
   
      for(shift=Bars-1; shift>=0; shift--)
     {
      ExtMapBuffer2[shift]=0;
      ExtMapBuffer3[shift]=0;
      
      
      if(sravnenie!=0.0)
        {

         if(sravnenie<ExtMapBuffer0[shift]) // Растущий тренд
            {
                    
               for( i=shift_bar;i>shift; i--)    
                  {
               
                if(i==shift_bar)
                {
                ZIGOSK=(((Close[i]-sravnenie)*100)/sravnenie);
                
                 ExtMapBuffer2[i]=ZIGOSK;
                 ExtMapBuffer0[i]=ZIGOSK;
                }
               
                  if(i!=shift_bar)
                  {
                  
              
                  ZIGOSK=(((Close[i]-sravnenie)*100)/sravnenie);
                  if(Close[i]>=Close[i+1]) 
                  {
                  ExtMapBuffer2[i]=ZIGOSK;
                  ExtMapBuffer0[i]=ZIGOSK;
                  }
                  else 
                  {
                  ExtMapBuffer3[i]=ZIGOSK;
                  ExtMapBuffer0[i]=ZIGOSK;
                  }
                  }
               
                 
                  } 
            }
            
            
            if(sravnenie>ExtMapBuffer0[shift]) // Падающий тренд
            {
            if(ExtMapBuffer0[shift]!=0)
            {
            
               for( i=shift_bar;i>shift; i--)    
                  {
                   if(i==shift_bar)
                {
                ZIGOSK=(((Close[i]-sravnenie)*100)/sravnenie);
                
                 ExtMapBuffer3[i]=ZIGOSK;
                 ExtMapBuffer0[i]=ZIGOSK;
                }
                
                 if(i!=shift_bar)
                  {
                  
              
                  ZIGOSK=(((Close[i]-sravnenie)*100)/sravnenie);
                  if(Close[i]>=Close[i+1]) 
                  {
                  ExtMapBuffer2[i]=ZIGOSK;
                  ExtMapBuffer0[i]=ZIGOSK;
                  }
                  else 
                  {
                  ExtMapBuffer3[i]=ZIGOSK;
                  ExtMapBuffer0[i]=ZIGOSK;
                  }
                  }
                
                
                  }
            }
            }

         } // закрывает сравнение не = 0
                  
      if(ExtMapBuffer0[shift]>0) 
      {
      
      sravnenie=ExtMapBuffer0[shift];
     shift_bar=shift;
     if(ExtMapBuffer3[shift+1]!=0) ExtMapBuffer0[shift]=ExtMapBuffer3[shift+1];
     else ExtMapBuffer0[shift]=ExtMapBuffer2[shift+1];
     
      }
   
  
     
     }
     //             Модуль Осцилятора  
   return(0);
  }



И когда в скрипте пишу

Print (iCustom( NULL, 0, "ZIGOSK2",12,5,3,0.5, 0, 20 ));

он мне зараза в журнале пишкт не могу открыть файл... че за хрень кто скажет мне плиз...

Forex Trader
114255
Forex Trader 2006.09.05 14:43  
// extern double DrawlinesAt=0.5;
Print (iCustom( NULL, 0, "ZIGOSK2",12,5,3,0.5, 0, 20 ));
Forex Trader
114255
Forex Trader 2006.09.05 14:57  
// extern double DrawlinesAt=0.5;
Print (iCustom( NULL, 0, "ZIGOSK2",12,5,3,0.5, 0, 20 ));


Оп прошу прощенья.... на данный момент у меня
Print ("Kuku!!!",iCustom( NULL, 0, "ZIGOSK2",12,5,3, 0, 3 ));

и все равно не пашет... может не открываться из-за того что буфер как-то криво заполняется?

Forex Trader
114255
Forex Trader 2006.09.05 16:28  
Индикатор рабочий? Сам на графике что-то рисует?
Forex Trader
114255
Forex Trader 2006.09.05 16:49  
Индикатор рабочий? Сам на графике что-то рисует?



Да конечно ... я ума не приложу в чем дело...
Forex Trader
114255
Forex Trader 2006.09.05 18:40  
Индикатор рабочий? Сам на графике что-то рисует?



Да конечно ... я ума не приложу в чем дело...



Вообще-то Ваш индикатор не компилируется (тот, что Вами выложен). Следовательно нет файла .ех4. То есть код ошибки возвращается верно - такого файла нет, поскольку вызывается не исходник, а результат компиляции.

Удачи и попутных трендов.

ЗЫ Там дважды описаны одни и те же переменные.
Forex Trader
114255
Forex Trader 2006.09.05 18:54  
Вот новая версия, но у меня и старая компилилась.... так что не знаю что там у вас...
#property indicator_separate_window
#property indicator_buffers 1
#property indicator_minimum -10 
#property indicator_maximum 10

#property indicator_color1 Red
//---- indicator parameters
extern int ExtDepth=12;
extern int ExtDeviation=5;
extern int ExtBackstep=3;
extern double DrawlinesAt=0;


//---- indicator buffers
double ExtMapBuffer0[];
double ExtMapBuffer1[];
double ExtMapBuffer2[];
double ExtMapBuffer3[];

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
  double Draw;
   IndicatorBuffers(4);
//---- drawing settings
   
  SetIndexStyle(0,DRAW_LINE);
    SetIndexStyle(2,DRAW_HISTOGRAM,0,1);
 SetIndexStyle(3,DRAW_HISTOGRAM,0,1);
 

    SetIndexDrawBegin(2,1);
  SetIndexDrawBegin(3,1);
 
 
//---- indicator buffers mapping
   SetIndexBuffer(0,ExtMapBuffer0);
   SetIndexBuffer(1,ExtMapBuffer1);
   SetIndexBuffer(2,ExtMapBuffer2);
   SetIndexBuffer(3,ExtMapBuffer3);
     SetIndexEmptyValue(0,0.0); 
   ArraySetAsSeries(ExtMapBuffer0,true);
   ArraySetAsSeries(ExtMapBuffer1,true);
   
//---- indicator short name
   IndicatorShortName("ZIGOSK("+ExtDepth+","+ExtDeviation+","+ExtBackstep+")");
SetIndexLabel(0,"%");
     SetIndexLabel(1,NULL);
        SetIndexLabel(2,NULL);
          SetIndexLabel(3,NULL);
          
          
         
 
          
//---- initialization done
   return(0);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+

int deinit()
{
ObjectDelete("Line2");
ObjectDelete("Line3");
return(0);
}
int start()
  {
   int    shift, back,lasthighpos,lastlowpos,shift_bar,i;
   double val,res;
   double curlow,curhigh,lasthigh,lastlow,sravnenie=0.0,ZIGOSK,Draw;

 Draw=DrawlinesAt*(-1);
ObjectCreate("Line2",OBJ_HLINE,1,0,DrawlinesAt); 
ObjectCreate("Line3",OBJ_HLINE,1,0,Draw); 
ObjectSet("Line2",6, Silver);
  ObjectSet("Line3",6, Silver);
ObjectSet("Line3",7,STYLE_DOT );
ObjectSet("Line2",7,STYLE_DOT );

   for(shift=Bars-ExtDepth; shift>=0; shift--)
     {
      val=Low[Lowest(NULL,0,MODE_LOW,ExtDepth,shift)];
      if(val==lastlow) val=0.0;
      else 
        { 
         lastlow=val; 
         if((Low[shift]-val)>(ExtDeviation*Point)) val=0.0;
         else
           {
            for(back=1; back<=ExtBackstep; back++)
              {
               res=ExtMapBuffer0[shift+back];
               if((res!=0)&&(res>val)) ExtMapBuffer0[shift+back]=0.0; 
              }
           }
        } 
      ExtMapBuffer0[shift]=val;
      //--- high
      val=High[Highest(NULL,0,MODE_HIGH,ExtDepth,shift)];
      if(val==lasthigh) val=0.0;
      else 
        {
         lasthigh=val;
         if((val-High[shift])>(ExtDeviation*Point)) val=0.0;
         else
           {
            for(back=1; back<=ExtBackstep; back++)
              {
               res=ExtMapBuffer1[shift+back];
               if((res!=0)&&(res<val)) ExtMapBuffer1[shift+back]=0.0; 
              } 
           }
        }
      ExtMapBuffer1[shift]=val;
     }

   // final cutting 
   lasthigh=-1; lasthighpos=-1;
   lastlow=-1;  lastlowpos=-1;

   for(shift=Bars-ExtDepth; shift>=0; shift--)
     {
      curlow=ExtMapBuffer0[shift];
      curhigh=ExtMapBuffer1[shift];
      if((curlow==0)&&(curhigh==0)) continue;
      //---
      if(curhigh!=0)
        {
         if(lasthigh>0) 
           {
            if(lasthigh<curhigh) ExtMapBuffer1[lasthighpos]=0;
            else ExtMapBuffer1[shift]=0;
           }
         //---
         if(lasthigh<curhigh || lasthigh<0)
           {
            lasthigh=curhigh;
            lasthighpos=shift;
           }
         lastlow=-1;
        }
      //----
      if(curlow!=0)
        {
         if(lastlow>0)
           {
            if(lastlow>curlow) ExtMapBuffer0[lastlowpos]=0;
            else ExtMapBuffer0[shift]=0;
           }
         //---
         if((curlow<lastlow)||(lastlow<0))
           {
            lastlow=curlow;
            lastlowpos=shift;
           } 
         lasthigh=-1;
        }
     }
  
   for(shift=Bars-1; shift>=0; shift--)
     {
      if(shift>=Bars-ExtDepth) ExtMapBuffer0[shift]=0.0;
      else
        {
         res=ExtMapBuffer1[shift];
         if(res!=0.0) ExtMapBuffer0[shift]=res;
        }
     }
     
     
     //             Модуль Осцилятора 
     
     /*
   for(shift=Bars-1; shift>=0; shift--)
   {
   ExtMapBuffer2[shift]=-1;
      ExtMapBuffer3[shift]=3;
   }
   
   */
   
      for(shift=Bars-1; shift>=0; shift--)
     {
      ExtMapBuffer2[shift]=0;
      ExtMapBuffer3[shift]=0;
      
      
      if(sravnenie!=0.0)
        {

         if(sravnenie<ExtMapBuffer0[shift]) // Растущий тренд
            {
                    
               for( i=shift_bar;i>shift; i--)    
                  {
               
                if(i==shift_bar)
                {
                ZIGOSK=(((Close[i]-sravnenie)*100)/sravnenie);
                
                 ExtMapBuffer2[i]=ZIGOSK;
                 ExtMapBuffer0[i]=ZIGOSK;
                }
               
                  if(i!=shift_bar)
                  {
                  
              
                  ZIGOSK=(((Close[i]-sravnenie)*100)/sravnenie);
                  if(Close[i]>=Close[i+1]) 
                  {
                  ExtMapBuffer2[i]=ZIGOSK;
                  ExtMapBuffer0[i]=ZIGOSK;
                  }
                  else 
                  {
                  ExtMapBuffer3[i]=ZIGOSK;
                  ExtMapBuffer0[i]=ZIGOSK;
                  }
                  }
               
                 
                  } 
            }
            
            
            if(sravnenie>ExtMapBuffer0[shift]) // Падающий тренд
            {
            if(ExtMapBuffer0[shift]!=0)
            {
            
               for( i=shift_bar;i>shift; i--)    
                  {
                   if(i==shift_bar)
                {
                ZIGOSK=(((Close[i]-sravnenie)*100)/sravnenie);
                
                 ExtMapBuffer3[i]=ZIGOSK;
                 ExtMapBuffer0[i]=ZIGOSK;
                }
                
                 if(i!=shift_bar)
                  {
                  
              
                  ZIGOSK=(((Close[i]-sravnenie)*100)/sravnenie);
                  if(Close[i]>=Close[i+1]) 
                  {
                  ExtMapBuffer2[i]=ZIGOSK;
                  ExtMapBuffer0[i]=ZIGOSK;
                  }
                  else 
                  {
                  ExtMapBuffer3[i]=ZIGOSK;
                  ExtMapBuffer0[i]=ZIGOSK;
                  }
                  }
                
                
                  }
            }
            }

         } // закрывает сравнение не = 0
                  
      if(ExtMapBuffer0[shift]>0) 
      {
      
      sravnenie=ExtMapBuffer0[shift];
     shift_bar=shift;
     if(ExtMapBuffer3[shift+1]!=0) ExtMapBuffer0[shift]=ExtMapBuffer3[shift+1];
     else ExtMapBuffer0[shift]=ExtMapBuffer2[shift+1];
     
      }
  //  for(int k=IndicatorCounted();k>=0; k--)     
  // {
  // ExtMapBuffer0[shift]=1;
  // }  
  
     
     }
     //             Модуль Осцилятора  
   return(0);
  }
  
Forex Trader
114255
Forex Trader 2006.09.05 18:59  
Вот новая версия, но у меня и старая компилилась.... так что не знаю что там у вас...



А Вы попробуйте откомпилировать ту, что выложили ;). Я то ошибки исправил.
Сейчас гляну новую версию.
ЗЫ
Если хотите могу сделать функцию - будет работать быстрее при использовании в эксперте - просто вставите в тело эксперта - всего делов.
Forex Trader
114255
Forex Trader 2006.09.05 19:17  
Сорри еще раз, а что Вы хотите получить ?
При вызове с такими параметрами

Print ("Kuku!!!",iCustom( NULL, 0, "ZIGOSK2",12,5,3, 0, 3 ));

Вы получаете значения нулевого буфера на четвертом баре, то есть ExtMapBuffer0[3].
Поскольку SetIndexBuffer(0,ExtMapBuffer0);

У меня пишет в журнале Kuku!!!-0.3347 При вызове на чарт евры 15М
123
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий