Indicators Used
Moving average indicator
0 Views
0 Downloads
0 Favorites
iStoch.Gap
/*
âûçîâ èç êîäîâ - ñòàíäàðòíûå ïîëÿ + ïîëÿ Sens è GapPoints
iCustom(
   string symbol,       // ñèìâîëüíîå èìÿ èíñòðóìåíòà (NULL- òåêóùèé)
   int timeframe,       // òàéì-ôðåéì (0- òåêóùèé)
   "StochNR.Gap",       // èìÿ ýòîãî èíäèêàòîðà
   //
   int %Kperiod,        // ïåðèîä óñðåäíåíèÿ îñíîâíîé ëèíèè èíäèêàòîðà
   int %Dperiod,        // îòêëîíåíèå îò îñíîâíîé ëèíèè
   int slowing,         // ñäâèã èíäèêàòîðà îòíîñèòåëüíî öåíîâîãî ãðàôèêà
   int method,          // ìåòîä óñðåäíåíèÿ:
                           // 0- SMA (ïðîñòàÿ),
                           // 1- EMA (ýêñïîíåíöèàëüíàÿ),
                           // 2- SSMA (ñãëàæåííàÿ),
                           // 3- LWMA (ëèíåéíî-âçâåøåííàÿ)
   int price_field,     // òèï öåíû ïîèñêà ýêñòðåìóìîâ:
                           // 0- High/Low
                           // 1- Close/Close
   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 GapPoints=0; // ïîðîã èäåíòèôèêàöèè ãýïà â ïï.
 int GapHours=8; // ïîðîã ïî âðåìåíè â ÷àñàõ (>0) èëè â ìèíóòàõ (<0)
// èíä.áóôåðû
double   Main[], // ãëàâíàÿ
         Signal[], // ñèãíàëüíàÿ
         Pos[], // ïîçèöèîíèðóåìàÿ öåíà
         Max[], // öåíà ïîèñêà ìàêñèìóìîâ
         Min[]; // öåíà ïîèñêà ìèíèìóìîâ

void init() {
   // èíäèêàòîðíûå áóôåðû 
   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); // öåíà ïîèñêà ìèíèìóìîâ
   // êîðîòêîå èìÿ
   _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,i); // âûçîâ ô-èè ñòîõàñòèêà
   // ðàñ÷åò ñèãíàëüíîé
   for(i=limit; i>=0; i--) Signal[i]=iMAOnArray(Main,Bars,Dperiod,0,Dmethod,i);
  }

double Stoch(int Kperiod, int Slowing, 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; // ðàçìàõ
   if(delta==0) return(50); // äåëåíèå íà íîëü
   else return(100*(c-min)/delta); // ñòîõàñòèê
  }

Comments

Markdown supported. Formatting help

Markdown Formatting Guide

Element Markdown Syntax
Heading # H1
## H2
### H3
Bold **bold text**
Italic *italicized text*
Link [title](https://www.example.com)
Image ![alt text](image.jpg)
Code `code`
Code Block ```
code block
```
Quote > blockquote
Unordered List - Item 1
- Item 2
Ordered List 1. First item
2. Second item
Horizontal Rule ---