MultiSSRCplusSM





//+------------+-----------------------------------------------------+
//| v.27.04.07 |                        MultiSSRC_plus_SnakeMood.mq4 |
//+------------+                                                     |
//|            |              Bookkeeper, 2007, yuzefovich@gmail.com |
//+------------+-----------------------------------------------------+
/********************************************************************/ 
/************ Presence  SSRC.mq4 v.12.04.07 is necessary ************/ 
/************ Presence Snake.mq4 v.19.04.07 is necessary ************/ 
/********************************************************************/ 
/***  Working window        Additional windows should be          ***/  
/***  with indicator        open for loading quotations           ***/ 
/***  M1....................M15,M30,H1                            ***/ 
/***  M5....................M15,M30,H1                            ***/ 
/***  M15...................M30,H1,H4                             ***/ 
/***  M30...................H1,H4                                 ***/ 
/***  H1....................H4                                    ***/ 
/***  H4....................D1                                    ***/ 
/***  If the terminal has been switched off,                      ***/
/***  and then again included,                                    ***/
/***  after loading quotations it is necessary                    ***/
/***  to restart the indicator                                    ***/
/********************************************************************/ 
#property copyright ""
#property link      "http://www.forexter.land.ru/indicators.htm"
//----
#property indicator_separate_window
#property indicator_maximum  1.3
#property indicator_minimum -1.3
#property indicator_level1   0.9
#property indicator_level2  -0.9
#property indicator_level3   0.7
#property indicator_level4  -0.7
#property indicator_levelcolor Black
#property indicator_levelstyle 0
#property indicator_buffers  6
#property indicator_color1   PaleGreen 
#property indicator_color2   LightSalmon   
#property indicator_color3   Crimson 
#property indicator_color4   MediumVioletRed 
#property indicator_color5   BlueViolet 
#property indicator_color6   Blue 
/********************************************************************/ 
//---- Snake
extern int    SnakeRange   =3; 
extern int    FilterPeriod =21; 
extern double MartFiltr    =2;
extern int    PriceConst   =0; // 0 - Close
                               // 1 - Open
                               // 2 - High
                               // 3 - Low
                               // 4 - (H+L)/2
                               // 5 - (H+L+C)/3
                               // 6 - (H+L+2*C)/4
extern bool   HardCalc     =false;
/********************************************************************/ 
double SRC1[];
double SRC2[];
double SRC3[];
double SRC4[];
double SMUp[];
double SMDn[];
double SM00[];
/********************************************************************/ 
int rangeN=14,Maxrange=30,p1,p2,p3,p4,q;
bool First=true;
/********************************************************************/ 
void deinit() { return; }
/********************************************************************/ 
void init() { string str,str2; int n=Period(); IndicatorBuffers(7); 
SetIndexBuffer(0,SMUp); SetIndexStyle(0,DRAW_HISTOGRAM,EMPTY,2);
SetIndexBuffer(1,SMDn); SetIndexStyle(1,DRAW_HISTOGRAM,EMPTY,2);
SetIndexBuffer(2,SRC1); SetIndexStyle(2,DRAW_LINE,EMPTY,2);
SetIndexBuffer(3,SRC2); SetIndexStyle(3,DRAW_LINE,EMPTY,3);
SetIndexBuffer(4,SRC3); SetIndexStyle(4,DRAW_LINE,EMPTY,2);
SetIndexBuffer(5,SRC4); SetIndexStyle(5,DRAW_LINE,STYLE_DOT);
SetIndexBuffer(6,SM00); SetIndexStyle(6,DRAW_NONE);
SetIndexEmptyValue(0,0.0); SetIndexEmptyValue(1,0.0);
switch(n) {
case   1: str="M15,M30,H1";    str2="M15"; break;
case   5: str="M15,M30,H1";    str2="M15"; break;
case  15: str="M15,M30,H1,H4"; str2="M30"; break;
case  30: str="M30,H1,H4";     str2="H1";  break;
case  60: str="H1,H4";         str2="H4";  break;
case 240: str="H4,D1";         str2="D1";  break; }
IndicatorShortName("MultiSSRC("+str+") & SMood("+str2+") "); return; }
/********************************************************************/ 
void start() { int counted_bars=IndicatorCounted();
int n,n1,n2,n3,n4,limit; double sm;
if(Period()>240) { Alert("Period()>H4 - error!"); return; }
if(counted_bars<0) return(-1); 
if(First==true) { n=Period(); switch(n) {
case   1: p1=15;  p2=30;   p3=60;  p4=240;  q=480; break;
case   5: p1=15;  p2=30;   p3=60;  p4=240;  q=96;  break;
case  15: p1=15;  p2=30;   p3=60;  p4=240;  q=32;  break;
case  30: p1=30;  p2=60;   p3=240; p4=0;    q=16;  break;
case  60: p1=60;  p2=240;  p3=0;   p4=0;    q=8;   break;
case 240: p1=240; p2=1440; p3=0;   p4=0;    q=12;  break; }
limit=Bars-(rangeN+FilterPeriod+SnakeRange+4);
for(n=limit;n>=0;n--) { 
n1=iBarShift(Symbol(),p1,Time[n]);
SRC1[n]=iCustom(NULL,p1,"SSRC",
   SnakeRange,FilterPeriod,MartFiltr,PriceConst,0,n1);
if(p2>0) { 
n2=iBarShift(Symbol(),p2,Time[n]);
SM00[n]=iCustom(NULL,p2,"Snake",
   SnakeRange,FilterPeriod,MartFiltr,0,HardCalc,4,n2);
if(SM00[n]>0.9 || SM00[n]<-0.9) { 
if(SM00[n]>0.9)  { SMUp[n]=SM00[n]; SMDn[n]=0; }
if(SM00[n]<-0.9) { SMUp[n]=0; SMDn[n]=SM00[n]; } }
else { 
if(SM00[n]!=SM00[n+1]) { 
if(SM00[n]>SM00[n+p2/p1]) { SMUp[n]=SM00[n]; SMDn[n]=0; }
if(SM00[n]<SM00[n+p2/p1]) { SMUp[n]=0; SMDn[n]=SM00[n]; } }
else { SMUp[n]=SMUp[n+1]; SMDn[n]=SMDn[n+1]; }
} 
SRC2[n]=iCustom(NULL,p2,"SSRC",
   SnakeRange,FilterPeriod,MartFiltr,PriceConst,0,n2); 
}
if(p3>0) { n3=iBarShift(Symbol(),p3,Time[n]);
SRC3[n]=iCustom(NULL,p3,"SSRC",
   SnakeRange,FilterPeriod,MartFiltr,PriceConst,0,n3); }
if(p4>0) { n4=iBarShift(Symbol(),p4,Time[n]);  
SRC4[n]=iCustom(NULL,p4,"SSRC",
   SnakeRange,FilterPeriod,MartFiltr,PriceConst,0,n4); }
} First=false; }
else { limit=Bars-counted_bars+q+1; 
for(n=limit;n>=0;n--) { 
n1=iBarShift(Symbol(),p1,Time[n]);
SRC1[n]=iCustom(NULL,p1,"SSRC",
   SnakeRange,FilterPeriod,MartFiltr,PriceConst,0,n1);
if(p2>0) { n2=iBarShift(Symbol(),p2,Time[n]);
SM00[n]=iCustom(NULL,p2,"Snake",
   SnakeRange,FilterPeriod,MartFiltr,PriceConst,HardCalc,4,n2);
if(SM00[n]>0.9 || SM00[n]<-0.9) { 
if(SM00[n]>0.9)  { SMUp[n]=SM00[n]; SMDn[n]=0; }
if(SM00[n]<-0.9) { SMUp[n]=0; SMDn[n]=SM00[n]; } }
else { 
if(SM00[n]!=SM00[n+1]) { 
if(SM00[n]>SM00[n+p2/p1]) { SMUp[n]=SM00[n]; SMDn[n]=0; }
if(SM00[n]<SM00[n+p2/p1]) { SMUp[n]=0; SMDn[n]=SM00[n]; } }
else { SMUp[n]=SMUp[n+1]; SMDn[n]=SMDn[n+1]; }
} 
SRC2[n]=iCustom(NULL,p2,"SSRC",
   SnakeRange,FilterPeriod,MartFiltr,PriceConst,0,n2); }
if(p3>0) { n3=iBarShift(Symbol(),p3,Time[n]);
SRC3[n]=iCustom(NULL,p3,"SSRC",
   SnakeRange,FilterPeriod,MartFiltr,PriceConst,0,n3); }
if(p4>0) { n4=iBarShift(Symbol(),p4,Time[n]);  
SRC4[n]=iCustom(NULL,p4,"SSRC",
   SnakeRange,FilterPeriod,MartFiltr,PriceConst,0,n4); }
   } } return; }
/********************************************************************/ 





Sample





Analysis



Market Information Used:

Series array that contains open time of each bar


Indicator Curves created:

Implements a curve of type DRAW_HISTOGRAM

Implements a curve of type DRAW_LINE
Implements a curve of type DRAW_NONE

Indicators Used:



Custom Indicators Used:

Order Management characteristics:

Other Features:

It issuies visual alerts to the screen