আমারা যারা ফরেক্স মার্কেট এ কাজ করে আনকে এ বায় এবং সেল সিগ্নাল বজতে পারিনা তাদের জন্য এয় এম কিউ এল কোডিং এয় কোডিং ট্যাক্স তাকে কপি করে সেভ করতে হবে এম কিউ এল ফরমেট এ
//----
#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 Red
#property indicator_color2 Blue
//---- buffers
double ExtUpFractalsBuffer[];
double ExtDownFractalsBuffer[];
// ,
#define SIGNAL_BAR 2
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
//---- indicator buffers mapping
SetIndexBuffer(0, ExtUpFractalsBuffer);
SetIndexBuffer(1, ExtDownFractalsBuffer);
//---- drawing settings
SetIndexStyle(0, DRAW_ARROW);
SetIndexArrow(0, 119);
SetIndexStyle(1, DRAW_ARROW);
SetIndexArrow(1, 119);
//----
SetIndexEmptyValue(0, 0.0);
SetIndexEmptyValue(1, 0.0);
//---- name for DataWindow
SetIndexLabel(0, "sFractal Up");
SetIndexLabel(1, "sFractal Down");
//---- initialization done
return(0);
}
//+------------------------------------------------------------------+
//| Custor indicator deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int start()
{
int i, nCountedBars;
bool bFound;
double dCurrent;
nCountedBars = IndicatorCounted();
//---- last counted bar will be recounted
if(nCountedBars <= 2)
i = Bars - nCountedBars - 3;
if(nCountedBars > 2)
{
nCountedBars--;
i = Bars - nCountedBars - 1;
}
//----Up and Down Fractals
while(i >= 2)
{
//----Fractals up
bFound = false;
dCurrent = High[i];
if(dCurrent > High[i+1] && dCurrent > High[i+2] && dCurrent > High[i-1] &&
dCurrent > High[i-2])
{
bFound = true;
ExtUpFractalsBuffer[i] = dCurrent;
}
//----6 bars Fractal
if(!bFound && (Bars - i - 1) >= 3)
{
if(dCurrent == High[i+1] && dCurrent > High[i+2] && dCurrent > High[i+3] &&
dCurrent > High[i-1] && dCurrent > High[i-2])
{
bFound = true;
ExtUpFractalsBuffer[i] = dCurrent;
}
}
//----7 bars Fractal
if(!bFound && (Bars - i - 1) >= 4)
{
if(dCurrent >= High[i+1] && dCurrent == High[i+2] && dCurrent > High[i+3] &&
dCurrent > High[i+4] && dCurrent > High[i-1] && dCurrent > High[i-2])
{
bFound = true;
ExtUpFractalsBuffer[i] = dCurrent;
}
}
//----8 bars Fractal
if(!bFound && (Bars - i - 1) >= 5)
{
if(dCurrent >= High[i+1] && dCurrent == High[i+2] && dCurrent == High[i+3] &&
dCurrent > High[i+4] && dCurrent > High[i+5] && dCurrent > High[i-1] &&
dCurrent > High[i-2])
{
bFound = true;
ExtUpFractalsBuffer[i] = dCurrent;
}
}
//----9 bars Fractal
if(!bFound && (Bars - i - 1) >= 6)
{
if(dCurrent >= High[i+1] && dCurrent == High[i+2] && dCurrent >= High[i+3] &&
dCurrent == High[i+4] && dCurrent > High[i+5] && dCurrent > High[i+6] &&
dCurrent > High[i-1] && dCurrent > High[i-2])
{
bFound = true;
ExtUpFractalsBuffer[i] = dCurrent;
}
}
//----Fractals down
bFound = false;
dCurrent = Low[i];
if(dCurrent < Low[i+1] && dCurrent < Low[i+2] && dCurrent < Low[i-1] &&
dCurrent < Low[i-2])
{
bFound = true;
ExtDownFractalsBuffer[i] = dCurrent;
}
//----6 bars Fractal
if(!bFound && (Bars - i - 1) >= 3)
{
if(dCurrent == Low[i+1] && dCurrent < Low[i+2] && dCurrent < Low[i+3] &&
dCurrent < Low[i-1] && dCurrent < Low[i-2])
{
bFound = true;
ExtDownFractalsBuffer[i] = dCurrent;
}
}
//----7 bars Fractal
if(!bFound && (Bars - i - 1) >= 4)
{
if(dCurrent <= Low[i+1] && dCurrent == Low[i+2] && dCurrent < Low[i+3] &&
dCurrent < Low[i+4] &&
dCurrent < Low[i-1] && dCurrent < Low[i-2])
{
bFound = true;
ExtDownFractalsBuffer[i] = dCurrent;
}
}
//----8 bars Fractal
if(!bFound && (Bars - i - 1) >= 5)
{
if(dCurrent <= Low[i+1] && dCurrent == Low[i+2] && dCurrent==Low[i+3] &&
dCurrent < Low[i+4] && dCurrent < Low[i+5] && dCurrent < Low[i-1] &&
dCurrent < Low[i-2])
{
bFound = true;
ExtDownFractalsBuffer[i] = dCurrent;
}
}
//----9 bars Fractal
if(!bFound && (Bars - i- 1) >= 6)
{
if(dCurrent <= Low[i+1] && dCurrent == Low[i+2] && dCurrent <= Low[i+3] &&
dCurrent == Low[i+4] && dCurrent < Low[i+5] && dCurrent < Low[i+6] &&
dCurrent < Low[i-1] && dCurrent < Low[i-2])
{
bFound = true;
ExtDownFractalsBuffer[i] = dCurrent;
}
}
i--;
}
// ,
//
static int PrevSignal = 0, PrevTime = 0;
// 0-, .
// , .
if(SIGNAL_BAR > 0 && Time[0] <= PrevTime)
return(0);
// ,
PrevTime = Time[0];
// (PrevSignal=0)
if(PrevSignal <= 0)
{
if(ExtDownFractalsBuffer[SIGNAL_BAR] > 0)
{
PrevSignal = 1;
Alert("sFractals (", Symbol(), ", ", Period(), ") - BUY!!!");
}
}
if(PrevSignal >= 0)
{
if(ExtUpFractalsBuffer[SIGNAL_BAR] > 0)
{
PrevSignal = -1;
Alert("sFractals (", Symbol(), ", ", Period(), ") - SELL!!!");
}
}
//----
return(0);
}
//+------------------------------------------------------------------+