tro_compass_xi





//+------------------------------------------------------------------+ 
//|   $ROLLING_RANGE                                                 | 
//|                                                                  | 
//|   Copyright © 2008, Avery T. Horton, Jr. aka TheRumpledOne       |
//|                                                                  |
//|   PO BOX 43575, TUCSON, AZ 85733                                 |
//|                                                                  |
//|   GIFTS AND DONATIONS ACCEPTED                                   | 
//|                                                                  |
//|   therumpldone@gmail.com                                         |  
//+------------------------------------------------------------------+ 
#property  copyright "Copyright © 2008, Avery T. Horton, Jr. aka TRO"
#property  link      "http://www.therumpldone.com/"
//---- indicator settings 
#property indicator_separate_window
#property indicator_buffers 0
//#property indicator_minimum 0
//#property indicator_maximum 1
//---- indicator parameters  
//extern int win = 1;
extern int price.x.offset= 0 ;//250
extern int price.y.offset= -160 ;//-160
//----
extern bool show.arrow=true ;
extern bool show.value=true ;
//extern int  myDecimals = 2 ;
extern string myFont      ="Arial Bold" ;
extern int    myFontSize  =20 ;
extern int    myArrowSize =40 ;
extern int    myDigitSize =20 ;
extern int    xStart      =-600 ;
extern int    xOffSet     =100 ;
//----
extern string Ind_Name_1 ="$ROLLING_RANGE";
extern string myName     ="$ROLLING_RANGE";
extern color  myIndColor=DarkGray ;
//extern double iParm1 = 0;
//extern double iParm2 = 0;
extern double iParm3=-100;
extern double iParm4=-100;
extern double iParm5=-100;
extern double iParm6=-100;
extern double iParm7=-100;
extern double iParm8=-100;
extern int    iMode =0;
//----
extern int    myPeriod_1 =5 ;
extern int    myPeriod_2 =15 ;
extern int    myPeriod_3 =20 ;
extern int    myPeriod_4 =30 ;
extern int    myPeriod_5 =45 ;
extern int    myPeriod_6 =60 ;
//----
extern bool   UseValue=false;
extern double N_value =-999;
extern double NE_value=2;
extern double E_value =3;
extern double SE_value=1;
extern double S_value =-999;
//----
extern color N_color =Green;
extern color NE_color=Green;
extern color E_color =Yellow;
extern color SE_color=Red;
extern color S_color =Red;
//---- buffers
string Arrow12="ñ"; // 12 oclock
string Arrow2 ="ö";  // 2 oclock
string Arrow3 ="ð";  // 3 oclock
string Arrow5 ="ø";  // 5 oclock
string Arrow6 ="ò";  // 6 oclock
//----
string tObjName01   ;
string tObjName02   ;
string tObjName03   ;
string tObjName04 , tObjName05, IndHead ;
//----
double open   ;
double close   ;
double close1  ;
double high   ;
double high1   ;
double low    ;
double low1    ;
double mid     ;
double mid1   ;
double pCount   ;
//----
int   HighDir, LowDir, MidDir, Mid1Dir, CloseDir, ClOpDir ;
color HighColor, LowColor, MidColor, Mid1Color, CloseColor ;
string PriceDir   ;
string tPeriod  ;
double cVal, pVal ;
//+------------------------------------------------------------------+
int      totalLabels;
string   labelNames;
int      corner;
int      window;
string   shortName ;
int      win ;
//+------------------------------------------------------------------+
string TimeFrameToString(int tf)
  {
   string tfs;
     switch(tf) 
        {
         case PERIOD_M1:  tfs="M1" ;break;
         case PERIOD_M5:  tfs="M5" ;break;
         case PERIOD_M15: tfs="M15";break;
         case PERIOD_M30: tfs="M30";break;
         case PERIOD_H1:  tfs="H1" ;break;
         case PERIOD_H4:  tfs="H4" ;break;
         case PERIOD_D1:  tfs="D1" ;break;
         case PERIOD_W1:  tfs="W1" ;break;
         case PERIOD_MN1: tfs="MN1";
        }
      return(tfs);
     }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
         color fColor( double i)
           {
            color rColor ;
              if(i==1)rColor=NE_color ;else 
              {
                 if(i==0)rColor=E_color ;else
                  {
                   rColor=SE_color;
                  } 
              }
//----
            return(rColor );
           }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
         int fDirection( double i, double j)
           {
            int rDir ;
            if(i > j)rDir=1;
              else 
              {
               if(i < j) rDir=-1;
              else rDir=0; 
              }
//----
            return(rDir );
           }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
         string fCompass( double i )
           {
            string rCompass ;
              if(i==1)rCompass=Arrow2 ;else 
              {
                 if(i==0)rCompass=Arrow3 ;else 
                 {
                 rCompass=Arrow5;
                 } 
              }
//----
            return(rCompass );
           }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
         int init()
           {
            shortName =MakeUniqueName("CI ","");
            labelNames=shortName;
            IndicatorShortName(shortName);
            totalLabels    =0;
//----
            return(0);
           }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
         int deinit()
           {
            while(totalLabels>0) { ObjectDelete(StringConcatenate(labelNames,totalLabels)); totalLabels--;}
            DoDelObj( PERIOD_M1);
            DoDelObj( PERIOD_M5);
            DoDelObj( PERIOD_M15 );
            DoDelObj( PERIOD_H1);
            DoDelObj( PERIOD_H4);
            DoDelObj( PERIOD_D1);
            DoDelObj( PERIOD_W1);
            DoDelObj( PERIOD_MN1);
           }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
         int start()
           {
            int xStart2=xStart + xOffSet ;
            int xStart3=xStart + xOffSet*2 ;
            int xStart4=xStart + xOffSet*3 ;
            int xStart5=xStart + xOffSet*4 ;
            int xStart6=xStart + xOffSet*5 ;
            int xStart7=xStart + xOffSet*6 ;
            int xStart8=xStart + xOffSet*7 ;
            win=   WindowFind(shortName);
//----
            bool sFirst=true ;
              if(sFirst)
              {
               sFirst=false ;
               ObjectDelete(tObjName04);
               ObjectsDeleteAll( win, 21);
               ObjectsDeleteAll( win, 22);
               ObjectsDeleteAll( win, 23);
              }
/*
mladens way of deleting objects
for(int i = ObjectsTotal() - 1; i >= 0; i--)
{
    string label = ObjectName(i);
    if(StringSubstr(label, 0, 15) == "StochDivergence")  ObjectDelete(label);  
}
*/

            if(iParm3 !=-100) { IndHead= myName;}
            else 
            {
             IndHead= myName;
            }
            //
            DoHead(IndHead );
            DoWork( myPeriod_1);
            DoShow( myPeriod_1, xStart);
            DoWork( myPeriod_2);
            DoShow( myPeriod_2, xStart2);
            DoWork( myPeriod_3);
            DoShow( myPeriod_3, xStart3);
            DoWork( myPeriod_4);
            DoShow( myPeriod_4, xStart4);
            DoWork( myPeriod_5);
            DoShow( myPeriod_5, xStart5);
            DoWork( myPeriod_6);
            DoShow( myPeriod_6, xStart6);
            WindowRedraw();
//----
            return(0);
           }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
         void DoWork( int myPeriodx )
           {
            int myPeriod=1 ;
/*
if ( Ind_Name_1=="tMid"  ) { cVal = (iHigh(NULL, myPeriod, 0 ) + iLow(NULL, myPeriod, 0 ) ) * 0.5  ; 
                             pVal = (iHigh(NULL, myPeriod, 1 ) + iLow(NULL, myPeriod, 1 ) ) * 0.5  ;  break;}
*/
            while(true)
              {
               iParm3=myPeriodx ;
                 if(iParm3==-100)
                 {
                  cVal=iCustom(NULL,myPeriod,Ind_Name_1,iParm3,iMode,0);
                  pVal=iCustom(NULL,myPeriod,Ind_Name_1,iParm3,iMode,1);
                 break;
                 }
                 if(iParm3!=-100 && iParm4==-100 && iParm5==-100 && iParm6==-100 && iParm7==-100) 
                 {
                  cVal=iCustom(NULL,myPeriod,Ind_Name_1,iParm3,iMode,0);
                  pVal=iCustom(NULL,myPeriod,Ind_Name_1,iParm3,iMode,1);
                 break;
                 }
                 if(iParm3!=-100 && iParm4!=-100 && iParm5==-100 && iParm6==-100 && iParm7==-100) 
                 {
                  cVal=iCustom(NULL,myPeriod,Ind_Name_1,iParm3,iParm4,iMode,0);
                  pVal=iCustom(NULL,myPeriod,Ind_Name_1,iParm3,iParm4,iMode,1);
                 break;
                 }
                 if(iParm3!=-100 && iParm4!=-100 && iParm5!=-100 && iParm6==-100 && iParm7==-100) 
                 {
                  cVal=iCustom(NULL,myPeriod,Ind_Name_1,iParm3,iParm4,iParm5,iMode,0);
                  pVal=iCustom(NULL,myPeriod,Ind_Name_1,iParm3,iParm4,iParm5,iMode,1);
                 break;
                 }
                 if(iParm3!=-100 && iParm4!=-100 && iParm5!=-100 && iParm6!=-100 && iParm7==-100) 
                 {
                  cVal=iCustom(NULL,myPeriod,Ind_Name_1,iParm3,iParm4,iParm5,iParm6,iMode,0);
                  pVal=iCustom(NULL,myPeriod,Ind_Name_1,iParm3,iParm4,iParm5,iParm6,iMode,1);
                 break;
                 }
                 if(iParm3!=-100 && iParm4!=-100 && iParm5!=-100 && iParm6!=-100 && iParm7!=-100) 
                 {
                  cVal=iCustom(NULL,myPeriod,Ind_Name_1,iParm3,iParm4,iParm5,iParm6,iParm7,iMode,0);
                  pVal=iCustom(NULL,myPeriod,Ind_Name_1,iParm3,iParm4,iParm5,iParm6,iParm7,iMode,1);
                 break;
                 }
//----
               break;
              }
            pCount =fDirection( cVal , myPeriodx );
            CloseColor=fColor( pCount);
            PriceDir=fCompass( pCount);
           }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
         void DoDelObj( int lPeriod )
           {
            tObjName01=labelNames +lPeriod +  "XTN950" ;
            tObjName02=labelNames +lPeriod +  "XTN951" ;
            tObjName03=labelNames +lPeriod +  "XTN952" ;
            //tObjName04 = labelNames +  "XIN900" ;
            tObjName05=labelNames +lPeriod +  "XTN955" ;
            ObjectDelete(tObjName01);
            ObjectDelete(tObjName02);
            ObjectDelete(tObjName03);
            ObjectDelete(tObjName04);
            ObjectDelete(tObjName05);
           }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
         void DoShow( int lPeriod , int xInc)
           {
            tObjName01=labelNames +lPeriod +  "XTN950" ;
            tObjName02=labelNames +lPeriod +  "XTN951" ;
            tObjName03=labelNames +lPeriod +  "XTN952" ;
            tObjName05=labelNames +lPeriod +  "XTN955" ;
            tPeriod=lPeriod  ;
            //
            ObjectCreate(tObjName01, OBJ_LABEL, win, 0, 0);//HiLow LABEL
            ObjectSetText(tObjName01, tPeriod, myFontSize, myFont, CloseColor );
            ObjectSet(tObjName01, OBJPROP_CORNER, 0);
            ObjectSet(tObjName01, OBJPROP_XDISTANCE,  xInc+980+price.x.offset); // 760
            ObjectSet(tObjName01, OBJPROP_YDISTANCE, 175+price.y.offset); // 160
            int sInc=0 ;
              if(show.arrow)
              {
               sInc=50 ;
               ObjectCreate(tObjName03, OBJ_LABEL, win, 0, 0);//HiLow LABEL
               ObjectSetText(tObjName03, PriceDir , myArrowSize , "Wingdings" , CloseColor );
               ObjectSet(tObjName03, OBJPROP_CORNER, 0);
               ObjectSet(tObjName03, OBJPROP_XDISTANCE, xInc+980+price.x.offset); // 765
               ObjectSet(tObjName03, OBJPROP_YDISTANCE, 210+price.y.offset);
              } //if(show.arrow)
              if(show.value)
              {
               ObjectCreate(tObjName05, OBJ_LABEL, win, 0, 0);//HiLow LABEL
               ObjectSetText(tObjName05, DoubleToStr(cVal,0) ,myDigitSize, myFont , CloseColor );
               ObjectSet(tObjName05, OBJPROP_CORNER, 0);
               ObjectSet(tObjName05, OBJPROP_XDISTANCE, xInc+980+price.x.offset); // 765
               ObjectSet(tObjName05, OBJPROP_YDISTANCE, sInc+210+price.y.offset);
              } //if(show.value)
           }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
         void DoHead( string dHead )
           {
            tObjName04=labelNames +  "XIN900" ;
            ObjectCreate(tObjName04, OBJ_LABEL, win, 0, 0);//HiLow LABEL
            ObjectSetText(tObjName04, dHead, myFontSize, myFont, myIndColor );
            ObjectSet(tObjName04, OBJPROP_CORNER, 0);
            ObjectSet(tObjName04, OBJPROP_XDISTANCE,  00+price.x.offset); // 760
            ObjectSet(tObjName04, OBJPROP_YDISTANCE, 210+price.y.offset); // 160
           }
         //+------------------------------------------------------------------+ 
         // string next() { totalLabels++; return(totalLabels); }  
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
         string MakeUniqueName(string first, string rest)
           {
            string result=first+(MathRand()%1001)+rest;
            while(WindowFind(result)> 0)
               result=first+(MathRand()%1001)+rest;
            return(result);
           }
//+------------------------------------------------------------------+



Sample





Analysis



Market Information Used:

Series array that contains the highest prices of each bar
Series array that contains the lowest prices of each bar


Indicator Curves created:


Indicators Used:




Custom Indicators Used:
Ind_Name_1

Order Management characteristics:

Other Features: