Спёртый индикатор SHI_Channel в .mq4 - не пойму, как получить значения для эксперта...

 

Здрааааствуйте!
вот он:

//+------------------------------------------------------------------+
//|                                                  SHI_Channel.mq4 |
//|                                 Copyright © 2004, Shurka & Kevin |
//|                                                                  |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2004, Shurka & Kevin"
#property link      ""
 
#property indicator_chart_window
#property indicator_buffers 1
#property indicator_color1 Red
double ExtMapBuffer1[];
//---- input parameters
extern int       AllBars=240;
extern int       BarsForFract=0;
int CurrentBar=0;
double Step=0;
int B1=-1,B2=-1;
int UpDown=0;
double P1=0,P2=0,PP=0;
int i=0,AB=300,BFF=0;
int ishift=0;
double iprice=0;
datetime T1,T2;
 
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   SetIndexStyle(0,DRAW_ARROW);
   SetIndexArrow(0,164);
   SetIndexBuffer(0,ExtMapBuffer1);
   SetIndexEmptyValue(0,0.0);
//----
    
    
   return(0);
  }
//+------------------------------------------------------------------+
//| Custor indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//---- 
   
//----
   return(0);
  }
 
void DelObj()
{
    ObjectDelete("TL1");
    ObjectDelete("TL2");
    ObjectDelete("MIDL");
}
 
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
   int    counted_bars=IndicatorCounted();
//---- 
    if ((AllBars==0) || (Bars<AllBars)) AB=Bars; else AB=AllBars; //AB-количество обсчитываемых баров
    if (BarsForFract>0) 
        BFF=BarsForFract; 
    else
    {
        switch (Period())
        {
            case 1: BFF=12; break;
            case 5: BFF=48; break;
            case 15: BFF=24; break;
            case 30: BFF=24; break;
            case 60: BFF=12; break;
            case 240: BFF=15; break;
            case 1440: BFF=10; break;
            case 10080: BFF=6; break;
            default: DelObj(); return(-1); break;
        }
    }
    CurrentBar=2; //считаем с третьего бара, чтобы фрактал "закрепился
    B1=-1; B2=-1; UpDown=0;
    while(((B1==-1) || (B2==-1)) && (CurrentBar<AB))
    {
        //UpDown=1 значит первый фрактал найден сверху, UpDown=-1 значит первый фрактал
        //найден снизу, UpDown=0 значит фрактал ещё не найден.
        //В1 и В2 - номера баров с фракталами, через них строим опорную линию.
        //Р1 и Р2 - соответственно цены через которые будем линию проводить
 
        if((UpDown<1) && (CurrentBar==Lowest(Symbol(),Period(),MODE_LOW,BFF*2+1,CurrentBar-BFF))) 
        {
            if(UpDown==0) { UpDown=-1; B1=CurrentBar; P1=Low[B1]; }
            else { B2=CurrentBar; P2=Low[B2];}
        }
        if((UpDown>-1) && (CurrentBar==Highest(Symbol(),Period(),MODE_HIGH,BFF*2+1,CurrentBar-BFF))) 
        {
            if(UpDown==0) { UpDown=1; B1=CurrentBar; P1=High[B1]; }
            else { B2=CurrentBar; P2=High[B2]; }
        }
        CurrentBar++;
    }
    if((B1==-1) || (B2==-1)) {DelObj(); return(-1);} // Значит не нашли фракталов среди 300 баров 8-)
    Step=(P2-P1)/(B2-B1);//Вычислили шаг, если он положительный, то канал нисходящий
    P1=P1-B1*Step; B1=0;//переставляем цену и первый бар к нулю
    //А теперь опорную точку противоположной линии канала.
    ishift=0; iprice=0;
    if(UpDown==1)
    { 
        PP=Low[2]-2*Step;
        for(i=3;i<=B2;i++) 
        {
            if(Low[i]<PP+Step*i) { PP=Low[i]-i*Step; }
        }
        if(Low[0]<PP) {ishift=0; iprice=PP;}
        if(Low[1]<PP+Step) {ishift=1; iprice=PP+Step;}
        if(High[0]>P1) {ishift=0; iprice=P1;}
        if(High[1]>P1+Step) {ishift=1; iprice=P1+Step;}
    } 
    else
    { 
        PP=High[2]-2*Step;
        for(i=3;i<=B2;i++) 
        {
            if(High[i]>PP+Step*i) { PP=High[i]-i*Step;}
        }
        if(Low[0]<P1) {ishift=0; iprice=P1;}
        if(Low[1]<P1+Step) {ishift=1; iprice=P1+Step;}
        if(High[0]>PP) {ishift=0; iprice=PP;}
        if(High[1]>PP+Step) {ishift=1; iprice=PP+Step;}
    }
    //Теперь переставим конечную цену и бар на АВ, чтобы линии канала рисовались подлиннее
    P2=P1+AB*Step;
    T1=Time[B1]; T2=Time[AB];
 
    //Если не было пересечения канала, то 0, иначе ставим псису.
    if(iprice!=0) ExtMapBuffer1[ishift]=iprice;
    DelObj();
    ObjectCreate("TL1",OBJ_TREND,0,T2,PP+Step*AB,T1,PP); 
        ObjectSet("TL1",OBJPROP_COLOR,Lime); 
        ObjectSet("TL1",OBJPROP_WIDTH,2); 
        ObjectSet("TL1",OBJPROP_STYLE,STYLE_SOLID); 
    ObjectCreate("TL2",OBJ_TREND,0,T2,P2,T1,P1); 
        ObjectSet("TL2",OBJPROP_COLOR,Lime); 
        ObjectSet("TL2",OBJPROP_WIDTH,2); 
        ObjectSet("TL2",OBJPROP_STYLE,STYLE_SOLID); 
    ObjectCreate("MIDL",OBJ_TREND,0,T2,(P2+PP+Step*AB)/2,T1,(P1+PP)/2);
        ObjectSet("MIDL",OBJPROP_COLOR,Lime); 
        ObjectSet("MIDL",OBJPROP_WIDTH,1); 
        ObjectSet("MIDL",OBJPROP_STYLE,STYLE_DOT); 
//----
   return(0);
  }
//+------------------------------------------------------------------+


iCustom к нему не хочет возращать.
iCustom(NULL, 0, "SHI_Channel", 240, 0, 0, i) возвращает нуль при любом i...
Хелп!!!
Спасибо. :о)

Файлы:
 

Ничего с этого индикатора не возмешь, он линиями рисует а не буферами

 

А линии в буфер никак?

 
почему же никак? только кто будет делать?
 
да... вопрос... а сложно?
я с этими делами ещё не сталкивался...
 

может есть другой индикатор, показывающий направление тренда?

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