//+------------------------------------------------------------------+
//|                                             Gravity Levels 2.mq4 |
//|   Copyright © 2008, Nicholas Barker | Apex Group Investments LLC |
//|                                                  nick@barker.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2008, Nicholas Barker | Apex Group Investments LLC"
#property link      "nick@barker.net"
#define HIGH 345
#define LOW 3455
#define GU 0
#define EU 1
#define EG 2
#property indicator_chart_window
#property indicator_buffers 6
#property indicator_color1 White
#property indicator_color2 White
#property indicator_color3 Pink
#property indicator_color4 Pink
#property indicator_color5 Magenta
#property indicator_color6 Magenta
//#property indicator_color7 Gold
//---- buffers
string Sym[]={"GBPUSD","EURUSD","EURGBP"};
string pairs[14][3]={
"EURJPY","EURAUD","AUDJPY",//1 d
"EURJPY","EURCHF","CHFJPY",//6 h, inv
"EURJPY","EURGBP","GBPJPY",//12 inv
"EURJPY","EURUSD","USDJPY",//14
"AUDJPY","AUDUSD","USDJPY",//2 d
                "EURUSD","EURAUD","AUDUSD",//3 d
                "EURUSD","EURGBP","GBPUSD",//13
"USDJPY","USDCHF","CHFJPY",//8 
"GBPJPY","GBPCHF","CHFJPY",//7 inv
"GBPJPY","GBPUSD","USDJPY",//14
                 "EURCAD","EURUSD","USDCAD",//9 inv
"EURCHF","EURGBP","GBPCHF",//10 inv
"EURCHF","EURUSD","USDCHF",//11 inv
"GBPCHF","GBPUSD","USDCHF",//15
//"USDJPY","USDCAD","CADJPY",// inv
//"EURJPY","EURCAD","CADJPY",//4 d
};
double ExtMapBuffer1[];
double ExtMapBuffer2[];
double ExtMapBuffer3[];
double ExtMapBuffer4[];
double ExtMapBuffer5[];
double ExtMapBuffer6[];
//double ExtMapBuffer7[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   SetIndexStyle(0,DRAW_LINE,STYLE_SOLID,3);
   //SetIndexArrow(0,159);
   SetIndexBuffer(0,ExtMapBuffer1);
   SetIndexEmptyValue(0,0.0);
   SetIndexStyle(1,DRAW_LINE,STYLE_SOLID,3);
   //SetIndexArrow(1,159);
   SetIndexBuffer(1,ExtMapBuffer2);
   SetIndexEmptyValue(1,0.0);
   SetIndexStyle(2,DRAW_LINE,STYLE_SOLID,3);
   //SetIndexArrow(0,159);
   SetIndexBuffer(2,ExtMapBuffer3);
   SetIndexEmptyValue(2,0.0);
   SetIndexStyle(3,DRAW_LINE,STYLE_SOLID,3);
   //SetIndexArrow(1,159);
   SetIndexBuffer(3,ExtMapBuffer4);
   SetIndexEmptyValue(3,0.0);
   SetIndexStyle(4,DRAW_LINE,STYLE_SOLID,3);
   //SetIndexArrow(0,159);
   SetIndexBuffer(4,ExtMapBuffer5);
   SetIndexEmptyValue(4,0.0);
   SetIndexStyle(5,DRAW_LINE,STYLE_SOLID,3);
   //SetIndexArrow(1,159);
   SetIndexBuffer(5,ExtMapBuffer6);
   SetIndexEmptyValue(5,0.0);
  
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int getrings(int& set[]){
   int c;
   for(int i=0;i<14;i++){
      for(int y=0;y<3;y++){
         if(pairs[i][y]==Symbol()){
            c++;
            ArrayResize(set,c);
            set[c-1]=i+1;
            Print("rings in play = ",i);
            break;
         }
      }
   }
   return(c);
}
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int getPos(int use){
   use-=1;
   for(int i=0;i<3;i++){
      if(Symbol()==pairs[use][i])return(i);
   }
   return(-1);
}
int start()
  {
   int    counted_bars=IndicatorCounted();
//----
   double get[]={0,100};
   double fibs[3][2];
   int use[];
   getrings(use);
   
  // int z;
  // if(Symbol()=="EURUSD")z=EU;   
  // if(Symbol()=="GBPUSD")z=GU; 
  // if(Symbol()=="EURGBP")z=EG; 
   //=ROUND(1/((1/B4)*B2),4)
   for(int p=0;p<3;p++){
      if(use[p]<=0 || use[p]==EMPTY_VALUE)continue;
      int pos=getPos(use[p]);
      for(int i=0;i<Bars-counted_bars;i++){
         datetime time=Time[i];
         getFibs(get,fibs,time,use[p]);
         if(pos==0){
            if(p==0){
               ExtMapBuffer1[i]=NormalizeDouble(fibs[1][0]*fibs[2][0],Digits);
               ExtMapBuffer2[i]=NormalizeDouble(fibs[1][1]*fibs[2][1],Digits);
            }
            if(p==1){
               ExtMapBuffer3[i]=NormalizeDouble(fibs[1][0]*fibs[2][0],Digits);
               ExtMapBuffer4[i]=NormalizeDouble(fibs[1][1]*fibs[2][1],Digits);
            }
            if(p==2){
               ExtMapBuffer5[i]=NormalizeDouble(fibs[1][0]*fibs[2][0],Digits);
               ExtMapBuffer6[i]=NormalizeDouble(fibs[1][1]*fibs[2][1],Digits);
            }
         }
         if(pos==2){
            if(p==0){
               ExtMapBuffer1[i]=NormalizeDouble(1/((1/fibs[0][0])*fibs[1][0]),Digits); //NormalizeDouble(fibs[GU][0]*fibs[EG][0],Digits);
               ExtMapBuffer2[i]=NormalizeDouble(1/((1/fibs[0][1])*fibs[1][1]),Digits);
            }
            if(p==1){
               ExtMapBuffer3[i]=NormalizeDouble(1/((1/fibs[0][0])*fibs[1][0]),Digits); //NormalizeDouble(fibs[GU][0]*fibs[EG][0],Digits);
               ExtMapBuffer4[i]=NormalizeDouble(1/((1/fibs[0][1])*fibs[1][1]),Digits);
            }
            if(p==2){
               ExtMapBuffer5[i]=NormalizeDouble(1/((1/fibs[0][0])*fibs[1][0]),Digits); //NormalizeDouble(fibs[GU][0]*fibs[EG][0],Digits);
               ExtMapBuffer6[i]=NormalizeDouble(1/((1/fibs[0][1])*fibs[1][1]),Digits);
            }
            
         }
         if(pos==1){
            if(p==0){
               ExtMapBuffer1[i]=NormalizeDouble(1/((1/fibs[0][0])*fibs[2][0]),Digits); //NormalizeDouble(fibs[GU][0]*fibs[EG][0],Digits);
               ExtMapBuffer2[i]=NormalizeDouble(1/((1/fibs[0][1])*fibs[2][1]),Digits);
            }
            if(p==1){
               ExtMapBuffer3[i]=NormalizeDouble(1/((1/fibs[0][0])*fibs[2][0]),Digits); //NormalizeDouble(fibs[GU][0]*fibs[EG][0],Digits);
               ExtMapBuffer4[i]=NormalizeDouble(1/((1/fibs[0][1])*fibs[2][1]),Digits);
            }
            if(p==2){
               ExtMapBuffer5[i]=NormalizeDouble(1/((1/fibs[0][0])*fibs[2][0]),Digits); //NormalizeDouble(fibs[GU][0]*fibs[EG][0],Digits);
               ExtMapBuffer6[i]=NormalizeDouble(1/((1/fibs[0][1])*fibs[2][1]),Digits);
            } 
         } 
      }
      draw(0,ExtMapBuffer1[0]);
      draw(100,ExtMapBuffer2[0]);
      draw(10,ExtMapBuffer3[0]);
      draw(1100,ExtMapBuffer4[0]);
      draw(20,ExtMapBuffer5[0]);
      draw(2100,ExtMapBuffer6[0]);
   }
   string k;
   string col[]={"<<WHITE>>","<<PINK>>","<<MAGENTA>>"};
   for(p=0;p<3;p++){
      k=k+"\n"+col[p];
      for(i =0;i<3;i++){
         k=k+" "+pairs[use[p]-1][i];
      }
   }
   Comment(k);
//----
   return(0);
  }
//+------------------------------------------------------------------+
int getFibs(double use[],double& set[][],datetime time,int ring){
   ring-=1;
   int mode;int c;
   for(int e=0;e<3;e++){
      if(TimeDayOfWeek(time)==1)int s=iBarShift(pairs[ring][e],1440,time-(60*60*24*3));
      else s=iBarShift(pairs[ring][e],1440,time-(60*60*24));
      double range=iHigh(pairs[ring][e],1440,s)-iLow(pairs[ring][e],1440,s);
      //Print(Sym[e],"  ",range);
      if(iClose(pairs[ring][e],1440,s) < iOpen(pairs[ring][e],1440,s) ){
         double startprice=iLow(pairs[ring][e],1440,s);
         mode=LOW;
      }else{
         startprice=iHigh(pairs[ring][e],1440,s);
         mode=HIGH;
      }
      for(int i=0;i<ArraySize(use);i++){
         //ArrayResize(set,i+1);
         if(mode==LOW){
            set[e][i]=NormalizeDouble(startprice+(range*(use[i]/100)),MarketInfo(pairs[ring][e],MODE_DIGITS));
            //Print(Sym[e],"  ",set[e][i]);
         }
         else if (mode==HIGH){
            set[e][i]=NormalizeDouble(startprice-(range*(use[i]/100)),MarketInfo(pairs[ring][e],MODE_DIGITS));
            //Print(Sym[e],"  ",set[e][i]);
         }
         c++;
      }
   }
   if(c<=0)return(-1);
   return(mode);
}
int draw(double n,double t1){
   //for(int i=0;i<ArraySize(n);i++){
      string name = StringConcatenate(n," Line");
      if(ObjectFind(name) != 0){
         ObjectCreate(name, OBJ_HLINE, 0, Time[0],t1);
         ObjectSet(name, OBJPROP_STYLE, STYLE_SOLID);
         ObjectSet(name, OBJPROP_COLOR, White);
      } else {
         ObjectMove(name, 0, Time[0],t1);
      }
   
}
             
            
            
            
Comments