iMA_TrueFibs_Below_v1
Download scriptThis tool is designed to provide traders with a comprehensive visual guide on their trading charts by combining two fundamental technical analysis concepts: Moving Averages and Fibonacci-based pricing levels.
Core Functionality
The primary purpose of this script is to track the "momentum" of a price trend using a Moving Average (MA) while simultaneously plotting several secondary price lines. These secondary lines are dynamically calculated based on the position of that Moving Average, allowing for a multi-layered view of potential support and resistance levels.
Key Features & Logic
1. Customizable Trend Tracking The script allows you to choose from several different types of Moving Averages. Depending on your trading style, you can select the calculation method that best suits your needs:
- SMA (Simple): The standard average price over a set period.
- EMA (Exponential): Gives more weight to recent price action.
- SMMA & LWMA: Specialized smoothing methods for different trend sensitivities.
- LSMA (Least Squares): A sophisticated linear regression approach used to identify the trend line of best fit.
2. Dynamic Fibonacci Levels Unlike static horizontal lines, the levels generated by this script are "floating." They are calculated relative to the Moving Average value. Specifically, the script takes the current position of the chosen Moving Average and subtracts a specific Fibonacci constant (such as 21, 34, 55, 89, 144, 233, or 377) from the price.
3. How it Works on the Chart
- The Anchor: The script first calculates the "Base Line" (the Moving Average). This represents the core trend of the market at that moment.
- The Offsets: It then projects seven additional lines below that base line. Because these lines are tied to the Moving Average, they move in harmony with the price trend.
- Visual Feedback: As the price moves and the Moving Average shifts up or down, the entire cluster of Fibonacci levels moves with it automatically.
Summary for Traders
By using this tool, you aren't just looking at a single average; you are looking at a "zone" of potential activity. It helps identify where price might stall, react, or reverse by providing a moving framework of support levels that adapt to the current market speed and direction in real-time.
/*-----------------------------+
| |
| Shared by www.Aptrafx.com |
| |
+------------------------------*/
//+------------------------------------------------------------------+
//| iMA_Fibs.mq4 |
//| Copyright © 2006, Robert L Hill |
//| mailto:robydoby314@yahoo.com |
//+------------------------------------------------------------------+
// This indicator allows selection of MA type and sets levels based on Fib values
// Added MAType 4 to use LSMA
#property copyright "Copyright © 2005, Metaquotes"
#property link "mailto:metaquotes@metaquotes.net"
#property indicator_chart_window
#property indicator_buffers 8
#property indicator_color1 Blue
#property indicator_color2 Aqua
#property indicator_color3 Aqua
#property indicator_color4 Aqua
#property indicator_color5 Aqua
#property indicator_color6 Aqua
#property indicator_color7 Aqua
#property indicator_color8 Aqua
#property indicator_width1 2
#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=157;
extern int MAType=1;
extern int fibo1 = 21;
extern int fibo2 = 34;
extern int fibo3 = 55;
extern int fibo4 = 89;
extern int fibo5 = 144;
extern int fibo6 = 233;
extern int fibo7 = 377;
//---- 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_LINE);
SetIndexBuffer(0,LineBuffer);
SetIndexDrawBegin(0,MAPeriod);
SetIndexStyle(1,DRAW_LINE);
SetIndexBuffer(1,Fib1);
SetIndexDrawBegin(1,MAPeriod);
SetIndexStyle(2,DRAW_LINE);
SetIndexBuffer(2,Fib2);
SetIndexDrawBegin(2,MAPeriod);
SetIndexStyle(3,DRAW_LINE);
SetIndexBuffer(3,Fib3);
SetIndexDrawBegin(3,MAPeriod);
SetIndexStyle(4,DRAW_LINE);
SetIndexBuffer(4,Fib4);
SetIndexDrawBegin(4,MAPeriod);
SetIndexStyle(5,DRAW_LINE);
SetIndexBuffer(5,Fib5);
SetIndexDrawBegin(5,MAPeriod);
SetIndexStyle(6,DRAW_LINE);
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_CLOSE,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