DinapoliTargetsAlerts_Log_v1
Download scriptThis 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.
/*-----------------------------+
| |
| 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