Помогите пожалуйста переделать индикатор для построения скользящих каналов с MT3 На MT4

 
Уважаемые специалисты!! Помогите переделать очень хороший индикатор - который позволяет торговать по тактике скользящих каналов с MT3 на MT4

/*[[
    Name := SHI_Channel
    Author := Copyright © 2004, Shurka
    Link := shurka@pochtamt.ru
    Notes := Barishpolets Channels
    Separate Window := No
    First Color := Red
    First Draw Type := Symbol
    First Symbol := 164
    Use Second Data :=no
    Second Color := Blue
    Second Draw Type := Line
    Second Symbol := 218
]]*/
Inputs:		AllBars(240);//количество обсчитываемых баров. 0-считаются все
Inputs:		BarsForFract(0);//количество баров "плеча" фрактала
Variable:	CurrentBar(0), B1(-1),B2(-1),UpDown(0),P1(0),P2(0),PP(0),Step(0);
Variable:	i(0),AB(300),BFF(0);
Variable:	ishift(0),iprice(0);

SetLoopCount(0); //без ограничений циклов
if AllBars==0 or Bars<AllBars then AB=Bars else AB=AllBars; //AB-количество обсчитываемых баров

if BarsForFract>0 then BFF=BarsForFract else
{
	Switch Period
	{
		case 1:		BFF=12;
		case 5:		BFF=48;
		case 15:	BFF=24;
		case 30:	BFF=24;
		case 60:	BFF=12;
		case 240:	BFF=15;
		case 1440:	BFF=10;
		case 10080:	BFF=6;
		Default:	exit;
	};
};

CurrentBar=2; //считаем с третьего бара, чтобы фрактал "закрепился
B1=-1; B2=-1; UpDown=0;
While (B1==-1 or B2==-1) & CurrentBar<AB
{
	//UpDown=1 значит первый фрактал найден сверху, UpDown=-1 значит первый фрактал
	//найден снизу, UpDown=0 значит фрактал ещё не найден.
	//В1 и В2 - номера баров с фракталами, через них строим опорную линию.
	//Р1 и Р2 - соответственно цены через которые будем линию проводить

	if UpDown<1 & CurrentBar=Lowest(MODE_LOW,CurrentBar+BFF,BFF*2+1) then
	{
		if UpDown==0 then	{ UpDown=-1; B1=CurrentBar; P1=Low[B1]; }
		else				{ B2=CurrentBar; P2=Low[B2];};
	};
	if UpDown>-1 & CurrentBar=Highest(MODE_HIGH,CurrentBar+BFF,BFF*2+1) then
	{
		if UpDown==0 then	{ UpDown=1; B1=CurrentBar; P1=High[B1]; }
		else				{ B2=CurrentBar; P2=High[B2]; };
	};
	CurrentBar++;
};
if	B1==-1 or B2==-1 then exit; // Значит не нашли фракталов среди 300 баров 8-)
Step=(P2-P1)/(B2-B1);//Вычислили шаг, если он положительный, то канал нисходящий
P1=P1-B1*Step; B1=0;//переставляем цену и первый бар к нулю
//А теперь опорную точку противоположной линии канала.
ishift=0; iprice=0;
if UpDown=1 then
{	PP=Low[2]-2*Step;
	for i=3 to B2 {if Low[i]<PP+Step*i then { PP=Low[i]-i*Step; };};
	if Low[0]<PP then {ishift=0; iprice=PP;};
	if Low[1]<PP+Step then {ishift=1; iprice=PP+Step;};
	if high[0]>P1 then {ishift=0; iprice=P1;};
	if high[1]>P1+Step then {ishift=1; iprice=P1+Step;};
}	else
{	PP=High[2]-2*Step;
	for i=3 to B2 {if High[i]>PP+Step*i then { PP=High[i]-i*Step;};};
	if Low[0]<P1 then {ishift=0; iprice=P1;};
	if Low[1]<P1+Step then {ishift=1; iprice=P1+Step;};
	if high[0]>PP then {ishift=0; iprice=PP;};
	if high[1]>PP+Step then {ishift=1; iprice=PP+Step;};
};
//Теперь переставим конечную цену и бар на АВ, чтобы линии канала рисовались подлиннее
P2=P1+AB*Step;
B1=Time[B1]; B2=Time[AB];

//Если не было пересечения канала, то 0, иначе ставим псису.
SetIndexValue(ishift,iprice);
MoveObject("TL1",OBJ_TRENDLINE,B2,PP+Step*AB,B1,PP,ForestGreen,2,STYLE_SOLID);
MoveObject("TL2",OBJ_TRENDLINE,B2,P2,B1,P1,ForestGreen,2,STYLE_SOLID);
MoveObject("MIDL",OBJ_TRENDLINE,B2,(P2+PP+Step*AB)/2,B1,(P1+PP)/2,ForestGreen,1,STYLE_DOT); 
 
Лови
//+------------------------------------------------------------------+
//|                                                  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,ForestGreen); 
		ObjectSet("TL1",OBJPROP_WIDTH,2); 
		ObjectSet("TL1",OBJPROP_STYLE,STYLE_SOLID); 
	ObjectCreate("TL2",OBJ_TREND,0,T2,P2,T1,P1); 
		ObjectSet("TL2",OBJPROP_COLOR,ForestGreen); 
		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,ForestGreen); 
		ObjectSet("MIDL",OBJPROP_WIDTH,1); 
		ObjectSet("MIDL",OBJPROP_STYLE,STYLE_DOT); 
//----
   return(0);
  }
//+------------------------------------------------------------------+
 
СПАСИБО!!!!!СПАСИБО!!!!!СПАСИБО!!!!!СПАСИБО!!!!!СПАСИБО!!!!!