#SpudFibo_001
Download scriptThis tool is designed for MetaTrader 4 to automatically project Fibonacci retracement levels based on previous market activity. It simplifies technical analysis by instantly visualizing key price zones that traders use to identify potential support and resistance levels.
Core Functionality
The script focuses on identifying the "High" and "Low" prices from a specific timeframe—specifically the previous trading day—and uses those points to draw three distinct sets of Fibonacci lines on your chart.
1. Automated Data Retrieval
Instead of requiring you to manually click on the chart to select highs and lows, the script automatically:
- Identifies yesterday's highest and lowest prices.
- Handles weekend logic: If it is Sunday, the script intelligently expands its search to include Friday's data to ensure the most relevant price range is captured.
- Calculates the total price "Range" between those two points.
2. Dynamic Fibonacci Projections
The script generates three specific types of Fibonacci visualizations:
- Upper Fibonacci Levels: These are projected upwards from the high price. They use a variety of custom percentages (ranging from 0% to 500%) and are styled with a specific color (Navy) to highlight extended growth targets.
- Lower Fibonacci Levels: These are projected downwards from the low price. These include a much wider array of levels (up to 500%) and use a different color (Dodger Blue) to help visualize potential deep retracements or downside risks.
- Inner Fibonacci Levels (Optional): This is the primary "Main" Fibonacci tool. It draws a standard set of retracement levels (from 0% to 100%) between yesterday's high and low. It is designed to show the core price action corridor where most immediate trading decisions occur.
Key Visual Features
- Color Coding: The script distinguishes between different types of data using distinct colors for Upper, Main, and Lower levels, allowing you to quickly differentiate between "extreme" targets and "immediate" retracement zones.
- Ray Extension: All lines are set to extend indefinitely across the chart (rays), ensuring that as new candles form, the price levels remain visible for your analysis.
- Background Integration: The levels are placed in the background of the chart to keep the visual interface clean and focused on the price action.
- Auto-Cleanup: The script includes a "deinit" function, which ensures that when you remove the indicator from your chart, all drawn lines are automatically deleted to keep your workspace tidy.
//+------------------------------------------------------------------+
//| #SpudFibo.mq4
//+------------------------------------------------------------------+
#property indicator_chart_window
extern string note1 = "Fibonacci colors";
extern color UpperFiboColor = Navy;
extern color MainFiboColor = RoyalBlue;
extern color LowerFiboColor = DodgerBlue;
extern string note2 = "Draw main Fibonacci lines?";
extern bool InnerFibs = true;
double HiPrice, LoPrice, Range;
datetime StartTime;
int init()
{
return(0);
}
int deinit()
{
ObjectDelete("FiboUp");
ObjectDelete("FiboDn");
ObjectDelete("FiboIn");
return(0);
}
//+------------------------------------------------------------------+
//| Draw Fibo
//+------------------------------------------------------------------+
int DrawFibo()
{
if(ObjectFind("FiboUp") == -1)
ObjectCreate("FiboUp",OBJ_FIBO,0,StartTime,HiPrice+Range,StartTime,HiPrice);
else
{
ObjectSet("FiboUp",OBJPROP_TIME2, StartTime);
ObjectSet("FiboUp",OBJPROP_TIME1, StartTime);
ObjectSet("FiboUp",OBJPROP_PRICE1,HiPrice+Range);
ObjectSet("FiboUp",OBJPROP_PRICE2,HiPrice);
}
ObjectSet("FiboUp",OBJPROP_LEVELCOLOR,UpperFiboColor);
ObjectSet("FiboUp",OBJPROP_FIBOLEVELS,13);
ObjectSet("FiboUp",OBJPROP_FIRSTLEVEL+0,0.0); ObjectSetFiboDescription("FiboUp",0,"(100.0%) - %$");
ObjectSet("FiboUp",OBJPROP_FIRSTLEVEL+1,0.236); ObjectSetFiboDescription("FiboUp",1,"(123.6%) - %$");
ObjectSet("FiboUp",OBJPROP_FIRSTLEVEL+2,0.382); ObjectSetFiboDescription("FiboUp",2,"(138.2%) - %$");
ObjectSet("FiboUp",OBJPROP_FIRSTLEVEL+3,0.500); ObjectSetFiboDescription("FiboUp",3,"(150.0%) - %$");
ObjectSet("FiboUp",OBJPROP_FIRSTLEVEL+4,0.618); ObjectSetFiboDescription("FiboUp",4,"(161.8%) - %$");
ObjectSet("FiboUp",OBJPROP_FIRSTLEVEL+5,0.764); ObjectSetFiboDescription("FiboUp",5,"(176.4%) - %$");
ObjectSet("FiboUp",OBJPROP_FIRSTLEVEL+6,1.000); ObjectSetFiboDescription("FiboUp",6,"(200.0%) - %$");
ObjectSet("FiboUp",OBJPROP_FIRSTLEVEL+7,1.236); ObjectSetFiboDescription("FiboUp",7,"(223.6%) - %$");
ObjectSet("FiboUp",OBJPROP_FIRSTLEVEL+8,1.500); ObjectSetFiboDescription("FiboUp",8,"(250.0%) - %$");
ObjectSet("FiboUp",OBJPROP_FIRSTLEVEL+9,1.618); ObjectSetFiboDescription("FiboUp",9,"(261.8%) - %$");
ObjectSet("FiboUp",OBJPROP_FIRSTLEVEL+10,2.000); ObjectSetFiboDescription("FiboUp",10,"(300.0%) - %$");
ObjectSet("FiboUp",OBJPROP_FIRSTLEVEL+11,2.500); ObjectSetFiboDescription("FiboUp",11,"(350.0%) - %$");
ObjectSet("FiboUp",OBJPROP_FIRSTLEVEL+12,3.000); ObjectSetFiboDescription("FiboUp",12,"(400.0%) - %$");
ObjectSet("FiboUp",OBJPROP_FIRSTLEVEL+13,3.500); ObjectSetFiboDescription("FiboUp",13,"(450.0%) - %$");
ObjectSet("FiboUp",OBJPROP_FIRSTLEVEL+14,4.000); ObjectSetFiboDescription("FiboUp",14,"(500.0%) - %$");
ObjectSet("FiboUp",OBJPROP_RAY,true);
ObjectSet("FiboUp",OBJPROP_BACK,true);
if(ObjectFind("FiboDn") == -1)
ObjectCreate("FiboDn",OBJ_FIBO,0,StartTime,LoPrice-Range,StartTime,LoPrice);
else
{
ObjectSet("FiboDn",OBJPROP_TIME2, StartTime);
ObjectSet("FiboDn",OBJPROP_TIME1, StartTime);
ObjectSet("FiboDn",OBJPROP_PRICE1,LoPrice-Range);
ObjectSet("FiboDn",OBJPROP_PRICE2,LoPrice);
}
ObjectSet("FiboDn",OBJPROP_LEVELCOLOR,LowerFiboColor);
ObjectSet("FiboDn",OBJPROP_FIBOLEVELS,19);
ObjectSet("FiboDn",OBJPROP_FIRSTLEVEL+0,0.0); ObjectSetFiboDescription("FiboDn",0,"(0.0%) - %$");
ObjectSet("FiboDn",OBJPROP_FIRSTLEVEL+1,0.236); ObjectSetFiboDescription("FiboDn",1,"(-23.6%) - %$");
ObjectSet("FiboDn",OBJPROP_FIRSTLEVEL+2,0.382); ObjectSetFiboDescription("FiboDn",2,"(-38.2%) - %$");
ObjectSet("FiboDn",OBJPROP_FIRSTLEVEL+3,0.500); ObjectSetFiboDescription("FiboDn",3,"(-50.0%) - %$");
ObjectSet("FiboDn",OBJPROP_FIRSTLEVEL+4,0.618); ObjectSetFiboDescription("FiboDn",4,"(-61.8%) - %$");
ObjectSet("FiboDn",OBJPROP_FIRSTLEVEL+5,0.764); ObjectSetFiboDescription("FiboDn",5,"(-76.4%) - %$");
ObjectSet("FiboDn",OBJPROP_FIRSTLEVEL+6,1.000); ObjectSetFiboDescription("FiboDn",6,"(-100.0%) - %$");
ObjectSet("FiboDn",OBJPROP_FIRSTLEVEL+7,1.236); ObjectSetFiboDescription("FiboDn",7,"(-123.6%) - %$");
ObjectSet("FiboDn",OBJPROP_FIRSTLEVEL+8,1.382); ObjectSetFiboDescription("FiboDn",8,"(-138.2%) - %$");
ObjectSet("FiboDn",OBJPROP_FIRSTLEVEL+9,1.500); ObjectSetFiboDescription("FiboDn",9,"(-150.0%) - %$");
ObjectSet("FiboDn",OBJPROP_FIRSTLEVEL+10,1.618); ObjectSetFiboDescription("FiboDn",10,"(-161.8%) - %$");
ObjectSet("FiboDn",OBJPROP_FIRSTLEVEL+11,1.764); ObjectSetFiboDescription("FiboDn",11,"(-176.4%) - %$");
ObjectSet("FiboDn",OBJPROP_FIRSTLEVEL+12,2.000); ObjectSetFiboDescription("FiboDn",12,"(-200.0%) - %$");
ObjectSet("FiboDn",OBJPROP_FIRSTLEVEL+13,2.500); ObjectSetFiboDescription("FiboDn",13,"(-250.0%) - %$");
ObjectSet("FiboDn",OBJPROP_FIRSTLEVEL+14,3.000); ObjectSetFiboDescription("FiboDn",14,"(-300.0%) - %$");
ObjectSet("FiboDn",OBJPROP_FIRSTLEVEL+15,3.500); ObjectSetFiboDescription("FiboDn",15,"(-350.0%) - %$");
ObjectSet("FiboDn",OBJPROP_FIRSTLEVEL+16,4.000); ObjectSetFiboDescription("FiboDn",16,"(-400.0%) - %$");
ObjectSet("FiboDn",OBJPROP_FIRSTLEVEL+17,4.500); ObjectSetFiboDescription("FiboDn",17,"(-450.0%) - %$");
ObjectSet("FiboDn",OBJPROP_FIRSTLEVEL+18,5.000); ObjectSetFiboDescription("FiboDn",18,"(-500.0%) - %$");
ObjectSet("FiboDn",OBJPROP_RAY,true);
ObjectSet("FiboDn",OBJPROP_BACK,true);
if(InnerFibs)
{
if(ObjectFind("FiboIn") == -1)
ObjectCreate("FiboIn",OBJ_FIBO,0,StartTime,HiPrice,StartTime+PERIOD_D1*60,LoPrice);
else
{
ObjectSet("FiboIn",OBJPROP_TIME2, StartTime);
ObjectSet("FiboIn",OBJPROP_TIME1, StartTime+PERIOD_D1*60);
ObjectSet("FiboIn",OBJPROP_PRICE1,HiPrice);
ObjectSet("FiboIn",OBJPROP_PRICE2,LoPrice);
}
ObjectSet("FiboIn",OBJPROP_LEVELCOLOR,MainFiboColor);
ObjectSet("FiboIn",OBJPROP_FIBOLEVELS,7);
ObjectSet("FiboIn",OBJPROP_FIRSTLEVEL+0,0.0); ObjectSetFiboDescription("FiboIn",0,"Yesterday LOW (0.0) - %$");
ObjectSet("FiboIn",OBJPROP_FIRSTLEVEL+1,0.236); ObjectSetFiboDescription("FiboIn",1,"(23.6) - %$");
ObjectSet("FiboIn",OBJPROP_FIRSTLEVEL+2,0.382); ObjectSetFiboDescription("FiboIn",2,"(38.2) - %$");
ObjectSet("FiboIn",OBJPROP_FIRSTLEVEL+3,0.500); ObjectSetFiboDescription("FiboIn",3,"(50.0) - %$");
ObjectSet("FiboIn",OBJPROP_FIRSTLEVEL+4,0.618); ObjectSetFiboDescription("FiboIn",4,"(61.8) - %$");
ObjectSet("FiboIn",OBJPROP_FIRSTLEVEL+5,0.764); ObjectSetFiboDescription("FiboIn",5,"(76.4) - %$");
ObjectSet("FiboIn",OBJPROP_FIRSTLEVEL+6,1.000); ObjectSetFiboDescription("FiboIn",6,"Yesterday HIGH (100.0) - %$");
ObjectSet("FiboIn",OBJPROP_RAY,true);
ObjectSet("FiboIn",OBJPROP_BACK,true);
}
else
ObjectDelete("FiboIn");
}
//+------------------------------------------------------------------+
//| Indicator start function
//+------------------------------------------------------------------+
int start()
{
int shift = iBarShift(NULL,PERIOD_D1,Time[0]) + 1; // yesterday
HiPrice = iHigh(NULL,PERIOD_D1,shift);
LoPrice = iLow (NULL,PERIOD_D1,shift);
StartTime = iTime(NULL,PERIOD_D1,shift);
if(TimeDayOfWeek(StartTime)==0/*Sunday*/)
{//Add fridays high and low
HiPrice = MathMax(HiPrice,iHigh(NULL,PERIOD_D1,shift+1));
LoPrice = MathMin(LoPrice,iLow(NULL,PERIOD_D1,shift+1));
}
Range = HiPrice-LoPrice;
DrawFibo();
return(0);
}
//+------------------------------------------------------------------+
Comments