//+------------------------------------------------------------------+
//|                                                  SQ9 (Price).mq4 |
//|                                  Copyright © 2006, Matt Trigwell |
//|                                                                  |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2006, Matt Trigwell"
#property link      "m.trigwell@gmail.com" //  then hacked around by deanz.
#property indicator_chart_window
int       line_spacing_multiplier=0;
extern int        levels__to=360;
extern int        lines_every=90;
extern double     factorNumber=0.5;
//extern color     line_Color=CLR_NONE;
 extern color     line_Color=White;
extern int       line_Style_choose_from_0_to_4=0;
extern int       font_size=9;
bool      is_this_the_HIGH_price=true;
int init()
{
   return(0);
}
int deinit()
{
   double AngleIndex_V=0;
   string AngleName_V="";
   for(AngleIndex_V=0;AngleIndex_V<=levels__to;AngleIndex_V=AngleIndex_V+lines_every)
   {
      AngleName_V = "Angle_V" + AngleIndex_V;
      ObjectDelete(AngleName_V + " Label");
      ObjectDelete(AngleName_V + " Line");
   }
   
   return(0);
}
int start()
{
double    the_High_or_Low_Price=0;   
   double AngleIndex_V=0;
   string AngleName_V="";
   double FactorIndex=0;
   double AnglePriceLevel=0;
   int Index=0;
   string strLabel="";
   
if(ObjectFind("1")!=-1)
   {
   line_spacing_multiplier=1000000;
   the_High_or_Low_Price = iLow(0, 0, iBarShift(NULL, 0, ObjectGet("1", OBJPROP_TIME1))); 
   is_this_the_HIGH_price=false;
   }
   
if(ObjectFind("2")!=-1)
   {
   line_spacing_multiplier=100000;
   the_High_or_Low_Price = iLow(0, 0, iBarShift(NULL, 0, ObjectGet("2", OBJPROP_TIME1))); 
   is_this_the_HIGH_price=false;
   }
   
 //  High
   
if(ObjectFind("3")!=-1)
   {
   line_spacing_multiplier=10000;
   the_High_or_Low_Price = iLow(0, 0, iBarShift(NULL, 0, ObjectGet("3", OBJPROP_TIME1))); 
   is_this_the_HIGH_price=false;
   }
   
if(ObjectFind("4")!=-1)
   {
   line_spacing_multiplier=1000;
   the_High_or_Low_Price = iLow(0, 0, iBarShift(NULL, 0, ObjectGet("4", OBJPROP_TIME1)));  
   is_this_the_HIGH_price=false;
   }
   
if(ObjectFind("5")!=-1)
   {
   line_spacing_multiplier=100;
   the_High_or_Low_Price = iLow(0, 0, iBarShift(NULL, 0, ObjectGet("5", OBJPROP_TIME1))); 
   is_this_the_HIGH_price=false;
   }
   
if(ObjectFind("6")!=-1)
   {
   line_spacing_multiplier=10;
   the_High_or_Low_Price = iLow(0, 0, iBarShift(NULL, 0, ObjectGet("6", OBJPROP_TIME1))); 
   is_this_the_HIGH_price=false;
   }
   
                  
 ////////////////////////////////////////////////////////////////  
   
   
   
if(ObjectFind("-1")!=-1)
   {
   line_spacing_multiplier=1000000;
   the_High_or_Low_Price = iHigh(0, 0, iBarShift(NULL, 0, ObjectGet("-1", OBJPROP_TIME1))); 
   is_this_the_HIGH_price=true;
   }
if(ObjectFind("-2")!=-1)
   {
   line_spacing_multiplier=100000;
   the_High_or_Low_Price = iHigh(0, 0, iBarShift(NULL, 0, ObjectGet("-2", OBJPROP_TIME1))); 
   is_this_the_HIGH_price=true;
   }
   
   
if(ObjectFind("-3")!=-1)
   {
   line_spacing_multiplier=10000;
   the_High_or_Low_Price = iHigh(0, 0, iBarShift(NULL, 0, ObjectGet("-3", OBJPROP_TIME1))); 
   is_this_the_HIGH_price=true;
   }
   
if(ObjectFind("-4")!=-1)
   {
   line_spacing_multiplier=1000;
   the_High_or_Low_Price = iHigh(0, 0, iBarShift(NULL, 0, ObjectGet("-4", OBJPROP_TIME1))); 
   is_this_the_HIGH_price=true;
   }
   
if(ObjectFind("-5")!=-1)
   {
   line_spacing_multiplier=100;
   the_High_or_Low_Price = iHigh(0, 0, iBarShift(NULL, 0, ObjectGet("-5", OBJPROP_TIME1))); 
   is_this_the_HIGH_price=true;
   }
   
 if(ObjectFind("-6")!=-1)
   {
   line_spacing_multiplier=10;
   the_High_or_Low_Price = iHigh(0, 0, iBarShift(NULL, 0, ObjectGet("-6", OBJPROP_TIME1))); 
   is_this_the_HIGH_price=true;
   }
   
              
   for(AngleIndex_V=0;AngleIndex_V<=levels__to;AngleIndex_V=AngleIndex_V+lines_every)
   {
      AnglePriceLevel = CalculateSquare(FactorIndex,the_High_or_Low_Price);
      
      //Trim Zero's
      if(Index==1)
      {
         strLabel = DoubleToStr(AngleIndex_V,1);
      }
      else
      {
         strLabel = DoubleToStr(AngleIndex_V,0);
      }
      
      AngleName_V = "Angle_V" + AngleIndex_V;
      
      
      if(ObjectFind(AngleName_V + " Line") != 0)
      {
         ObjectCreate(AngleName_V + " Line", OBJ_HLINE, 0, Time[40], AnglePriceLevel);
         ObjectSet(AngleName_V + " Line", OBJPROP_STYLE, line_Style_choose_from_0_to_4);
         
         if(MathMod(Index,2) == 0)
         {
            ObjectSet(AngleName_V + " Line", OBJPROP_COLOR, line_Color);
         }
         else
         {
             ObjectSet(AngleName_V + " Line", OBJPROP_COLOR, line_Color);
         }
      }
      else
      {
         ObjectMove(AngleName_V + " Line", 0, Time[40], AnglePriceLevel);
      }
   
      if(ObjectFind(AngleName_V + " Label") != 0)
      {
         ObjectCreate(AngleName_V + " Label", OBJ_TEXT, 0, Time[20], AnglePriceLevel);
         
         if(MathMod(Index,2) == 0)
         {
            ObjectSetText(AngleName_V + " Label", strLabel + "°", font_size, "Arial", line_Color);
            
         }
         else
         {
             ObjectSetText(AngleName_V + " Label", strLabel + "°", font_size, "Arial", line_Color);
         }  
      }
      else
      {
         ObjectMove(AngleName_V + " Label", 0, Time[20], AnglePriceLevel);
      }
      
      FactorIndex = FactorIndex + factorNumber;
      Index = Index + 1;
   }
   return(0);
}
double CalculateSquare(double Factor, double Price)
{
   double AnglePrice=0;
  if(Price > 0)
   {
   
      if(StringFind(Symbol(),"JPY",0) >= 0) // JPY pairs.
      {
         Price = Price * line_spacing_multiplier;
         Price = Price  / 100;
      }
      
      else if(StringFind(Symbol(),"GOLD",0) >= 0)
      {
         Price = Price * line_spacing_multiplier;
         Price = Price  / 1000;
      }   
      
      else
      {
         Price = Price * line_spacing_multiplier;
         
      }
            
      if(is_this_the_HIGH_price==false)
      {
         AnglePrice = MathPow(MathSqrt(Price) + Factor,2);
      }
      else
      {
         AnglePrice = MathPow(MathSqrt(Price) - Factor,2);
      }
   
      if(StringFind(Symbol(),"JPY",0) >= 0)
      {
         AnglePrice = AnglePrice / line_spacing_multiplier;
         AnglePrice = AnglePrice  * 100;
         }
            
       else if(StringFind(Symbol(),"GOLD",0) >= 0)
      {
         AnglePrice = AnglePrice / line_spacing_multiplier;
         AnglePrice = AnglePrice  * 1000;
      }  
                
      else
      {
         AnglePrice = AnglePrice / line_spacing_multiplier;
      }
   
   }
   
   return(AnglePrice);
 
} 
             
            
            
            
Comments