Indicators Used
Miscellaneous
0
Views
0
Downloads
0
Favorites
Gator_v1
//+------------------------------------------------------------------+
//| Gator.mq4 |
//| Copyright © 2004, MetaQuotes Software Corp. |
//| http://www.metaquotes.net/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2004, MetaQuotes Software Corp."
#property link "http://www.metaquotes.net/"
//********************************************************************
// Attention! Following correlations must abide:
// 1.ExtJawsPeriod>ExtTeethPeriod>ExtLipsPeriod;
// 2.ExtJawsShift>ExtTeethShift>ExtLipsShift;
// 3.ExtJawsPeriod>ExtJawsShift;
// 4.ExtTeethPeriod>ExtTeethShift;
// 5.ExtLipsPeriod>ExtLipsShift.
//********************************************************************
//---- indicator settings
#property indicator_separate_window
#property indicator_buffers 6
#property indicator_color1 Black
#property indicator_color2 Red
#property indicator_color3 Green
#property indicator_color4 Black
#property indicator_color5 Red
#property indicator_color6 Green
//---- input parameters
extern int ExtJawsPeriod=13;
extern int ExtJawsShift=8;
extern int ExtTeethPeriod=8;
extern int ExtTeethShift=5;
extern int ExtLipsPeriod=5;
extern int ExtLipsShift=3;
extern int ExtMAMethod=2;
extern int ExtAppliedPrice=PRICE_MEDIAN;
//---- indicator buffers
double ExtUpBuffer[];
double ExtUpRedBuffer[];
double ExtUpGreenBuffer[];
double ExtDownBuffer[];
double ExtDownRedBuffer[];
double ExtDownGreenBuffer[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
//---- indicator buffers mapping
SetIndexBuffer(0,ExtUpBuffer);
SetIndexBuffer(1,ExtUpRedBuffer);
SetIndexBuffer(2,ExtUpGreenBuffer);
SetIndexBuffer(3,ExtDownBuffer);
SetIndexBuffer(4,ExtDownRedBuffer);
SetIndexBuffer(5,ExtDownGreenBuffer);
//----
IndicatorDigits(Digits+1);
//---- sets first bar from what index will be drawn
SetIndexDrawBegin(1,ExtJawsPeriod+ExtJawsShift-ExtTeethShift);
SetIndexDrawBegin(2,ExtJawsPeriod+ExtJawsShift-ExtTeethShift);
SetIndexDrawBegin(4,ExtTeethPeriod+ExtTeethShift-ExtLipsShift);
SetIndexDrawBegin(5,ExtTeethPeriod+ExtTeethShift-ExtLipsShift);
//---- line shifts when drawing
SetIndexShift(0,ExtTeethShift);
SetIndexShift(1,ExtTeethShift);
SetIndexShift(2,ExtTeethShift);
SetIndexShift(3,ExtLipsShift);
SetIndexShift(4,ExtLipsShift);
SetIndexShift(5,ExtLipsShift);
//---- drawing settings
SetIndexStyle(0,DRAW_NONE);
SetIndexStyle(1,DRAW_HISTOGRAM);
SetIndexStyle(2,DRAW_HISTOGRAM);
SetIndexStyle(3,DRAW_NONE);
SetIndexStyle(4,DRAW_HISTOGRAM);
SetIndexStyle(5,DRAW_HISTOGRAM);
//---- name for DataWindow and indicator subwindow label
IndicatorShortName("Gator("+ExtJawsPeriod+","+ExtTeethPeriod+","+ExtLipsPeriod+")");
SetIndexLabel(0,"GatorUp");
SetIndexLabel(1,NULL);
SetIndexLabel(2,NULL);
SetIndexLabel(3,"GatorDown");
SetIndexLabel(4,NULL);
SetIndexLabel(5,NULL);
//---- sets drawing line empty value
SetIndexEmptyValue(1,0.0);
SetIndexEmptyValue(2,0.0);
SetIndexEmptyValue(4,0.0);
SetIndexEmptyValue(5,0.0);
//---- initialization done
return(0);
}
//+------------------------------------------------------------------+
//| Gator Oscillator |
//+------------------------------------------------------------------+
int start()
{
int i,nLimit;
double dPrev,dCurrent;
//---- bars count that does not changed after last indicator launch.
int nCountedBars=IndicatorCounted();
//---- last counted bar will be recounted
if(nCountedBars<=ExtTeethPeriod+ExtTeethShift-ExtLipsShift)
nLimit=Bars-(ExtTeethPeriod+ExtTeethShift-ExtLipsShift);
else
nLimit=Bars-nCountedBars-1;
//---- moving averages absolute difference
for(i=0; i<nLimit+1; i++)
{
dCurrent=iMA(NULL,0,ExtTeethPeriod,ExtTeethShift-ExtLipsShift,ExtMAMethod,ExtAppliedPrice,i)-
iMA(NULL,0,ExtLipsPeriod,0,ExtMAMethod,ExtAppliedPrice,i);
if(dCurrent<=0.0) ExtDownBuffer[i]=dCurrent;
else ExtDownBuffer[i]=-dCurrent;
}
//---- dispatch values between 2 lower buffers
for(i=nLimit-1; i>=0; i--)
{
dPrev=ExtDownBuffer[i+1];
dCurrent=ExtDownBuffer[i];
if(dCurrent<dPrev)
{
ExtDownRedBuffer[i]=0.0;
ExtDownGreenBuffer[i]=dCurrent;
}
if(dCurrent>dPrev)
{
ExtDownRedBuffer[i]=dCurrent;
ExtDownGreenBuffer[i]=0.0;
}
//---- arbitrage
if(dCurrent==dPrev)
{
if(ExtDownRedBuffer[i+1]<0.0) ExtDownRedBuffer[i]=dCurrent;
else ExtDownGreenBuffer[i]=dCurrent;
}
}
//---- last counted bar will be recounted
if(nCountedBars<=ExtJawsPeriod+ExtJawsShift-ExtTeethShift)
nLimit=Bars-(ExtJawsPeriod+ExtJawsShift-ExtTeethShift);
else
nLimit=Bars-nCountedBars-1;
//---- moving averages absolute difference
for(i=0; i<nLimit+1; i++)
{
dCurrent=iMA(NULL,0,ExtJawsPeriod,ExtJawsShift-ExtTeethShift,ExtMAMethod,ExtAppliedPrice,i)-
iMA(NULL,0,ExtTeethPeriod,0,ExtMAMethod,ExtAppliedPrice,i);
if(dCurrent>=0.0) ExtUpBuffer[i]=dCurrent;
else ExtUpBuffer[i]=-dCurrent;
}
//---- dispatch values between 2 upper buffers
for(i=nLimit-1; i>=0; i--)
{
dPrev=ExtUpBuffer[i+1];
dCurrent=ExtUpBuffer[i];
if(dCurrent>dPrev)
{
ExtUpRedBuffer[i]=0.0;
ExtUpGreenBuffer[i]=dCurrent;
}
if(dCurrent<dPrev)
{
ExtUpRedBuffer[i]=dCurrent;
ExtUpGreenBuffer[i]=0.0;
}
//---- arbitrage
if(dCurrent==dPrev)
{
if(ExtUpGreenBuffer[i+1]>0.0) ExtUpGreenBuffer[i]=dCurrent;
else ExtUpRedBuffer[i]=dCurrent;
}
}
//---- done
return(0);
}
//+------------------------------------------------------------------+
Comments
Markdown Formatting Guide
# H1
## H2
### H3
**bold text**
*italicized text*
[title](https://www.example.com)

`code`
```
code block
```
> blockquote
- Item 1
- Item 2
1. First item
2. Second item
---