buy zone fibs
Download scriptThis tool is designed to help traders visualize specific price levels on a trading chart by combining moving averages with dynamic "Fibonacci" zones. Rather than just providing a single trend line, it creates a multi-layered visual structure that helps identify potential areas of interest based on the current market movement.
Core Logic and Functionality
1. Dynamic Trend Foundation (Moving Averages) The primary logic of this script is rooted in a Moving Average (MA). The tool calculates a moving average based on parameters you choose, such as the length of the period and the specific type of calculation (e.g., Simple, Exponential, Smoothed, or Linear Weighted). This acts as the "baseline" or the anchor for all other data points shown on your chart.
2. Automated Zone Projection Once the script establishes the baseline moving average, it automatically projects seven distinct levels above that price point. These are calculated by taking the value of the moving average and adding specific multipliers (referred to as "Fibonacci" inputs).
Instead of drawing static horizontal lines, these levels move in real-time as the market price changes. If the moving average rises, the entire "zone" of seven lines rises with it; if the average falls, the zone follows suit.
3. Visual Identification of Buy Zones By projecting these multiple levels simultaneously, the script creates a visual "buffer" or "zone." For traders, this is useful for identifying support and resistance dynamics. It allows you to see how much "room" there is between the current trend line and various price targets or pivot points.
How it Works in Practice
- Trend Tracking: You can choose the sensitivity of the moving average to smooth out market noise.
- Multi-Level Mapping: The script automatically handles the math for seven different levels, ensuring that all projections remain perfectly synchronized with the primary trend.
- Real-Time Adjustment: Because the logic is calculated bar-by-bar, the lines adapt instantly to new price data, providing a live look at the current market structure.
In summary, this tool transforms a standard moving average into a comprehensive visual map, helping you see not just where the price is currently trending, but where various mathematical "zones" exist relative to that trend.
//+------------------------------------------------------------------+
//| buy zone fibs.mq4 |
//| Copyright © 2007, MetaQuotes Software Corp. |
//| http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2007, MetaQuotes Software Corp."
#property link "http://www.metaquotes.net"
#property indicator_chart_window
#property indicator_buffers 8
#property indicator_color1 Black
#property indicator_color2 Blue
#property indicator_color3 Blue
#property indicator_color4 Blue
#property indicator_color5 Blue
#property indicator_color6 Blue
#property indicator_color7 Blue
#property indicator_color8 Blue
#property indicator_width1 1
#property indicator_width2 1
#property indicator_width3 1
#property indicator_width4 1
#property indicator_width5 1
#property indicator_width6 1
#property indicator_width7 1
#property indicator_width8 1
//---- input parameters
extern int MAPeriod=55;
extern int MAType=2;
extern int fibo1 = 1;
extern int fibo2 = 2;
extern int fibo3 = 3;
extern int fibo4 = 4;
extern int fibo5 = 5;
extern int fibo6 = 6;
extern int fibo7 = 7;
//---- buffers
double LineBuffer[];
double Fib1[];
double Fib2[];
double Fib3[];
double Fib4[];
double Fib5[];
double Fib6[];
double Fib7[];
//---- variables
int MAMode;
string strMAType;
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
IndicatorDigits(MarketInfo(Symbol(),MODE_DIGITS)+1);
//---- indicators
IndicatorBuffers(8);
SetIndexStyle(0,DRAW_NONE);
SetIndexBuffer(0,LineBuffer);
SetIndexDrawBegin(0,MAPeriod);
SetIndexStyle(1,DRAW_LINE);
SetIndexBuffer(1,Fib1);
SetIndexDrawBegin(1,MAPeriod);
SetIndexStyle(2,DRAW_LINE,STYLE_DOT,1);
SetIndexBuffer(2,Fib2);
SetIndexDrawBegin(2,MAPeriod);
SetIndexStyle(3,DRAW_LINE,STYLE_DOT,1);
SetIndexBuffer(3,Fib3);
SetIndexDrawBegin(3,MAPeriod);
SetIndexStyle(4,DRAW_LINE,STYLE_DOT,1);
SetIndexBuffer(4,Fib4);
SetIndexDrawBegin(4,MAPeriod);
SetIndexStyle(5,DRAW_LINE,STYLE_DOT,1);
SetIndexBuffer(5,Fib5);
SetIndexDrawBegin(5,MAPeriod);
SetIndexStyle(6,DRAW_LINE,STYLE_DOT,1);
SetIndexBuffer(6,Fib6);
SetIndexDrawBegin(6,MAPeriod);
SetIndexStyle(7,DRAW_LINE);
SetIndexBuffer(7,Fib7);
SetIndexDrawBegin(7,MAPeriod);
//---- name for DataWindow and indicator subwindow label
IndicatorShortName( strMAType+ " (" +MAPeriod + ") ");
//----
switch (MAType)
{
case 1: strMAType="EMA"; MAMode=MODE_EMA; break;
case 2: strMAType="SMMA"; MAMode=MODE_SMMA; break;
case 3: strMAType="LWMA"; MAMode=MODE_LWMA; break;
case 4: strMAType="LSMA"; break;
default: strMAType="SMA"; MAMode=MODE_SMA; break;
}
//----
return(0);
}
//+------------------------------------------------------------------+
//| Custor indicator deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
double LSMA(int Rperiod, int shift)
{
int i;
double sum;
int length;
double lengthvar;
double tmp;
double wt;
length = Rperiod;
sum = 0;
for(i = length; i >= 1 ; i--)
{
lengthvar = length + 1;
lengthvar /= 3;
tmp = 0;
tmp = ( i - lengthvar)*Close[length-i+shift];
sum+=tmp;
}
wt = sum*6/(length*(length+1));
return(wt);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int start()
{
double MA;
int limit;
int counted_bars = IndicatorCounted();
//---- check for possible errors
if (counted_bars<0) return(-1);
//---- last counted bar will be recounted
if (counted_bars>0) counted_bars--;
limit = Bars - counted_bars;
for(int i=limit; i>=0; i--)
{
if (MAType == 4)
{
MA = LSMA(MAPeriod,i);
}
else
{
MA = iMA(NULL,0,MAPeriod,0,MAMode,PRICE_HIGH,i);
}
LineBuffer[i] = MA;
Fib1[i] = MA + fibo1*Point;
Fib2[i] = MA + fibo2*Point;
Fib3[i] = MA + fibo3*Point;
Fib4[i] = MA + fibo4*Point;
Fib5[i] = MA + fibo5*Point;
Fib6[i] = MA + fibo6*Point;
Fib7[i] = MA + fibo7*Point;
}
//----
return(0);
}
//+-------------------------------------------------
Comments