Indicators Used
0
Views
0
Downloads
0
Favorites
iStochNR.Gap
/*
âûçîâ èç êîäîâ - ñòàíäàðòíûå ïîëÿ + ïîëÿ Sens è GapPoints
iCustom(
string symbol, // ñèìâîëüíîå èìÿ èíñòðóìåíòà (NULL- òåêóùèé)
int timeframe, // òàéì-ôðåéì (0- òåêóùèé)
"StochNR.Gap", // èìÿ ýòîãî èíäèêàòîðà
//
int %Kperiod, // ïåðèîä óñðåäíåíèÿ îñíîâíîé ëèíèè èíäèêàòîðà
int %Dperiod, // îòêëîíåíèå îò îñíîâíîé ëèíèè
int slowing, // ñäâèã èíäèêàòîðà îòíîñèòåëüíî öåíîâîãî ãðàôèêà
int method, // ìåòîä óñðåäíåíèÿ:
// 0 - MODE_SMA - ïðîñòàÿ
// 1 - MODE_EMA - ýêñïîíåíöèàëüíàÿ
// 2 - MODE_SMMA - ñãëàæåííàÿ
// 3 - MODE_LWMA - ëèíåéíî-âçâåøåííàÿ
int price_field, // òèï öåíû ïîèñêà ýêñòðåìóìîâ:
// 0- High/Low
// 1- Close/Close
int Sens // ïîðîã ÷óâñòâèòåëüíîñòè â ïï.
int GapPoints, // ïîðîã â ïï.äëÿ èäåíòèôèêàöèè ãýïà; 0- ñòàíäàðíûé ðåæèì
//
int mode, // mode - íîìåð áóôåðà èíäèêàòîðà:
// 0- îñíîâíàÿ ëèíèÿ
// 1- ñèãíàëüíàÿ
int shift // ñäâèã
)
==============
// ãëàâíàÿ
iCustom(NULL,0,"StochNR.Gap",Kperiod,Dperiod,Slowing,Dmethod,Price,Sens,GapPoints, 0,i);
// ñèãíàëüíàÿ
iCustom(NULL,0,"StochNR.Gap",Kperiod,Dperiod,Slowing,Dmethod,Price,Sens,GapPoints, 1,i);
*/
#property indicator_separate_window // â îòä. îêíå
#property indicator_buffers 2
#property indicator_color1 LightSeaGreen // ãëàâíàÿ
#property indicator_color2 Red // ñèãíàëüíàÿ
#property indicator_style2 2
#property indicator_maximum 100
#property indicator_minimum 0
#property indicator_level1 80
#property indicator_level2 20
// âõîäíûå ïàðàìåòðû
extern int Kperiod=5; // %K
extern int Dperiod=3; // %D ñèãíàëüíàÿ
extern int Slowing=3; // çàìåäëåíèå
extern int Dmethod=0; // òèï MA ñèãíàëüíîé
extern bool Price=0; // 0 - öåíà ïî Close, ýêñòð. ïî High/low, 1 - âñå ïî Close
extern int Sens=0; // ÷óâñòâèòåëüíîñòü â ïï.
double sens; // ÷óâñòâèòåëüíîñòü â öåíàõ
extern int GapPoints=0; // ïîðîã èäåíòèôèêàöèè ãýïà â ïï.
extern int GapHours=8; // ïîðîã ïî âðåìåíè â ÷àñàõ (>0) èëè â ìèíóòàõ (<0)
// èíä.áóôåðû
double Main[], // ãëàâíàÿ
Signal[], // ñèãíàëüíàÿ
Pos[], // ïîçèöèîíèðóåìàÿ öåíà
Max[], // öåíà ïîèñêà ìàêñèìóìîâ
Min[]; // öåíà ïîèñêà ìèíèìóìîâ
void init() {
sens=Sens*Slowing*Point; // ÷óâñòâèòåëüíîñòü â öåíàõ
// èíäèêàòîðíûå áóôåðû
IndicatorBuffers(5);
SetIndexBuffer(0,Main); // ãëàâíàÿ
string _str="("+Kperiod+","+Slowing+")";
SetIndexLabel(0,"Main"+_str);
SetIndexBuffer(1,Signal); // ñèãíàëüíàÿ
_str="("+Dperiod+")";
SetIndexLabel(1,"Signal"+_str);
SetIndexBuffer(2,Pos); // ïîçèöèîíèðóåìàÿ öåíà
SetIndexBuffer(3,Max); // öåíà ïîèñêà ìàêñèìóìîâ
SetIndexBuffer(4,Min); // öåíà ïîèñêà ìèíèìóìîâ
// êîðîòêîå èìÿ
if(Sens!=0) _str=Sens+" "; else _str="";
_str=_str+"Stoch ";
if(Price==0) _str=_str+"H/L";
else _str=_str+"C/C";
_str=_str+" ("+Kperiod+","+Dperiod+","+Slowing+")";
IndicatorShortName(_str);
}
void start() {
// ãðàíèöà ïåðåñ÷åòà
int limit=Bars-IndicatorCounted()-1;
if(limit>1) limit=Bars-1;
// çàïîëíåíèå ìàññèâîâ
for(int i=limit; i>=0; i--) {
double base=iCustom(NULL,0,"KillGap",GapPoints,GapHours,0,1,i); // ãýïîâûé ñäâèã
Pos[i]=Close[i]+base; // ïîçèöèîíèðóåìàÿ öåíà
// ìàññèâû ýêñòðåìóìîâ
if(Price) { // ïî Close
Max[i]=Pos[i]; // öåíà ïîèñêà ìàêñèìóìîâ
Min[i]=Pos[i]; // öåíà ïîèñêà ìèíèìóìîâ
}
else { // ïî High/Low
Max[i]=High[i]+base; // öåíà ïîèñêà ìàêñèìóìîâ
Min[i]=Low[i] +base; // öåíà ïîèñêà ìèíèìóìîâ
}
}
// ðàñ÷åò ãëàâíîé ëèíèè
for(i=limit; i>=0; i--) Main[i]=Stoch(Kperiod,Slowing,sens,i); // âûçîâ ô-èè ñòîõàñòèêà
// ðàñ÷åò ñèãíàëüíîé
for(i=limit; i>=0; i--) Signal[i]=iMAOnArray(Main,Bars,Dperiod,0,Dmethod,i);
}
double Stoch(int Kperiod, int Slowing, double sens, int i) {
if(i+Kperiod+Slowing>Bars) return(-1); // íåäîñòàòî÷íî áàðîâ - âûõîä
// ýêñòðåìóìû öåíû â öèêëå çàìåäëåíèÿ/ñãëàæèâàíèÿ
double max,min,c;
for(int j=i; j<i+Slowing; j++) {
max+=Max[ArrayMaximum(Max,Kperiod,j)]; // ìàêñèìóìû
min+=Min[ArrayMinimum(Min,Kperiod,j)]; // ìèíèìóìîû
c+=Pos[j]; // ïîçèöèîíèðóåìîå çíà÷åíèå
}
// øóìîïîäàâëåíèå
double delta=max-min; // ðàçìàõ
double diff=sens-delta; // ðàçíèöà ìåæäó ïîðîãîì ÷óâñòâ. è ðàçìàõîì
if(diff>0) { // åñëè ðàçíèöà >0 (ðàçìàõ ìåíüøå ïîðîãà), òî
delta=sens; // ðàçìàõ = ïîðîãó,
min-=diff/2; // íîâîå çíà÷åíèå ìèíèìóìà
}
// âû÷èñëåíèå îñöèëëÿòîðà
if(delta==0) return(50); // äåëåíèå íà íîëü
else return(100*(c-min)/delta); // ñòîõàñòèê
}
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
---