DinapoliTargetsAlerts_Log_v1

Download script
Author: mishanya
DinapoliTargetsAlerts_Log_v1

This script is designed as a visual trading assistant for the MetaTrader 4 platform. It automatically analyzes price action history to identify significant structural pivot points and project potential profit targets based on mathematical ratios. Instead of requiring you to manually calculate where the price might go next, the tool scans the market's "swings" and draws these levels directly on your chart in real-time.

Core Logic Overview

1. Market Structure Identification The script begins by scanning a large historical window of price data (defined by the user). It looks for specific "swing" points—these are areas where the market shifts direction, such as reaching a local peak or a local valley. It filters out minor market noise to focus on significant high and low points.

2. Identifying Key Anchor Points Once these swings are identified, the script tracks the most recent three significant price pivots (labeled as Points A, B, and C). These points serve as the foundation for all subsequent calculations:

  • Point A: The preceding structural peak or valley.
  • Point B: The intermediate pivot point.
  • Point C: The most recent market movement point.

3. Mathematical Projections (Fibonacci-Style) The script calculates potential price objectives by measuring the distance between Point A and Point B, and then applying specific multipliers to that distance starting from Point C. This creates a series of "Target Lines":

  • Target 1: A conservative projection based on a standard harmonic ratio.
  • Target 2 & 3: Moderate to aggressive extensions.
  • Fantasy & Crazy Dream: Extended long-term projections for high-volatility environments.

4. Entry and Exit Visualization In addition to profit targets, the script automatically calculates and draws:

  • Start Line: A suggested entry level based on the current market trend.
  • Stop Line: A protective "safety net" level designed to minimize losses if the trade moves against you.

Visual Feedback and Alerts

The tool provides immediate visual confirmation by drawing several dotted horizontal lines on your chart:

  • Green/Yellow/Purple Lines: Represent your primary profit targets.
  • Lime/Turquoise Lines: Represent extreme price extensions (the "Fantasy" scenarios).
  • Honeydew/Red Lines: Represent your entry and stop-loss boundaries.

Furthermore, the script acts as an active monitor. If the current market price hits any of these calculated targets, the system will trigger a pop-up alert on your screen and log the event in the trade journal, allowing you to react instantly without having to watch the chart every second.

Price Data Components
Series array that contains open time of each bar
Miscellaneous
It issuies visual alerts to the screen
12 Views
0 Downloads
0 Favorites
DinapoliTargetsAlerts_Log_v1
/*-----------------------------+
|			       |
| Shared by www.Aptrafx.com    |
|			       |
+------------------------------*/

//+------------------------------------------------------------------+
//|                                              DinapoliTargets.mq4 |
//|                                            mishanya_fx@yahoo.com |
//|                                                                  |
//+------------------------------------------------------------------+
#property copyright "mishanya"
#property link      "mishanya_fx@yahoo.com"

#property indicator_chart_window
#property indicator_buffers 1
#property indicator_color1 Blue
//---- input parameters
extern int       barn=300;
extern int       Length=6;
//---- buffers
double ExtMapBuffer1[];
//double ExtMapBuffer2[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   SetIndexEmptyValue(0,0.0);
  //SetIndexDrawBegin(0, barn);
   //SetIndexStyle(0,DRAW_SECTION);
   SetIndexBuffer(0,ExtMapBuffer1);
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custor indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {

   ObjectDelete("Start line");
   ObjectDelete("Stop line");
   ObjectDelete("Target1 line");
   ObjectDelete("Target2 line");
   ObjectDelete("Target3 line");
   ObjectDelete("Fantasy line");
   ObjectDelete("CrazyDream line");
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
   int    counted_bars=IndicatorCounted();
   int shift,Swing,Swing_n,uzl,i,zu,zd,mv;
   double PointA,PointB,PointC,Target1,Target2,Target3,Fantasy,CrazyDream,Start,Stop;
   double LL,HH,BH,BL,NH,NL; 
   double Uzel[10000][3]; 
   string text;
// loop from first bar to current bar (with shift=0) 
      Swing_n=0;Swing=0;uzl=0; 
      BH =High[barn];BL=Low[barn];zu=barn;zd=barn; 

for (shift=barn;shift>=0;shift--) { 
      LL=10000000;HH=-100000000; 
   for (i=shift+Length;i>=shift+1;i--) { 
         if (Low[i]< LL) {LL=Low[i];} 
         if (High[i]>HH) {HH=High[i];} 
   } 


   if (Low[shift]<LL && High[shift]>HH){ 
      Swing=2; 
      if (Swing_n==1) {zu=shift+1;} 
      if (Swing_n==-1) {zd=shift+1;} 
   } else { 
      if (Low[shift]<LL) {Swing=-1;} 
      if (High[shift]>HH) {Swing=1;} 
   } 

   if (Swing!=Swing_n && Swing_n!=0) { 
   if (Swing==2) {
      Swing=-Swing_n;BH = High[shift];BL = Low[shift]; 
   } 
      uzl=uzl+1; 
   if (Swing==1) {
      Uzel[uzl][1]=zd;
      Uzel[uzl][2]=BL;
   } 
   if (Swing==-1) {
      Uzel[uzl][1]=zu;
      Uzel[uzl][2]=BH; 
   } 
      BH = High[shift];
      BL = Low[shift]; 
   } 

   if (Swing==1) { 
      if (High[shift]>=BH) {BH=High[shift];zu=shift;}} 
      if (Swing==-1) {
          if (Low[shift]<=BL) {BL=Low[shift]; zd=shift;}} 
      Swing_n=Swing; 
   } 
   for (i=1;i<=uzl;i++) { 
      //text=DoubleToStr(Uzel[i][1],0);
      //text=;
         mv=StrToInteger(DoubleToStr(Uzel[i][1],0));
      //ExtMapBuffer1[mv]=Uzel[i][2];
   } 

PointA = Uzel[uzl-2][2];
PointB = Uzel[uzl-1][2];
PointC = Uzel[uzl][2];

Comment(PointA," ",PointB," ",PointC);

Target1=NormalizeDouble((PointB-PointA)*0.618+PointC,4);
Target2=PointB-PointA+PointC;
Target3=NormalizeDouble((PointB-PointA)*1.618+PointC,4);
Fantasy=NormalizeDouble((PointB-PointA)*2.618+PointC,4);
CrazyDream=NormalizeDouble((PointB-PointA)*4.618+PointC,4);
if (PointB<PointC)
{
Start= NormalizeDouble((PointB-PointA)*0.318+PointC,4)-(Ask-Bid);
Stop=PointC+2*(Ask-Bid);
}
if (PointB>PointC)
{
Start= NormalizeDouble((PointB-PointA)*0.318+PointC,4)+(Ask-Bid);
Stop=PointC-2*(Ask-Bid);
}


   if (ObjectFind("Start Line") != 0) 
     {
      ObjectCreate("Start line",OBJ_HLINE,0,Time[0],Start);
      ObjectSet("Start line",OBJPROP_COLOR,Honeydew);
      ObjectSet("Start line",OBJPROP_WIDTH,1);
      ObjectSet("Start line",OBJPROP_STYLE,STYLE_DOT);
     }
     else
     {
     ObjectMove("Start line", 0,Time[0],Start);
     }

   if (ObjectFind("Stop Line") != 0) 
     {
      ObjectCreate("Stop line",OBJ_HLINE,0,Time[0],Stop);
      ObjectSet("Stop line",OBJPROP_COLOR,Red);
      ObjectSet("Stop line",OBJPROP_WIDTH,1);
      ObjectSet("Stop line",OBJPROP_STYLE,STYLE_DOT);
     }
     else
     {
     ObjectMove("Stop line", 0,Time[0],Stop);
     }
    
    if (ObjectFind("Target1 Line") != 0) 
     {
      ObjectCreate("Target1 line",OBJ_HLINE,0,Time[0],Target1);
      ObjectSet("Target1 line",OBJPROP_COLOR,Green);
      ObjectSet("Target1 line",OBJPROP_WIDTH,1);
      ObjectSet("Target1 line",OBJPROP_STYLE,STYLE_DOT);
      
     }
     else
     {
     ObjectMove("Target1 line", 0,Time[0],Target1);
     }

    if (ObjectFind("Target2 Line") != 0) 
     {
      ObjectCreate("Target2 line",OBJ_HLINE,0,Time[0],Target2);
      ObjectSet("Target2 line",OBJPROP_COLOR,Yellow);
      ObjectSet("Target2 line",OBJPROP_WIDTH,1);
      ObjectSet("Target2 line",OBJPROP_STYLE,STYLE_DOT);
     
     }
     else
     {
     ObjectMove("Target2 line", 0,Time[0],Target2);
     }
    
    if (ObjectFind("Target3 Line") != 0) 
     {
      ObjectCreate("Target3 line",OBJ_HLINE,0,Time[0],Target3);
      ObjectSet("Target3 line",OBJPROP_COLOR,DarkOrchid);
      ObjectSet("Target3 line",OBJPROP_WIDTH,1);
      ObjectSet("Target3 line",OBJPROP_STYLE,STYLE_DOT);
      
     }
     else
     {
     ObjectMove("Target3 line", 0,Time[0],Target3);
     }
     
     if (ObjectFind("Fantasy Line") != 0) 
     {
      ObjectCreate("Fantasy line",OBJ_HLINE,0,Time[0],Fantasy);
      ObjectSet("Fantasy line",OBJPROP_COLOR,Lime);
      ObjectSet("Fantasy line",OBJPROP_WIDTH,1);
      ObjectSet("Fantasy line",OBJPROP_STYLE,STYLE_DOT);
      
     }
     else
     {
     ObjectMove("Fantasy line", 0,Time[0],Fantasy);
     }
     
  
     if (ObjectFind("CrazyDream Line") != 0) 
     {
      ObjectCreate("CrazyDream line",OBJ_HLINE,0,Time[0],CrazyDream);
      ObjectSet("CrazyDream line",OBJPROP_COLOR,DarkTurquoise);
      ObjectSet("CrazyDream line",OBJPROP_WIDTH,1);
      ObjectSet("CrazyDream line",OBJPROP_STYLE,STYLE_DOT);
      
     }
     else
     {
     ObjectMove("CrazyDream line", 0,Time[0],CrazyDream);     
     }
     
     
     if (Bid==Target1)
     {Alert("Target 1 Reached ", Symbol(),"!!!");
     Print("Target1=",Target1, TimeToStr(CurTime(),TIME_DATE|TIME_SECONDS));

     }
     
     if (Bid==Target2)
     { Alert("Target 2 Reached ", Symbol(),"!!!");
     Print("Target2=",Target2, TimeToStr(CurTime(),TIME_DATE|TIME_SECONDS));

     }
     if (Bid==Target3)
     { Alert("Target3 Reached ", Symbol(),"!!!");
     Print("Target3=",Target3, TimeToStr(CurTime(),TIME_DATE|TIME_SECONDS));

     }
     
      
     if (Bid==Fantasy)
     { Alert("Fantasy Reached ", Symbol(),"!!!");
     Print("Fantasy=",Target3, TimeToStr(CurTime(),TIME_DATE|TIME_SECONDS));

     }
     
      
     if (Bid==CrazyDream)
     { Alert("CrazyDream Reached ", Symbol(),"!!!");
     Print("CrazyDream=",Target3, TimeToStr(CurTime(),TIME_DATE|TIME_SECONDS));

     }
     
     
   return(0);
  }
//+------------------------------------------------------------------+

Comments