Critical Points1_v1

Download script
Author: emsjoflo
Critical Points1_v1

This tool is designed to provide traders with a visual map of potential support and resistance levels on a trading chart. Instead of relying on manual guesswork, the script automatically calculates and plots specific price zones based on mathematical trends and historical proportions.

How the Logic Works

1. The Foundation: Moving Average Base The script starts by calculating a "Simple Moving Average" (SMA). Think of this as the "mean" or the average price of the asset over a specific period. This serves as the central anchor point for all other calculations.

2. Dynamic Price Projection (Fibonacci Logic) Once the base average is established, the script generates 16 unique horizontal price levels. It does this by taking the Fibonacci numbers—a sequence frequently used in technical analysis to identify natural growth and retracement patterns—and applying them as offsets to the Moving Average:

  • Upper Projection: The script calculates 8 price points above the average.
  • Lower Projection: The script calculates 8 price points below the average.

3. Real-Time Visual Mapping Rather than just calculating these numbers in the background, the script actively manages visual objects on your chart:

  • Automatic Creation & Updating: As the market moves and the Moving Average shifts, the script automatically identifies where these 16 price points should be. It creates horizontal lines to mark these spots and moves them in real-time to stay synchronized with current market data.
  • Color Coding: To help traders distinguish between different zones quickly, each set of levels is assigned a unique color. This allows for easier identification of "clusters" where multiple price points might converge.

Summary for the Trader

Essentially, this script acts as an automated "grid" generator. It takes the current average trend of the market and projects a series of significant price boundaries based on Fibonacci proportions. By watching these lines, you can more easily identify high-probability areas where the price might react, stall, or reverse.

Indicators Used
Moving average indicator
Miscellaneous
Implements a curve of type %1
14 Views
0 Downloads
0 Favorites
Critical Points1_v1
/*-----------------------------+
|			       |
| Shared by www.Aptrafx.com    |
|			       |
+------------------------------*/

//+------------------------------------------------------------------+
//|                                              Critical Points.mq4 |
//|                                                         emsjoflo |
//|                                  automaticforex.invisionzone.com |
//+------------------------------------------------------------------+
#property copyright "emsjoflo"
#property link      "automaticforex.invisionzone.com"

#property indicator_chart_window
#property indicator_buffers 1
#property indicator_color1 Red
//---- input parameters
extern int       SMAPeriod=157;
extern int       Fib1=21;
extern int       Fib2=34;
extern int       Fib3=55;
extern int       Fib4=89;
extern int       Fib5=144;
extern int       Fib6=233;
extern int       Fib7=377;
extern int       Fib8=610;
extern color     Color1=Khaki;
extern color     Color2=LightGreen;
extern color     Color3=LightSkyBlue;
extern color     Color4=Plum;
extern color     Color5=LightSalmon;
extern color     Color6=Tomato;
extern color     Color7=Magenta;
extern color     Color8=Aqua;


double Line1,Line_1,Line2,Line_2,Line3,Line_3,Line4,Line_4,Line5,Line_5,Line6,Line_6,Line7,Line_7,Line8,Line_8,MAVal,MAValOld;

//---- buffers
double ExtMapBuffer1[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   SetIndexStyle(0,DRAW_LINE);
   SetIndexBuffer(0,ExtMapBuffer1);
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----
ObjectDelete("cp1");
ObjectDelete("cp2");
ObjectDelete("cp3");
ObjectDelete("cp4");
ObjectDelete("cp5");
ObjectDelete("cp_1");
ObjectDelete("cp_2");
ObjectDelete("cp_3");
ObjectDelete("cp_4");
ObjectDelete("cp_5");


//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
   int    counted_bars=IndicatorCounted();
//----
      
   MAVal=iMA(NULL,0,SMAPeriod,0,MODE_SMA,0,1);
   Line1=MAVal+Fib1*Point;
   Line2=MAVal+Fib2*Point;
   Line3=MAVal+Fib3*Point;
   Line4=MAVal+Fib4*Point;
   Line5=MAVal+Fib5*Point;
   Line6=MAVal+Fib6*Point;
   Line7=MAVal+Fib7*Point;
   Line8=MAVal+Fib8*Point;
   Line_1=MAVal-Fib1*Point;
   Line_2=MAVal-Fib2*Point;
   Line_3=MAVal-Fib3*Point;
   Line_4=MAVal-Fib4*Point;
   Line_5=MAVal-Fib5*Point;   
   Line_6=MAVal-Fib6*Point;
   Line_7=MAVal-Fib7*Point;
   Line_8=MAVal-Fib8*Point;   

   if(ObjectFind("cp1") != 0)
      {
      ObjectCreate("cp1", OBJ_HLINE, 0, Time[20], Line1);
      ObjectSet("cp1", OBJPROP_STYLE, STYLE_DASHDOTDOT);
      ObjectSet("cp1", OBJPROP_COLOR, Color1);
      }
      else
      {
      ObjectMove("cp1", 0, Time[20], Line1);
      }
      
   if(ObjectFind("cp2") != 0)
      {
      ObjectCreate("cp2", OBJ_HLINE, 0, Time[20], Line2);
      ObjectSet("cp2", OBJPROP_STYLE, STYLE_DASHDOTDOT);
      ObjectSet("cp2", OBJPROP_COLOR, Color2);
      }
      else
      {
      ObjectMove("cp2", 0, Time[20], Line2);
      }
      
    if(ObjectFind("cp3") != 0)
      {
      ObjectCreate("cp3", OBJ_HLINE, 0, Time[20], Line3);
      ObjectSet("cp3", OBJPROP_STYLE, STYLE_DASHDOTDOT);
      ObjectSet("cp3", OBJPROP_COLOR, Color3);
      }
      else
      {
      ObjectMove("cp3", 0, Time[20], Line3);
      }
      
   if(ObjectFind("cp4") != 0)
      {
      ObjectCreate("cp4", OBJ_HLINE, 0, Time[20], Line4);
      ObjectSet("cp4", OBJPROP_STYLE, STYLE_DASHDOTDOT);
      ObjectSet("cp4", OBJPROP_COLOR, Color4);
      }
      else
      {
      ObjectMove("cp4", 0, Time[20], Line4);
      }
         
 
   if(ObjectFind("cp5") != 0)
      {
      ObjectCreate("cp5", OBJ_HLINE, 0, Time[20], Line5);
      ObjectSet("cp5", OBJPROP_STYLE, STYLE_DASHDOTDOT);
      ObjectSet("cp5", OBJPROP_COLOR, Color5);
      }
      else
      {
      ObjectMove("cp5", 0, Time[20], Line5);
      }

   if(ObjectFind("cp6") != 0)
      {
      ObjectCreate("cp6", OBJ_HLINE, 0, Time[20], Line6);
      ObjectSet("cp6", OBJPROP_STYLE, STYLE_DASHDOTDOT);
      ObjectSet("cp6", OBJPROP_COLOR, Color6);
      }
      else
      {
      ObjectMove("cp6", 0, Time[20], Line6);
      }
  
   if(ObjectFind("cp7") != 0)
      {
      ObjectCreate("cp7", OBJ_HLINE, 0, Time[20], Line7);
      ObjectSet("cp7", OBJPROP_STYLE, STYLE_DASHDOTDOT);
      ObjectSet("cp7", OBJPROP_COLOR, Color7);
      }
      else
      {
      ObjectMove("cp7", 0, Time[20], Line7);
      }

   if(ObjectFind("cp8") != 0)
      {
      ObjectCreate("cp8", OBJ_HLINE, 0, Time[20], Line8);
      ObjectSet("cp8", OBJPROP_STYLE, STYLE_DASHDOTDOT);
      ObjectSet("cp8", OBJPROP_COLOR, Color8);
      }
      else
      {
      ObjectMove("cp8", 0, Time[20], Line8);
      }
      
  if(ObjectFind("cp_1") != 0)
      {
      ObjectCreate("cp_1", OBJ_HLINE, 0, Time[20], Line_1);
      ObjectSet("cp_1", OBJPROP_STYLE, STYLE_DASHDOTDOT);
      ObjectSet("cp_1", OBJPROP_COLOR, Color1);
      }
      else
      {
      ObjectMove("cp_1", 0, Time[20], Line_1);
      }
      
   if(ObjectFind("cp_2") != 0)
      {
      ObjectCreate("cp_2", OBJ_HLINE, 0, Time[20], Line_2);
      ObjectSet("cp_2", OBJPROP_STYLE, STYLE_DASHDOTDOT);
      ObjectSet("cp_2", OBJPROP_COLOR, Color2);
      }
      else
      {
      ObjectMove("cp_2", 0, Time[20], Line_2);
      }
      
    if(ObjectFind("cp_3") != 0)
      {
      ObjectCreate("cp_3", OBJ_HLINE, 0, Time[20], Line_3);
      ObjectSet("cp_3", OBJPROP_STYLE, STYLE_DASHDOTDOT);
      ObjectSet("cp_3", OBJPROP_COLOR, Color3);
      }
      else ObjectMove("cp_3", 0, Time[20], Line_3);
      
      
   if(ObjectFind("cp_4") != 0)
      {
      ObjectCreate("cp_4", OBJ_HLINE, 0, Time[20], Line_4);
      ObjectSet("cp_4", OBJPROP_STYLE, STYLE_DASHDOTDOT);
      ObjectSet("cp_4", OBJPROP_COLOR, Color4);
      }
      else ObjectMove("cp_4", 0, Time[20], Line_4);
     
         
  
   if(ObjectFind("cp_5") != 0)
      {
      ObjectCreate("cp_5", OBJ_HLINE, 0, Time[20], Line_5);
      ObjectSet("cp_5", OBJPROP_STYLE, STYLE_DASHDOTDOT);
      ObjectSet("cp_5", OBJPROP_COLOR, Color5);
      }
      else
      {
      ObjectMove("cp_5", 0, Time[20], Line_5);
      }
 
   if(ObjectFind("cp_6") != 0)
      {
      ObjectCreate("cp_6", OBJ_HLINE, 0, Time[20], Line_6);
      ObjectSet("cp_6", OBJPROP_STYLE, STYLE_DASHDOTDOT);
      ObjectSet("cp_6", OBJPROP_COLOR, Color6);
      }
      else
      {
      ObjectMove("cp_6", 0, Time[20], Line_6);
      }
  
   if(ObjectFind("cp_7") != 0)
      {
      ObjectCreate("cp_7", OBJ_HLINE, 0, Time[20], Line_7);
      ObjectSet("cp_7", OBJPROP_STYLE, STYLE_DASHDOTDOT);
      ObjectSet("cp_7", OBJPROP_COLOR, Color7);
      }
      else
      {
      ObjectMove("cp_7", 0, Time[20], Line_7);
      }

   if(ObjectFind("cp_8") != 0)
      {
      ObjectCreate("cp_8", OBJ_HLINE, 0, Time[20], Line_8);
      ObjectSet("cp_8", OBJPROP_STYLE, STYLE_DASHDOTDOT);
      ObjectSet("cp_8", OBJPROP_COLOR, Color8);
      }
      else
      {
      ObjectMove("cp_8", 0, Time[20], Line_8);
      }
      
//----
   return(0);
  }
  
//+------------------------------------------------------------------+

Comments