//+------------------------------------------------------------------+
//|                                        Brooky_Psar_Levels_V2.mq4 |
//|                     Copyright � 2010, www.Brooky-Indicators.com. |
//|                             http://www.www.Brooky-Indicators.com |
//+------------------------------------------------------------------+
#property copyright "Copyright � 2010, www.Brooky-Indicators.com."
#property link      "http://www.www.Brooky-Indicators.com"
extern string Hello_From = " www.Brooky-Indicators.com ";

#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 DarkOrange
#property indicator_color2 DodgerBlue

#property indicator_width1 2
#property indicator_width2 2
#import "shell32.dll"
int ShellExecuteA(int hwnd,string lpOperation, string lpFile,string lpParameters,string lpDirectory,int nShowCmd );
#import
//---- input parameters
extern int          bars_back = 240;
extern double       sar_step = 0.006;
extern double       sar_max = 0.03;
extern int          level_style = 0;
extern int          price_size = 2;
extern color        lowpsar =  DodgerBlue;
extern color        hipsar = DarkOrange;
extern bool          show_psar = true;
extern bool          see_price = false;

//--- netlink
extern bool   Check_Latest = true;
extern string Your_Internet_Browser = "iexplore.exe";//iexplore.exe
extern int    Link_Corner = 2;
extern int    Link_Offset = 20;

string              indi = "Brooky-Psar V2";

//---- buffers
double plow[];
double phi[];

string book = "www.Brooky-Indicators.com.Updates.";//
string bookrg = "www.brooky-indicators.com/products-page/";//

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   SetIndexStyle(0,DRAW_ARROW);
   SetIndexArrow(0,158);
   SetIndexBuffer(0,plow);
   SetIndexEmptyValue(0,0.0);
   
   SetIndexStyle(1,DRAW_ARROW);
   SetIndexArrow(1,158);
   SetIndexBuffer(1,phi);
   SetIndexEmptyValue(1,0.0);
   
   IndicatorShortName(indi);
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   ObjectDelete(book);
   ObjectDelete(bookrg);
   ObjectsDeleteAll(0, OBJ_HLINE);
     Comment("");
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
  int start()
    {
     int limit;
     int counted_bars=IndicatorCounted();
  //---- check for possible errors
     if(counted_bars<0) return(-1);
  //---- the last counted bar will be recounted
     if(counted_bars>0) counted_bars--;
     limit=Bars-counted_bars;

     if(limit>bars_back)limit=bars_back;
  //---- main loop
     double mysarnow,myopen,mysarb4,myopenb4, mysarnow2,myopen2,mysarb42,myopenb42;
 

     for(int i=0; i<limit; i++)
       {


     string bardelete = TimeToStr(iTime(NULL,0,i));
     string firstbardelete = TimeToStr(iTime(NULL,0,bars_back));
     //Comment("firstbardelete  ",firstbardelete);
     
     ObjectDelete(indi+"Sup"+firstbardelete);
     ObjectDelete(indi+"Res"+firstbardelete);
     ObjectDelete(indi+"aUp"+firstbardelete);
     ObjectDelete(indi+"aDn"+firstbardelete);

  
 
        mysarnow = iSAR(NULL,0,sar_step,sar_max,i);
        mysarb4 = iSAR(NULL,0,sar_step,sar_max,i+1);
        mysarb42 = iSAR(NULL,0,sar_step,sar_max,i+2);
        
        myopen = iOpen(NULL,0,i);
        myopenb4 = iOpen(NULL,0,i+1);
        myopenb42 = iOpen(NULL,0,i+2);

        if(mysarnow>=myopen && mysarb4<myopenb4)
         {
                     plow[i]=mysarnow;
              	      string  res = indi+"Res"+bardelete;
                     ObjectCreate(res, OBJ_HLINE, 0, Time[i], mysarnow);
                     ObjectSet(res, OBJPROP_STYLE, level_style);
                     ObjectSet(res, OBJPROP_COLOR,hipsar);
                     ObjectSet(res, OBJPROP_RAY,1);


              	      string  res2 = indi+"Res2"+bardelete;
                     ObjectCreate(res2, OBJ_HLINE, 0, Time[i], mysarb4);
                     ObjectSet(res2, OBJPROP_STYLE, level_style);
                     ObjectSet(res2, OBJPROP_COLOR,hipsar);
                     ObjectSet(res2, OBJPROP_RAY,1);
                                          
                     
                    if(see_price){ 
                     string named = indi+"aDn"+bardelete;

                     ObjectCreate(named,OBJ_ARROW, 0, Time[i], mysarnow);
                     ObjectSet(named, OBJPROP_STYLE, STYLE_SOLID);
                     ObjectSet(named, OBJPROP_ARROWCODE, 5);
                     ObjectSet(named, OBJPROP_COLOR,hipsar);
                     ObjectSet(named, OBJPROP_WIDTH,price_size);
                     }
                     
         }else if(show_psar){plow[i]=iSAR(NULL,0,sar_step,sar_max,i);}else plow[i]=0.0;
        
        
        
        if(mysarnow<=myopen && mysarb4>myopenb4)
        {

                     phi[i]=mysarnow;
              	      string sup = indi+"Sup"+bardelete;            	      
                     ObjectCreate(sup, OBJ_HLINE, 0, Time[i], mysarnow);
                     ObjectSet(sup, OBJPROP_STYLE, level_style);
                     ObjectSet(sup, OBJPROP_COLOR,lowpsar);
                     ObjectSet(sup, OBJPROP_RAY,1);
                     
              	      string sup2 = indi+"Sup2"+bardelete;            	      
                     ObjectCreate(sup2, OBJ_HLINE, 0, Time[i], mysarb4);
                     ObjectSet(sup2, OBJPROP_STYLE, level_style);
                     ObjectSet(sup2, OBJPROP_COLOR,lowpsar);
                     ObjectSet(sup2, OBJPROP_RAY,1);                     
                     
                     
                     
         if(see_price){
                     string nameu = indi+"aUp"+bardelete;
                     
                     ObjectCreate(nameu,OBJ_ARROW, 0, Time[i], mysarnow);
                     ObjectSet(nameu, OBJPROP_STYLE, STYLE_SOLID);
                     ObjectSet(nameu, OBJPROP_ARROWCODE, 5);
                     ObjectSet(nameu, OBJPROP_COLOR,lowpsar);
                     ObjectSet(nameu, OBJPROP_WIDTH,price_size);
               }
               
         }else if(show_psar && iSAR(NULL,0,sar_step,sar_max,i) < Low[i]){phi[i]=iSAR(NULL,0,sar_step,sar_max,i);}else phi[i]=0.0;
         

       }
if(Check_Latest==true){
   if (ObjectFind(book) == -1)
      {
         ObjectCreate(book, OBJ_LABEL, 0, 0, 0);
         ObjectSet(book, OBJPROP_BACK, 0);
         ObjectSet(book, OBJPROP_CORNER, Link_Corner);
         ObjectSet(book, OBJPROP_XDISTANCE, Link_Offset);
         ObjectSet(book, OBJPROP_YDISTANCE, Link_Offset);
         ObjectSetText(book,CharToStr(255),40,"Wingdings",DodgerBlue);
         
         ObjectCreate(bookrg, OBJ_LABEL, 0, 0, 0);
         ObjectSet(bookrg, OBJPROP_BACK, 0);
         ObjectSet(bookrg, OBJPROP_CORNER, Link_Corner);
         ObjectSet(bookrg, OBJPROP_XDISTANCE, Link_Offset-10);
         ObjectSet(bookrg, OBJPROP_YDISTANCE, Link_Offset-10);
         ObjectSetText(bookrg,"Move Flag To Check Latest Brooky Indis",8,"Times New Roman",DodgerBlue);         
      }
 
   if (ObjectFind(book) != -1 && ObjectGet(book, OBJPROP_XDISTANCE)!=Link_Offset && dNewBar(1))
            
   {
      ObjectSet(book, OBJPROP_CORNER, Link_Corner);
      ObjectSet(book, OBJPROP_XDISTANCE, Link_Offset);
      ObjectSet(book, OBJPROP_YDISTANCE, Link_Offset);
      
      ShellExecuteA(0,"Open",Your_Internet_Browser,bookrg,"",5);
      
      ObjectSet(book, OBJPROP_CORNER, Link_Corner);
      ObjectSet(book, OBJPROP_XDISTANCE, Link_Offset);
      ObjectSet(book, OBJPROP_YDISTANCE, Link_Offset);
      //WindowRedraw();
   }
   }
     return(0);
    }
//+------------------------------------------------------------------+

//----------------
bool dNewBar(int ddelay)
{
   static datetime dlastbar;
   datetime dcurbar = TimeLocal();
 
   if((dcurbar-dlastbar)>ddelay)
   {
      dlastbar=dcurbar;
      return (true);
   }
   else
   {
      return(false);
   }
}