iMA_Fibs_Above

Download script
Author: Copyright � 2005, Metaquotes
iMA_Fibs_Above

This script is a specialized technical analysis tool designed for the MetaTrader platform. Its primary purpose is to combine two popular trading concepts into a single visual aid: Moving Averages and Fibonacci-based price levels.

Core Functionality

The tool acts as a dynamic "base line" that tracks the market's trend. It calculates a Moving Average (MA) based on your preferred settings, which represents the smoothed average price of an asset over a specific period. Because it is a moving average, this base line constantly shifts and evolves as new market data arrives.

Key Features and Logic

1. Customizable Moving Averages The script offers flexibility by allowing you to choose between different types of moving averages. Depending on your trading style, you can select from several standard calculation methods:

  • Simple Moving Average (SMA)
  • Exponential Moving Average (EMA)
  • Smoothed Moving Average (SMMA)
  • Linear Weighted Moving Average (LWMA)
  • Least Squares Moving Average (LSMA)

2. Dynamic Fibonacci Projections The unique logic of this script lies in how it handles the Fibonacci levels. Instead of drawing static horizontal lines on your chart, the script takes the calculated Moving Average and projects seven different "Fibonacci-style" price levels relative to that average.

3. Real-Time Calculation For every new price tick, the script performs the following logic:

  • It determines the current position of the chosen Moving Average.
  • It then calculates seven separate offset lines.
  • These offsets are determined by multiplying your specific Fibonacci input values (e.g., 23, 38, 50, etc.) by the smallest price unit (Point) of the currency or asset you are trading.
  • Because these levels are tied to the Moving Average, the entire "web" of levels moves in harmony with the trend.

How it appears on your chart

When you load this script, you will see a primary moving average line. Surrounding or trailing that line will be seven additional lines. As the market trends upward or downward and the moving average shifts, all seven Fibonacci levels will move automatically with it.

This allows traders to visualize potential support and resistance zones that are "floating" with the current trend rather than being fixed in place, helping to identify price targets or entry points relative to the asset's smoothed average price.

Indicators Used
Moving average indicator
Miscellaneous
Implements a curve of type %1
10 Views
0 Downloads
0 Favorites
iMA_Fibs_Above
//+------------------------------------------------------------------+
//|                                                     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 Red
#property indicator_color3 Red
#property indicator_color4 Red
#property indicator_color5 Red
#property indicator_color6 Red
#property indicator_color7 Red
#property indicator_color8 Red
#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=14;
extern int       MAType=1;
extern int fibo1 = 23;
extern int fibo2 = 38;
extern int fibo3 = 50;
extern int fibo4 = 62;
extern int fibo5 = 76;
extern int fibo6 = 100;
extern int fibo7 = 127;

//---- 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