Miscellaneous
0
Views
0
Downloads
0
Favorites
iSAR.Gap
/*
âûçîâ èç êîäîâ - ñòàíäàðòíûå ïîëÿ + ïîëå Gap
double iCustom(
string symbol, // ñèìâîëüíîå èìÿ èíñòðóìåíòà (NULL- òåêóùèé)
int timeframe, // òàéì-ôðåéì (0- òåêóùèé)
"iSAR.Gap", // èìÿ ýòîãî èíäèêàòîðà
//
double step, // øàã ôàêòîðà óñêîðåíèÿ è åãî íà÷àëüíîå çíà÷åíèå
double maximum // ìàêñèìàëüíîå çíà÷åíèå ôàêòîðà óñêîðåíèÿ
int GapPoints, // ïîðîã äëÿ èäåíòèôèêàöèè ãýïà â ïï;
// =0- ñòàíäàðíûé ðåæèì
// <0- âûâîä áåç ñìåùåíèÿ
//
int mode, // mode - íîìåð áóôåðà èíäèêàòîðà (0)
int shift // ñäâèã
)
==============
iCustom(NULL,0,"iSAR.Gap",Step,Maximum,GapPoints, 0,i);
*/
//Added Fix1 September 6, 2006 Advance Index if new bar by Stanley Fiala http://merlin4x.com
#property indicator_chart_window
#property indicator_buffers 1
#property indicator_color1 DodgerBlue
//---- input parameters
extern double Step = 0.02;
extern double Maximum = 0.2;
extern int GapPoints=0; // ïîðîã èäåíòèôèêàöèè ãýïà â ïï.
int GapHours=8; // ïîðîã ïî âðåìåíè â ÷àñàõ (>0) èëè â ìèíóòàõ (<0)
//---- buffers
double SarBuffer[];
double HighG[],
LowG[],
SAR[],
Base[];
//----
int save_lastreverse;
bool save_dirlong;
double save_start;
double save_last_high;
double save_last_low;
double save_ep;
double save_sar;
int bartime;
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
//---- indicators
SetIndexStyle(0, DRAW_ARROW);
SetIndexArrow(0, 159);
SetIndexBuffer(0, SAR);
// áóôåðû áåçãýïîâûõ êîòèðîâîê
IndicatorBuffers(5);
SetIndexBuffer(1, SarBuffer);
SetIndexBuffer(2,HighG);
SetIndexBuffer(3,LowG);
SetIndexBuffer(4,Base);
//----
return(0);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void SaveLastReverse(int last, int dir, double start, double low, double high,
double ep, double sar)
{
save_lastreverse = last;
save_dirlong = dir;
save_start = start;
save_last_low = low;
save_last_high = high;
save_ep = ep;
save_sar = sar;
}
//+------------------------------------------------------------------+
//| Parabolic Sell And Reverse system |
//+------------------------------------------------------------------+
int start()
{
static bool first = true;
bool dirlong;
double start, last_high, last_low;
double ep, sar, price_low, price_high, price;
int i, counted_bars = IndicatorCounted();
// îáðàáîòêà ãýïà ////////
int limit=Bars-counted_bars-1;
if(limit>1) limit=Bars-1;
for(i=limit;i>=0;i--) {
// ñìåùåíèå
double base=iCustom(NULL,0,"KillGap",GapPoints,GapHours,0,1,i);
// çàïîëíåíèå áóôåðîâ áåçãïîâûìè êîòèðîâêàìè
Base[i]=base; // ñìåùåíèå
HighG[i]=High[i]+base; // áåçãýïîâûé High
LowG[i] =Low[i] +base; // áåçãýïîâûé Low
}
//////////////////////////
//----
if(Bars < 3)
return(0);
//---- initial settings
i = Bars - 2;
//----
if(counted_bars == 0 || first)
{
first = false;
dirlong = true;
start = Step;
last_high = -10000000.0;
last_low = 10000000.0;
//----
while(i > 0)
{
save_lastreverse = i;
price_low = LowG[i];
//----
if(last_low > price_low)
last_low = price_low;
price_high = HighG[i];
//----
if(last_high < price_high)
last_high = price_high;
//----
if(price_high > HighG[i+1] && price_low > LowG[i+1])
break;
//----
if(price_high < HighG[i+1] && price_low < LowG[i+1])
{
dirlong = false;
break;
}
i--;
}
//---- initial zero
int k = i;
Print(" k=", k, " Bars=", Bars);
//----
while(k < Bars)
{
SarBuffer[k] = 0.0;
k++;
}
//---- check further
if(dirlong)
{
SarBuffer[i] = LowG[i+1];
ep = HighG[i];
}
else
{
SarBuffer[i] = HighG[i+1];
ep = LowG[i];
}
i--;
}
else
{
i = save_lastreverse;
start = save_start;
dirlong = save_dirlong;
last_high = save_last_high;
last_low = save_last_low;
ep = save_ep;
sar = save_sar;
// Fix1 start
// If new bar increment index
if(Time[0] != bartime)
{
bartime = Time[0];
i++;
}
//Fix1 end
}
//----
while(i >= 0)
{
price_low = LowG[i];
price_high = HighG[i];
//--- check for reverse from long to short
if(dirlong && price_low < SarBuffer[i+1])
{
SaveLastReverse(i, true, start, price_low, last_high, ep, sar);
start = Step;
dirlong = false;
ep = price_low;
last_low = price_low;
SarBuffer[i] = last_high;
i--;
continue;
}
//--- check for reverse from short to long
if(!dirlong && price_high > SarBuffer[i+1])
{
SaveLastReverse(i, false, start, last_low, price_high, ep, sar);
start = Step;
dirlong = true;
ep = price_high;
last_high = price_high;
SarBuffer[i] = last_low;
i--;
continue;
}
//sar(i) = sar(i+1)+start*(ep-sar(i+1))
price = SarBuffer[i+1];
sar = price + start*(ep - price);
//----
if(dirlong)
{
if(ep < price_high && (start + Step) <= Maximum)
start += Step;
//----
if(price_high < HighG[i+1] && i == Bars - 2)
sar = SarBuffer[i+1];
price = LowG[i+1];
//----
if(sar > price)
sar = price;
price = LowG[i+2];
//----
if(sar > price)
sar = price;
//----
if(sar > price_low)
{
SaveLastReverse(i, true, start, price_low, last_high, ep, sar);
start = Step;
dirlong = false;
ep = price_low;
last_low = price_low;
SarBuffer[i] = last_high;
i--;
continue;
}
//----
if(ep < price_high)
{
last_high = price_high;
ep = price_high;
}
} //dir-long
else
{
if(ep > price_low && (start + Step) <= Maximum)
start += Step;
//----
if(price_low < LowG[i+1] && i == Bars - 2)
sar = SarBuffer[i+1];
price = HighG[i+1];
//----
if(sar < price)
sar = price;
price = HighG[i+2];
//----
if(sar < price)
sar = price;
//----
if(sar < price_high)
{
SaveLastReverse(i, false, start, last_low, price_high, ep,sar);
start = Step;
dirlong = true;
ep = price_high;
last_high = price_high;
SarBuffer[i] = last_low;
i--;
continue;
}
//----
if(ep > price_low)
{
last_low = price_low;
ep = price_low;
}
} //dir-short
SarBuffer[i] = sar;
i--;
} //while
// sar=SarBuffer[0];
// price=iSAR(NULL,0,Step,Maximum,0);
// if(sar!=price) Print("custom=",sar," SAR=",price," counted=",counted_bars);
// if(sar==price) Print("custom=",sar," SAR=",price," counted=",counted_bars);
//----
for(i=limit;i>=0;i--) SAR[i]=SarBuffer[i]-Base[i];
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
---