//+------------------------------------------------------------------+
//| 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