Indicators Used
Miscellaneous
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 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
---