AdaptiveRenko

Indicators Used
Indicator of the average true rangeStandard Deviation indicator
Miscellaneous
Implements a curve of type %1
0 Views
0 Downloads
0 Favorites
AdaptiveRenko
/*
<<ÂÛÇÎÂ ÈÇ ÊÎÄÎÂ>>

iCustom(NULL,0,"AdaptiveRenko",
   K,             // ìíîæèòåëü ATR (>0) èëè StDev (<0) 
   VltPeriod,     // ïåðèîä âîëàòèëüíîñòè; çíàê ñëóæèò òèïîì öåíû êàíàëà: ïî Close (>0) èëè ïî High/Low (<0)
   WideMin,       // ìèíèìàëüíàÿ òîëùèíà êèðïè÷à â ïï.
   N,             // áóôåðû: 0- ïîääåðæêà, 1- ñîïðîòèâëåíèå, 2- âåðõí.ãð.êèðïè÷à, 3- íèæíÿÿ
   i)             // ñäâèã
*/
#property indicator_chart_window // â îêíå èíñòðóìåíòà
#property indicator_buffers 4
#property indicator_color1 Green // 
#property indicator_color2 Red // 
#property indicator_color3 Green // 
#property indicator_color4 Red // 


// âõîäíûå ïàðàìåòðû
extern double K=1; // ìíîæèòåëü ATR (>0) èëè StDev (<0) 
 bool ATR_StD=1; // 0- StDev, 1- ATR
extern int VltPeriod=10; // ïåðèîä âîëàòèëüíîñòè ïî Close (>0) èëè ïî High/Low (<0)
 bool Price=0; // 0- Close, 1- High/Low
extern int WideMin=2; // ìèíèìàëüíàÿ òîëùèíà êèðïè÷à â ïï.
   double sens; // ìèíèìàëüíàÿ òîëùèíà êèðïè÷à â öåíàõ

 int History=0; // 0- âñå áàðû

// èíä.áóôåðû
double   UpTrend[], // ïîääåðæêà
         DnTrend[], // ñîïðîòèâëåíèå
         UP[], // âåðõíÿÿ ãðàíèöà êèðïè÷åé
         DN[]; // íèæíÿÿ

// èíèöèàëèçàöèÿ
void init()
  {
   string _v="Renko";
   if(VltPeriod<0) {VltPeriod=-VltPeriod; Price=1; _v=_v+"(HiLo) ";} else _v=_v+"(Close) ";
   if(K!=0) {
      _v=_v+DoubleToStr(MathAbs(K),1)+"x";
      if(K<0) {K=-K; ATR_StD=0; _v=_v+"StDev(";} else _v=_v+"ATR(";
      _v=_v+VltPeriod+") ";
     }
   if(WideMin>0) {sens=WideMin*Point; _v=_v+"min="+WideMin+"p.";}
   Comment(_v);
   
   SetIndexBuffer(0,UpTrend);
   SetIndexStyle(0,DRAW_LINE,0,2);
   SetIndexEmptyValue(0,0.0);

   SetIndexBuffer(1,DnTrend);
   SetIndexStyle(1,DRAW_LINE,0,2);
   SetIndexEmptyValue(1,0.0);

   SetIndexBuffer(2,UP);
   SetIndexStyle(2,DRAW_LINE,2);

   SetIndexBuffer(3,DN);
   SetIndexStyle(3,DRAW_LINE,2);

  }

// ô-ÿ äîïîëíèòåëüíîé èíèöèàëèçàöèè
int reinit() 
  {
   ArrayInitialize(UpTrend,0.0); // îáíóëåíèå ìàññèâà
   ArrayInitialize(DnTrend,0.0); // îáíóëåíèå ìàññèâà
   ArrayInitialize(DN,0.0); // îáíóëåíèå ìàññèâà
   ArrayInitialize(UP,0.0); // îáíóëåíèå ìàññèâà
   return(0);
  }

void deinit()
  {
   Comment("");
  }

void start()
  {
   int ic=IndicatorCounted();
   if(Bars-ic-1>1) ic=reinit(); // åñëè åñòü ïðîïóùåííûå áàðû íå íà ïîäêëþ÷åíèè - ïåðåñ÷åò
   int limit=Bars-ic-1; // êîë-âî ïåðåñ÷åòîâ
   if(ic==0) limit-=VltPeriod;
   if(History>0) limit=MathMin(limit,History-1); // êîë-âî ïåðåñ÷åòîâ ïî èñòîðèè

   for(int i=limit; i>=0; i--) { // öèêë ïåðåñ÷åòà ïî ÂÑÅÌ áàðàì
      bool reset=i==limit && limit>1; // ñáðîñ íà ïåðâîé èòåðàöèè öèêëà ïåðåñ÷åòà

      int sh=i+1;
      if(!Price) {double Hi=Close[sh]; double Lo=Hi;}
      else {Hi=High[sh]; Lo=Low[sh];} 
      
      static double Brick,Up,Dn;
      if(reset) {
         Brick=MathMax(K*(Hi-Lo),sens);
         Up=Hi; Dn=Lo;
        }

      if(ATR_StD) double vlt=iATR(NULL,0,VltPeriod, sh);
      else vlt=iStdDev(NULL,0,VltPeriod,0,0,0, sh);
      vlt=MathMax(K*vlt,sens);
        
      if(Hi>Up+Brick) {
         if(Brick==0) double BricksUp=0; 
         else BricksUp=MathFloor((Hi-Up)/Brick)*Brick;
         Up=Up+BricksUp;
         Brick=vlt;
         Dn=Up-Brick;
         double BricksDn=0;
        }
      if(Lo<Dn-Brick) {
         if(Brick==0) BricksDn=0; 
         else BricksDn=MathFloor((Dn-Lo)/Brick)*Brick;
         Dn=Dn-BricksDn;
         Brick=vlt;
         Up=Dn+Brick;
         BricksUp=0;
        }
      // ãðàíèöû êèðïè÷åé
      UP[i]=Up; DN[i]=Dn;
      // òðåíä
      static bool dir;
      if(UP[i+1]<UP[i]) dir=1;
      if(DN[i+1]>DN[i]) dir=0;
      if(dir)  UpTrend[i]=DN[i]-Brick;
      else     DnTrend[i]=UP[i]+Brick;
      
     }   
  }



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 ---