iMA_Fibs_Below_v1

Download script
Author: Copyright � 2005, Metaquotes
iMA_Fibs_Below_v1

This tool is designed to provide traders with a dynamic visual aid that combines moving average trends with custom price levels. It automates the calculation of multiple support and resistance lines based on a primary price indicator, allowing for a more organized way to view potential market turning points.

Core Functionality

The script operates by identifying a "base" trend line using one of several standard Moving Average (MA) types. These moving averages smooth out market noise to help you see the general direction of the price. The user can choose from various calculation methods, including:

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

Dynamic Fibonacci Levels

The unique feature of this script is how it handles the levels. Instead of drawing static lines on your chart, the tool takes the value of the chosen Moving Average and projects seven specific price levels relative to it.

These levels are derived from custom "Fibonacci" inputs. The logic follows a specific mathematical pattern:

  1. The script identifies the current value of the Moving Average.
  2. It then subtracts specific point values (based on your chosen Fibonacci settings) from that moving average.
  3. It plots seven distinct lines simultaneously based on these calculations.

Practical Application

Because these levels are tied directly to a moving average, they move in real-time as the market trends. If the moving average climbs or falls, all seven corresponding levels move with it. This creates a "floating" support and resistance zone that adapts to current market volatility.

By using this tool, traders can more easily visualize key areas of interest that shift according to the price's momentum, providing a comprehensive map of potential price targets or reaction zones in a single view.

Indicators Used
Moving average indicator
Miscellaneous
Implements a curve of type %1
10 Views
0 Downloads
0 Favorites
iMA_Fibs_Below_v1
/*-----------------------------+
|			       |
| 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 Green
#property indicator_color3 Green
#property indicator_color4 Green
#property indicator_color5 Green
#property indicator_color6 Green
#property indicator_color7 Green
#property indicator_color8 Green
#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