Здравствуйте Уважаемые разработчики. Помогите, пожалуйста, создать индикатор на основе индикатора SSL_fast_sBar_mtf.
Нужно чтобы индикатор рисовал две «линейки», одна со значением «Lb» большим, а другая с меньшим (или же ТАЙМ ФРЕЙМ больший и меньший). Если на баре цвета обоих «линеек» одинаковы (а на предыдущем были разные) , то в начале следующего бара нужно дать сигнал на открытие ( поставить стрелку).
Стрелки должны рисоваться при помощи индикаторных буферов , а не графических объектов. В окне внешних параметров необходимы данные обоих «линеек» (для последующих подборов их параметров).
Как передать ссылку на индикатор я не знаю, по этому передаю код:
//+------------------------------------------------------------------+
//| SSL.mq4 |
//|ssl bar fast mtf Kalenzo |
//|
bartlomiej.gorski@gmail.com |
//+------------------------------------------------------------------+
//mod2008fxtsd ml ki
#property copyright "Kalenzo"
#property link "
bartlomiej.gorski@gmail.com"
//----
#property indicator_separate_window
#property indicator_buffers 2
#property indicator_color1 DodgerBlue
#property indicator_color2 OrangeRed
#property indicator_width1 2
#property indicator_width2 2
#property indicator_minimum 10
#property indicator_maximum 90
//----
extern int Lb =10;
extern int SSL_BarLevel=15; //BarLevel 10-90
extern int TimeFrame =0;
extern string TimeFrames="M1;5,15,30,60H1;240H4;1440D1;10080W1;43200MN|0-CurrentTF";
//----
double sslHup[];
double sslHdn[];
double hlv[];
string IndicatorFileName;
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
int init()
{
string TimeFrameStr;
if (TimeFrame<Period()) TimeFrame=Period();
switch(TimeFrame)
{
case PERIOD_M1: TimeFrameStr="M1" ;break;
case PERIOD_M5: TimeFrameStr="M5" ;break;
case PERIOD_M15: TimeFrameStr="M15";break;
case PERIOD_M30: TimeFrameStr="M30";break;
case PERIOD_H1: TimeFrameStr="H1" ;break;
case PERIOD_H4: TimeFrameStr="H4" ;break;
case PERIOD_D1: TimeFrameStr="D1" ;break;
case PERIOD_W1: TimeFrameStr="W1" ;break;
case PERIOD_MN1: TimeFrameStr="MN1";break;
default : TimeFrameStr="TF0";
}
//----
IndicatorBuffers(3);
SetIndexBuffer (0,sslHup); SetIndexStyle(0,DRAW_ARROW); SetIndexArrow(0,167); SetIndexLabel(0,"SSLup "+Lb+" ["+TimeFrame+"]");
SetIndexBuffer (1,sslHdn); SetIndexStyle(1,DRAW_ARROW); SetIndexArrow(1,167); SetIndexLabel(1,"SSLdn "+Lb+" ["+TimeFrame+"]");
SetIndexBuffer (2,hlv);
//----
IndicatorShortName("SSL "+Lb+"["+TimeFrameStr+"]");
IndicatorFileName=WindowExpertName();
//----
return(0);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
int deinit()
{
return(0);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
int start()
{
int counted_bars=IndicatorCounted();
int i,limit;
//----
if (counted_bars<0) return(-1);
if (counted_bars>0) counted_bars--;
limit=Bars-counted_bars;
//----
if (TimeFrame!=Period())
{
datetime TimeArray[];
limit=MathMax(limit,TimeFrame/Period());
ArrayCopySeries(TimeArray ,MODE_TIME ,NULL,TimeFrame);
//----
for(i=0,int y=0; i<limit; i++)
{
if(Time
<TimeArray[y]) y++;
sslHup=iCustom(NULL,TimeFrame,IndicatorFileName,Lb,SSL_BarLevel,0,y);
sslHdn=iCustom(NULL,TimeFrame,IndicatorFileName,Lb,SSL_BarLevel,1,y);
}
return(0);
}
//----
for(i=limit;i>=0;i--)
{
hlv=hlv[i+1];
if(Close>iMA(Symbol(),0,Lb,0,MODE_SMA,PRICE_HIGH,i+1)) hlv= 1;
if(Close<iMA(Symbol(),0,Lb,0,MODE_SMA,PRICE_LOW,i+1)) hlv=-1;
if(hlv==-1) { sslHdn=SSL_BarLevel; sslHup=EMPTY_VALUE; }
else
{ sslHdn=EMPTY_VALUE; sslHup=SSL_BarLevel; }
}
return(0);
}
//+------------------------------------------------------------------+