DinapoliTarget_Malay
Download scriptThis tool is designed to analyze price movements in the trading market by identifying specific structural patterns and projecting potential future price targets based on mathematical ratios. Rather than looking at standard lagging indicators, it focuses on "swings"—significant peaks and valleys in price action—to map out where the market might head next.
Core Logic and Mechanics
1. Identifying Market Swings The script scans historical price data to distinguish between minor price fluctuations and significant structural changes. It looks for local highs and lows within a specific window of bars. When it detects a transition from an upward trend to a downward trend (or vice versa), it marks these as key pivot points. These points serve as the foundation for all subsequent calculations.
2. Signal Detection The tool monitors these swing points in real-time. By comparing the current price relative to the established historical pivots, the script can trigger alerts. It identifies whether the market is showing a "Buy" or "Sell" signal based on whether the price has broken through or is reacting to these structural boundaries.
3. Mathematical Target Projections One of the primary features of this tool is its ability to project future price levels using Fibonacci-style ratios (such as 0.618, 1.618, and higher multipliers). Once it identifies a significant move between two points (Point A to Point B), it calculates three distinct target zones:
- Target 1: A conservative projection based on the 0.618 ratio.
- Target 2: A balanced projection representing a full extension of the previous move.
- Target 3: An aggressive expansion projection using a 1.618 ratio.
4. Dynamic Visual Mapping To help traders visualize these levels clearly, the script automatically draws several horizontal lines on the trading chart:
- Start Line: Indicates the projected entry or origin point of the move.
- Stop Line: Provides a visual safety boundary (Stop Loss) to manage risk.
- Target Lines: Displays three distinct horizontal levels (Target 1, 2, and 3) so the trader can see exactly where the price is expected to gravitate based on the current market structure.
Summary for the User
In simple terms, this tool acts like a roadmap for price action. It looks back at how the market moved to find "landmarks" (swings), identifies the current direction, and then draws lines on your screen showing you where the price is likely to go next, along with specific zones where you might consider taking profit or exiting a trade.
//+------------------------------------------------------------------+
//| DinapoliTarget_Malay.mq4 |
//| fxfariz a.k.a warrior trader |
//| fxfariz@gmail,com |
//+------------------------------------------------------------------+
#property copyright "fxfariz a.k.a warrior trader"
#property link "fxfariz@gmail,com"
#property indicator_chart_window
#property indicator_buffers 1
#property indicator_color1 Aqua
#property indicator_width1 1
//---- input parameters
extern int barn=300;
extern int Length=6;
double prev;
double last;
double alertBar;
extern int SoundAlertMode = 1;
extern bool targets = true;
//---- 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);
IndicatorShortName("fxfariz");
//----
return(0);
}
//+------------------------------------------------------------------+
//| Custor indicator deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
ObjectDelete("Start line");
ObjectDelete("Stop line");
ObjectDelete("Target1 line");
ObjectDelete("Target2 line");
ObjectDelete("Target3 line");
ObjectDelete("info0");
ObjectDelete("info1");
ObjectDelete("info2");
ObjectDelete("info3");
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,Fantnsy,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));
if(prev > Uzel[i][2] && ExtMapBuffer1[mv]!=Uzel[i][2] && SoundAlertMode > 0 && Bars>alertBar) {Alert( "Dinapoli Target menunjukkan BUY SIGNAL kat ",Symbol()," pada TF ",Period());alertBar = Bars;prev = Uzel[i][2];}
if(prev < Uzel[i][2] && ExtMapBuffer1[mv]!=Uzel[i][2] && SoundAlertMode > 0 && Bars>alertBar) {Alert( "Dinapoli Target menunjukkan SELL SIGNAL kat ",Symbol()," pada TF ",Period());alertBar = Bars;prev = Uzel[i][2];}
ExtMapBuffer1[mv]=Uzel[i][2];
}
PointA = Uzel[uzl-2][2];
PointB = Uzel[uzl-1][2];
PointC = Uzel[uzl][2];
Target1=NormalizeDouble((PointB-PointA)*0.618+PointC,4);
Target2=PointB-PointA+PointC;
Target3=NormalizeDouble((PointB-PointA)*1.618+PointC,4);
Fantnsy=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 && targets == true)
{
ObjectCreate("Start line",OBJ_HLINE,0,Time[0],Start);
ObjectSet("Start line",OBJPROP_COLOR,Bisque);
ObjectSet("Start line",OBJPROP_WIDTH,3);
ObjectSet("Start line",OBJPROP_STYLE,STYLE_DOT);
}
else
{
ObjectMove("Start line", 0,Time[0],Start);
}
if (ObjectFind("Stop Line") != 0 && targets == true)
{
ObjectCreate("Stop line",OBJ_HLINE,0,Time[0],Stop);
ObjectSet("Stop line",OBJPROP_COLOR,Red);
ObjectSet("Stop line",OBJPROP_WIDTH,3);
ObjectSet("Stop line",OBJPROP_STYLE,STYLE_DOT);
}
else
{
ObjectMove("Stop line", 0,Time[0],Stop);
}
if (ObjectFind("Target1 Line") != 0 && targets == true)
{
ObjectCreate("Target1 line",OBJ_HLINE,0,Time[0],Target1);
ObjectSet("Target1 line",OBJPROP_COLOR,Yellow);
ObjectSet("Target1 line",OBJPROP_WIDTH,3);
ObjectSet("Target1 line",OBJPROP_STYLE,STYLE_DOT);
}
else
{
ObjectMove("Target1 line", 0,Time[0],Target1);
}
if (ObjectFind("Target2 Line") != 0 && targets == true)
{
ObjectCreate("Target2 line",OBJ_HLINE,0,Time[0],Target2);
ObjectSet("Target2 line",OBJPROP_COLOR,PaleTurquoise);
ObjectSet("Target2 line",OBJPROP_WIDTH,3);
ObjectSet("Target2 line",OBJPROP_STYLE,STYLE_DOT);
}
else
{
ObjectMove("Target2 line", 0,Time[0],Target2);
}
if (ObjectFind("Target3 Line") != 0 && targets == true)
{
ObjectCreate("Target3 line",OBJ_HLINE,0,Time[0],Target3);
ObjectSet("Target3 line",OBJPROP_COLOR,LightSkyBlue);
ObjectSet("Target3 line",OBJPROP_WIDTH,3);
ObjectSet("Target3 line",OBJPROP_STYLE,STYLE_DOT);
}
else
{
ObjectMove("Target3 line", 0,Time[0],Target3);
}
return(0);
}
//+------------------------------------------------------------------+
Comments