//+------------------------------------------------------------------+
//|                                                          Lib.mq4 |
//|                                             Komgrit Sungkhaphong |
//|                               http://iamforextrader.blogspot.com |
//+------------------------------------------------------------------+
#property copyright "Komgrit Sungkhaphong"
#property link      "http://iamforextrader.blogspot.com"

//+------------------------------------------------------------------+
//| My function                                                      |
//+------------------------------------------------------------------+
// int MyCalculator(int value,int value2)
//   {
//    return(value+value2);
//   }
//+------------------------------------------------------------------+
//+---function pts(n)------------------------------------------------+
double pts(int number)
{
   return(number*Point);
}

double pips(int number)
{
   return(number*Point*10);
}

//int pnts(string _symbol,double price)
//{
//   return((int)price*MathPow(10,MarketInfo(_symbol,MODE_DIGITS)));   
//}

double CandleRange(int bar=5)
{
   return(HP(bar)-LP(bar));
}

//+--functions HP(), LP()--------------------------------------------+
//return Highest or Lowest value from previous n bars 
//e.g. HP(5) would return highest HIGH value of last 5 bars
//e.g. LP(5) would return lowest LOW value of last 5 bars
double HP(int bar=5,int start=1)
{
   return(High[iHighest(Symbol(),0,MODE_HIGH,bar,start)]);
}

double LP(int bar=5, int start=1)
{
   return(Low[iLowest(Symbol(),0,MODE_LOW,bar,start)]);
}
//+--functions HLP(), LHP()------------------------------------------+
//return Highest or Lowest value of LOW or HIGH from previous n bars 
//e.g. HLP(5) would return highest LOW value of last 5 bars
//e.g. LHP(5) would return lowest HIGH value of last 5 bars
double HLP(int bar=5,int start=1)
{
   return(Low[iHighest(Symbol(),0,MODE_HIGH,bar,start)]);
}

double LHP(int bar=5, int start=1)
{
   return(High[iLowest(Symbol(),0,MODE_HIGH,bar,start)]);
}



//bool IsNewBar(int period=60)
//{
//   int bar;
//   if(iBars(NULL,period)>bar)
//   {
//      return(true);
//      bar=iBars(NULL,period);
//   }
//   return(false);
//}


//+----------------------------------------------+
// funciton Gap(..)
//+----------------------------------------------+
// returns the absolute distance in points between two price of specfied Symbol
//int Gap(string symbol,double p1, double p2)
//{
//   int digit=(int)MarketInfo(symbol,MODE_DIGITS);
//   double gap;
//   int gappts;
//   gap=MathAbs(p1-p2);
//   gappts=gap*MathPow(10,digit);
//   return(gappts);
//}


double GetSlope(double& array[])
{
   //using linear regression method
   double slope_TF1=0;
   int N=0;
   double sumX=0,sumY=0;
   double xbar=0,ybar=0;
   double sumXY=0,sumXpow=0;
   
   N=ArraySize(array);
   //calculate X-bar   
   //calculate Y-bar
   //calculate sum or XiYi   
   //calculate N*X-bar*Y-Bars   
   //calculate sum of Xi^2   
   //calcuate N*X-bar^2   
   for(int i=0;i<N;i++)
   {
      sumX=sumX+i;
      sumY=sumY+array[i];
      
      sumXY=sumXY+(i*array[i]);
      sumXpow=sumXpow+(MathPow(i,2));
   }
   xbar=sumX/N;
   ybar=sumY/N;

   slope_TF1=(sumXY-N*xbar*ybar)/(sumXpow-N*MathPow(xbar,2));
   return(-slope_TF1);
}

//close[x] to last high
//return distnace in decimal
double CH(int n)
{
   return(Close[n]-High[1]);
}

//close[x] to last low
//return distnace in decimal
double CL(int n)
{
   return(Close[n]-Low[1]);
}