Square of Nine





//+------------------------------------------------------------------+
//|                                               Square of Nine.mq4 |
//|                                  Copyright © 2006, Matt Trigwell |
//|                                                                  |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2006, Matt Trigwell"
#property link      "m.trigwell@gmail.com"

#property indicator_chart_window


extern double    StartPrice=0;
extern bool      Direction_Up=true;
extern color     Angle_Color=Yellow;


   

int init()
{

   return(0);
}

int deinit()
{
   int AngleIndex=0;
   string AngleName="";
   
   for(AngleIndex=45;AngleIndex<=720;AngleIndex=AngleIndex+45)
   {
      AngleName = "Angle_" + AngleIndex;
      ObjectDelete(AngleName + " Label");
      ObjectDelete(AngleName + " Line");
   }
   
   return(0);
}

int start()
{
   int AngleIndex=0;
   string AngleName="";
   double FactorIndex=0.25;
   double AnglePriceLevel=0;

   for(AngleIndex=45;AngleIndex<=720;AngleIndex=AngleIndex+45)
   {
      AnglePriceLevel = CalculateSquare(FactorIndex,StartPrice);
      AngleName = "Angle_" + AngleIndex;
      
      if(ObjectFind(AngleName + " Line") != 0)
      {
         ObjectCreate(AngleName + " Line", OBJ_HLINE, 0, Time[40], AnglePriceLevel);
         ObjectSet(AngleName + " Line", OBJPROP_STYLE, STYLE_DASHDOTDOT);
         ObjectSet(AngleName + " Line", OBJPROP_COLOR, Angle_Color);
      }
      else
      {
         ObjectMove(AngleName + " Line", 0, Time[40], AnglePriceLevel);
      }
   
      if(ObjectFind(AngleName + " Label") != 0)
      {
         ObjectCreate(AngleName + " Label", OBJ_TEXT, 0, Time[20], AnglePriceLevel);
         ObjectSetText(AngleName + " Label", AngleIndex + " Degrees", 8, "Arial", EMPTY);
      }
      else
      {
         ObjectMove(AngleName + " Label", 0, Time[0], AnglePriceLevel);
      }
      
      FactorIndex = FactorIndex + 0.25;
   }

   return(0);
}






double CalculateSquare(double Factor, double Price)
{
   double AnglePrice=0;
   
   if(Price > 0)
   {
   
      if(StringFind(Symbol(),"JPY",0) == -1)
      {
         Price = Price * 10000;
      }
      else
      {
         Price = Price * 100;
      }
            
      if(Direction_Up==true)
      {
         AnglePrice = MathPow(MathSqrt(Price) + Factor,2);
      }
      else
      {
         AnglePrice = MathPow(MathSqrt(Price) - Factor,2);
      }
   
      if(StringFind(Symbol(),"JPY",0) == -1)
      {
         AnglePrice = AnglePrice / 10000;
      }
      else
      {
         AnglePrice = AnglePrice / 100;
      }
   
   }
   
   return(AnglePrice);
 
}





Sample





Analysis



Market Information Used:

Series array that contains open time of each bar


Indicator Curves created:


Indicators Used:



Custom Indicators Used:

Order Management characteristics:

Other Features: