//+------------------------------------------------------------------+
//|                                           Set_Fibo_Price_Any.mq4 |
//|                              Copyright © 2007, Eng. Waddah Attar |
//|                                          waddahattar@hotmail.com |
//|                                                                  |
//| 2007.02.16  V1 original by waddhattar                            |
//| 2007.10.31  V2 by pips4life                                      |
//+------------------------------------------------------------------+
//
// This handy indicator adds price info to Fibo Retrracement and Expansion
//   levels on your chart.  For example:  "61.8" becomes  "61.8  234.67"
//   (compact format "2"), or instead, "(61.8) - 234.67" (original format "1").
//
//  Version history for Set_Fibo_Price_Any:
//  2007.02.16 V1 (waddahattar)  Original release.  Downloaded from:
//     http://codebase.mql4.com/1003
//  2007.10.31 V2 (pips4life, http://forexfactory.com):
//   - Added Fib Expansion objects
//   - Added TextStyle property to give user a choice of the 
//        original format, or a slightly more compact description
//
//
// Instructions:
//   Copy this mq4 file into directory:
//      C:\Program Files\_your_MT4_name_here\experts\indicators\
//   Open the file using MetaEditor
//   Change the TextStyle default if desired. See below for description
//   Compile the file.  This will create the .ex4 file in the same directory.
//   Add the indicator to your chart.  All Fibo Retracement or Expansion
//      objects you have, or that you add to the chart later, will 
//      automatically show the price as well as the level
//     (Note: Prices will show after the first new tick).
//   It so happens that when you add Fibo objects to new charts, you *may*
//     not need to add this indicator to every chart, because it essentially
//     creates a new default for the fibo objects.  However, existing Fibo
//     ojects may still have the old format until you specifically add this
//     indicator to that chart (or delete the chart and start over).  Safest
//     would be to just add it to every chart, but this is not always 
//     necessary, and it might waste a bit of CPU to do so.  Experiment for
//     yourself.
//
//   FYI, the "_Any" in the name refers to the fact that you can add
//      any custom fibo level (e.g. 85.4) and this version will still add
//      the price to that level.  A previous version only worked with the
//      standard default fibo levels; hence "_Any" was added to the name. 
//


#property copyright "Copyright Waddah Attar"
#property link      "waddahattar@hotmail.com"
//----
#property indicator_chart_window

extern int TextStyle = 2 ;
//   0 = Plain format.  no prices:  61.8
//   1 = Waddah's original style:  (61.8) - 234.67
//   2 = compact style:   61.8  234.67


//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int init()
  {
   Comment("Set_Fibo_Price_Any_V2");
   return(0);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int deinit()
  {
   int obj_total = ObjectsTotal();
   int i, j;
   string name;
   for(i = 0; i < obj_total; i++)
     {
       name = ObjectName(i);
       if(ObjectType(name) == OBJ_FIBO)
         {
          for( j=0 ; j<32 ; j++ )
            { 
              if(GetLastError() != 0) 
                break;
              ObjectSetFiboDescription(name, j, DoubleToStr(ObjectGet(name, 
                                       OBJPROP_FIRSTLEVEL + j)*100, 1));
            }
         }
         else if(ObjectType(name) == OBJ_EXPANSION)
         {
          for( j=0 ; j<32 ; j++ )
            {
              if(GetLastError() != 0) 
                break;
              ObjectSetFiboDescription(name, j, "FE " + DoubleToStr(ObjectGet(name, 
                                       OBJPROP_FIRSTLEVEL + j)*100, 1));
            }
         } 
     }
   Comment("");
   return(0);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int start()
  {
   int    obj_total = ObjectsTotal();
   string name,text;
   int i, j;
   for(i = 0; i < obj_total; i++)
     {
       name = ObjectName(i);
       if(ObjectType(name) == OBJ_FIBO)
         {
           for(j = 0; j < 32; j++)
             {
               if(GetLastError() != 0) 
                 break;
               switch (TextStyle)
               {
                 case 2 :
                   // Style 2 example is:  61.8  234.67
                   ObjectSetFiboDescription(name, j, DoubleToStr(ObjectGet(name,
                                        OBJPROP_FIRSTLEVEL+j)*100,1) + "  %$");
                   break;
                 case 0 :
                   // Style 0 example is:  61.8
                   ObjectSetFiboDescription(name, j, DoubleToStr(ObjectGet(name,
                                        OBJPROP_FIRSTLEVEL+j)*100,1));
                   break;
                 default:
                   // default, or style 1.  Example:  (61.8) - 234.67
                   ObjectSetFiboDescription(name, j, "(" + DoubleToStr(ObjectGet(name,
                                        OBJPROP_FIRSTLEVEL+j)*100,1) + ")" + " - %$");
               }
             }
         } else if(ObjectType(name) == OBJ_EXPANSION)
         {
           for(j = 0; j < 32; j++)
             {
               if(GetLastError() != 0) 
                 break;
               switch (TextStyle)
               {
                 case 2 :
                   // Style 2 example is:  FE 61.8  234.67
                   ObjectSetFiboDescription(name, j, "FE " + DoubleToStr(ObjectGet(name,
                                        OBJPROP_FIRSTLEVEL+j)*100,1) + "  %$");
                   break;
                 case 0 :
                   // Style 0 example is:  FE 61.8
                   ObjectSetFiboDescription(name, j, "FE " + DoubleToStr(ObjectGet(name,
                                        OBJPROP_FIRSTLEVEL+j)*100,1));
                   break;
                 default:
                   // default, or style 1.  Example:  FE (61.8) - 234.67
                   ObjectSetFiboDescription(name, j, "FE (" + DoubleToStr(ObjectGet(name,
                                        OBJPROP_FIRSTLEVEL+j)*100,1) + ")" + " - %$");
               }
             }
         }
     }
//----   
   return(0);
  }
//+------------------------------------------------------------------+


