Auto Fibo_Coodonates

Download script
Author: Copyright � 2009, Julien Loutre
Auto Fibo_Coodonates

This automated tool is designed to simplify the technical analysis of financial charts by automatically identifying and plotting Fibonacci retracement levels. Instead of requiring a trader to manually select price peaks and valleys, this script dynamically calculates these coordinates based on historical price action.

How the Logic Works

1. Dynamic Price Tracking The script scans a specific window of recent market history (defined by the "Band Period"). It constantly monitors price fluctuations to determine the highest and lowest points reached during that timeframe. You can choose whether the tool looks at the absolute "High/Low" prices or the "Open/Close" prices of the candles, depending on your preference for accuracy.

2. Automated Trend Detection The tool intelligently distinguishes between upward and downward market trends. It compares current price data against historical data to decide how to orient the Fibonacci levels. By identifying whether the market is currently in a bullish (upward) or bearish (downward) phase, it ensures that the retracement levels are anchored correctly to reflect the most relevant price movement.

3. Real-Time Updates Because the script runs continuously, it updates the Fibonacci object in real-time. As new candles form and prices move, the tool automatically recalculates the boundaries. This means the Fibonacci levels "move" with the market, always staying anchored to the most recent significant price range defined by your settings.

4. Visual Cleanliness The script is designed to manage the chart's visual data efficiently. It places the Fibonacci levels directly on your trading window, providing you with instant visual cues for potential support and resistance zones without the need for constant manual adjustment or complex calculation.

Miscellaneous
Implements a curve of type %1
5 Views
0 Downloads
0 Favorites
Auto Fibo_Coodonates
//+------------------------------------------------------------------+
//|                                         Auto Fibo_Coodonates.mq4 |
//|                                  Copyright © 2009, Julien Loutre |
//|                                         http://www.forexcomm.com |
//+------------------------------------------------------------------+

#property copyright "Copyright © 2009, Julien Loutre"
#property link      "http://www.forexcomm.com"

#property  indicator_chart_window
#property indicator_buffers  2
#property  indicator_color1  LightSkyBlue
#property  indicator_color2  Plum
 
 
 
extern int       Band_Period   = 48;
extern int       price_type    = 0; // 0 = High/Low | 1 = Open/Close
 
 
//---- buffers
double WWBuffer1[];
double WWBuffer2[];
double WWBuffer3[];
 
double ATR;
 
int init() {
   IndicatorBuffers(2);

   SetIndexStyle(0,DRAW_LINE,1);
   SetIndexStyle(1,DRAW_LINE,1);
   
   SetIndexLabel(0, "High");
   SetIndexLabel(1, "Low");
   
   SetIndexBuffer(0, WWBuffer1);
   SetIndexBuffer(1, WWBuffer2);
   
   IndicatorDigits(Digits+2);
   
   IndicatorShortName("Automatic Fibonacci");
   
   ObjectCreate("AutoFibo", OBJ_FIBO, 0, Time[0],High[0],Time[0],Low[0]);
   
   return(0);
}
int deinit() {
   ObjectDelete("AutoFibo");
}
int start() {
   int    counted_bars=IndicatorCounted();
   int    limit,i;
   
   if(counted_bars>0) counted_bars--;
   limit=Bars-counted_bars;
   
   for(i=limit-1; i>=0; i--) {
 
      WWBuffer1[i] = getPeriodHigh(Band_Period,i);
      WWBuffer2[i] = getPeriodLow(Band_Period,i);
      
      ObjectSet("AutoFibo", OBJPROP_TIME1, Time[Band_Period]);
      ObjectSet("AutoFibo", OBJPROP_TIME2, Time[0]);
      if (Open[Band_Period] > Open[0]) { // Up
         ObjectSet("AutoFibo", OBJPROP_PRICE1, getPeriodHigh(Band_Period,i));
         ObjectSet("AutoFibo", OBJPROP_PRICE2, getPeriodLow(Band_Period,i));
      } else {
         ObjectSet("AutoFibo", OBJPROP_PRICE1, getPeriodLow(Band_Period,i));
         ObjectSet("AutoFibo", OBJPROP_PRICE2, getPeriodHigh(Band_Period,i));
      }
      
   }
   return(0);
}
 
double getPeriodHigh(int period, int pos) {
   int i;
   double buffer = 0;
   for (i=pos;i<=pos+period;i++) {
      if (price_type == 0) {
         if (High[i] > buffer) {
            buffer = High[i];
         }
      } else {
         if (Open[i] > Close[i]) { // Down
            if (Open[i] > buffer) {
               buffer = Open[i];
            }
         } else {
            if (Close[i] > buffer) {
               buffer = Close[i];
            }
         }
      }
   }
   return (buffer);
}
double getPeriodLow(int period, int pos) {
   int i;
   double buffer = 100000;
   for (i=pos;i<=pos+period;i++) {
      if (price_type == 0) {
         if (Low[i] < buffer) {
            buffer = Low[i];
         }
      } else {
         if (Open[i] > Close[i]) { // Down
            if (Close[i] < buffer) {
               buffer = Close[i];
            }
         } else {
            if (Open[i] < buffer) {
               buffer = Open[i];
            }
         }
      }
   }
   return (buffer);
}

Comments