AutoDayFibsWhiteKnight

Download script
Author: Copyright � 2005, Jason Robinson (jnrtrading)
AutoDayFibsWhiteKnight

The AutoDayFibs V1.0 is a specialized technical analysis tool designed for the MetaTrader platform. Its primary purpose is to automatically identify and plot Fibonacci retracement levels based on price action from previous trading days. Instead of requiring a trader to manually select highs and lows, this script automates that process by looking back at specific historical data points.

Core Functionality

1. Historical Data Analysis The tool begins by scanning the daily chart to find the highest and lowest price points over a user-defined number of previous days. By isolating these extreme values (the "High" and the "Low"), it calculates the total price range covered during that period.

2. Dynamic Orientation Detection One of the script's key features is its ability to determine the direction of the price movement. It checks whether the "High" occurred before the "Low" or vice versa in the historical sequence. This allows the Fibonacci levels to flip correctly depending on whether the market was in an uptrend or a downtrend, ensuring that the 0% and 100% levels are always placed logically relative to the price movement.

3. Automated Level Calculation Once the range and direction are established, the script mathematically calculates several key Fibonacci ratios. These include standard retracement levels (such as 23.6%, 38.2%, 50%, and 61.8%) as well as extended projection levels (such as 161.8%, 261.8%, and 423.6%).

4. Visual Representation The script handles all the "heavy lifting" of drawing on the chart:

  • Horizontal Lines: It automatically draws a series of orange, dashed horizontal lines at each calculated Fibonacci level.
  • Labels: It places clear text labels next to these lines so traders can instantly identify which percentage level they are looking at.
  • Auto-Updating: The script is designed to monitor price changes. If the price range changes (e.g., a new high or low is established), it clears the old lines and redraws them automatically to reflect the most current data.

Summary for the User

Essentially, this tool removes the manual work of drawing Fibonacci levels. It looks at the past day's performance, figures out how far the price moved, determines the direction of that move, and then paints a complete map of potential support and resistance zones on your chart in real-time.

18 Views
0 Downloads
0 Favorites
AutoDayFibsWhiteKnight
//+------------------------------------------------------------------+
//|                                                AutoDayFibs V1.0  |
//|                                                                  |
//|              Copyright © 2005, Jason Robinson                    |
//|               (jasonrobinsonuk,  jnrtrading)                     |
//|                http://www.jnrtrading.co.uk                       |
//|                                                                  |
//|                    Created by jnrtrading                         |
//|                                                                  |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2005, Jason Robinson (jnrtrading)"
#property link      "http://www.jnrtrading.co.uk"

#property indicator_chart_window
extern int daysBackForHigh = 1;
extern int daysBackForLow = 1;

//---- buffers

double Rates[][6];

double fib000,
       fib236,
       fib382,
       fib50,
       fib618,
       fib100,
       fib1618,
       fib2618,
       fib4236,
       range,
       prevRange,
       high,
       low;
       
bool objectsExist, highFirst;



//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   //prevRange = 0;
   //objectsExist = false;
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custor indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//---- 
   ObjectDelete("fib000");
   ObjectDelete("fib000_label");
   ObjectDelete("fib236");
   ObjectDelete("fib236_label");
   ObjectDelete("fib382");
   ObjectDelete("fib382_label");
   ObjectDelete("fib50");
   ObjectDelete("fib50_label");
   ObjectDelete("fib618");
   ObjectDelete("fib618_label");
   ObjectDelete("fib100");
   ObjectDelete("fib100_label");
   ObjectDelete("fib1618");
   ObjectDelete("fib1618_label");
   ObjectDelete("fib2618");
   ObjectDelete("fib2618_label");
   ObjectDelete("fib4236");
   ObjectDelete("fib4236_label");
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
   int i = 0;
//---- 
   //Print(prevRange);
   ArrayCopyRates(Rates, Symbol(), PERIOD_D1);   
   
   high = Rates[daysBackForHigh][3];
   low = Rates[daysBackForLow][2];
   range = high - low;
   
   while(true) {
      if(High[i] == high) {
         highFirst = true;
         break;
      }
      else if(Low[i] == low) {
         highFirst = false;
         break;
      }
      i++;
   }
   //Print(highFirst);
   
   // Delete Objects if necessary
   if (prevRange != range) {
      ObjectDelete("fib000");
      ObjectDelete("fib000_label");
      ObjectDelete("fib236");
      ObjectDelete("fib236_label");
      ObjectDelete("fib382");
      ObjectDelete("fib382_label");
      ObjectDelete("fib50");
      ObjectDelete("fib50_label");
      ObjectDelete("fib618");
      ObjectDelete("fib618_label");
      ObjectDelete("fib100");
      ObjectDelete("fib100_label");
      ObjectDelete("fib1618");
      ObjectDelete("fib1618_label");
      ObjectDelete("fib2618");
      ObjectDelete("fib2618_label");
      ObjectDelete("fib4236");
      ObjectDelete("fib4236_label");
      objectsExist = false;
      prevRange = range;
      //Print("Objects do not exist");
   }
   
   if (highFirst == true) {
      fib000 = low;
      fib236 = (range * 0.236) + low;
      fib382 = (range * 0.382) + low;
      fib50 = (high + low) / 2;
      fib618 = (range * 0.618) + low;
      fib100 = high;
      fib1618 = (range * 0.618) + high;
      fib2618 = (range * 0.618) + (high + range);
      fib4236 = (range * 0.236) + high + (range * 3);
   }
   else if (highFirst == false) {
      fib000 = high;
      fib236 = high - (range * 0.236);
      fib382 = high - (range * 0.382);
      fib50  = (high + low) / 2;
      fib618 = high - (range * 0.618);
      fib100 = low;
      fib1618 = low - (range * 0.618);
      fib2618 = (low - range) - (range * 0.618);// + (high + range);
      fib4236 = low - (range * 3) - (range * 0.236);// + high + (range * 3);
   }
   
   if (objectsExist == false) {
      ObjectCreate("fib000", OBJ_HLINE, 0, Time[40], fib000);
      ObjectSet("fib000", OBJPROP_STYLE, STYLE_DASHDOTDOT);
      ObjectSet("fib000", OBJPROP_COLOR, Orange);
      ObjectCreate("fib000_label", OBJ_TEXT, 0, Time[0], fib000);
      ObjectSetText("fib000_label","                             0.0", 8, "Times", White);
   
      ObjectCreate("fib236", OBJ_HLINE, 0, Time[40], fib236);
      ObjectSet("fib236", OBJPROP_STYLE, STYLE_DASHDOTDOT);
      ObjectSet("fib236", OBJPROP_COLOR, Orange);
      ObjectCreate("fib236_label", OBJ_TEXT, 0, Time[0], fib236);
      ObjectSetText("fib236_label","                             23.6", 8, "Times", White);
   
      ObjectCreate("fib382", OBJ_HLINE, 0, Time[40], fib382);
      ObjectSet("fib382", OBJPROP_STYLE, STYLE_DASHDOTDOT);
      ObjectSet("fib382", OBJPROP_COLOR, Orange);
      ObjectCreate("fib382_label", OBJ_TEXT, 0, Time[0], fib382);
      ObjectSetText("fib382_label","                             38.2", 8, "Times", White);
   
      ObjectCreate("fib50", OBJ_HLINE, 0, Time[40], fib50);
      ObjectSet("fib50", OBJPROP_STYLE, STYLE_DASHDOTDOT);
      ObjectSet("fib50", OBJPROP_COLOR, Orange);
      ObjectCreate("fib50_label", OBJ_TEXT, 0, Time[0], fib50);
      ObjectSetText("fib50_label","                             50.0", 8, "Times", White);
   
      ObjectCreate("fib618", OBJ_HLINE, 0, Time[40], fib618);
      ObjectSet("fib618", OBJPROP_STYLE, STYLE_DASHDOTDOT);
      ObjectSet("fib618", OBJPROP_COLOR, Orange);
      ObjectCreate("fib618_label", OBJ_TEXT, 0, Time[0], fib618);
      ObjectSetText("fib618_label","                             61.8", 8, "Times", White);
   
      ObjectCreate("fib100", OBJ_HLINE, 0, Time[40], fib100);
      ObjectSet("fib100", OBJPROP_STYLE, STYLE_DASHDOTDOT);
      ObjectSet("fib100", OBJPROP_COLOR, Orange);
      ObjectCreate("fib100_label", OBJ_TEXT, 0, Time[0], fib100);
      ObjectSetText("fib100_label","                             100.0", 8, "Times", White);
   
      ObjectCreate("fib1618", OBJ_HLINE, 0, Time[40], fib1618);
      ObjectSet("fib1618", OBJPROP_STYLE, STYLE_DASHDOTDOT);
      ObjectSet("fib1618", OBJPROP_COLOR, Orange);
      ObjectCreate("fib1618_label", OBJ_TEXT, 0, Time[0], fib1618);
      ObjectSetText("fib1618_label","                             161.8", 8, "Times", White);
   
      ObjectCreate("fib2618", OBJ_HLINE, 0, Time[40], fib2618);
      ObjectSet("fib2618", OBJPROP_STYLE, STYLE_DASHDOTDOT);
      ObjectSet("fib2618", OBJPROP_COLOR, Orange);
      ObjectCreate("fib2618_label", OBJ_TEXT, 0, Time[0], fib2618);
      ObjectSetText("fib2618_label","                             261.8", 8, "Times", White);
   
      ObjectCreate("fib4236", OBJ_HLINE, 0, Time[40], fib4236);
      ObjectSet("fib4236", OBJPROP_STYLE, STYLE_DASHDOTDOT);
      ObjectSet("fib4236", OBJPROP_COLOR, Orange);
      ObjectCreate("fib4236_label", OBJ_TEXT, 0, Time[0], fib4236);
      ObjectSetText("fib4236_label","                             423.6", 8, "Times", White);
      //Print("Objects Exist");
   }
   
//----
   return(0);
  }
//+------------------------------------------------------------------+

Comments