0
Views
0
Downloads
0
Favorites
kagi-1
//+------------------------------------------------------------------+
//| KAGI-1.mq5 |
//| Copyright © 2005, Èíñòðóìåíòû òðåéäåðà |
//| http://www.traderstools.h15.ru |
//+------------------------------------------------------------------+
//---- àâòîðñòâî èíäèêàòîðà
#property copyright "Copyright © 2005, Èíñòðóìåíòû òðåéäåðà"
//---- ññûëêà íà ñàéò àâòîðà
#property link "http://www.traderstools.h15.ru"
//---- íîìåð âåðñèè èíäèêàòîðà
#property version "1.00"
//---- îòðèñîâêà èíäèêàòîðà â îòäåëüíîì îêíå
#property indicator_separate_window
//---- êîëè÷åñòâî èíäèêàòîðíûõ áóôåðîâ 3
#property indicator_buffers 3
//---- èñïîëüçîâàíî îäíî ãðàôè÷åñêîå ïîñòðîåíèå
#property indicator_plots 1
//+-----------------------------------+
//| Ïàðàìåòðû îòðèñîâêè èíäèêàòîðà |
//+-----------------------------------+
//---- îòðèñîâêà èíäèêàòîðà â âèäå ìíîãîöâåòíîé ëèíèè
#property indicator_type1 DRAW_COLOR_LINE
//---- â êà÷åñòâå öâåòîâ òðåõöâåòíîé ëèíèè èñïîëüçîâàíû
#property indicator_color1 clrMagenta,clrTeal
//---- ëèíèÿ èíäèêàòîðà - íåïðåðûâíàÿ êðèâàÿ
#property indicator_style1 STYLE_SOLID
//---- òîëùèíà ëèíèè èíäèêàòîðà ðàâíà 2
#property indicator_width1 2
//---- îòîáðàæåíèå ìåòêè èíäèêàòîðà
#property indicator_label1 "KAGI-1"
//+-----------------------------------+
//| Âõîäíûå ïàðàìåòðû èíäèêàòîðà |
//+-----------------------------------+
input bool Percent=true;
input uint Threshold=1;
input uint Size=12;
//+-----------------------------------+
//---- îáúÿâëåíèå äèíàìè÷åñêèõ ìàññèâîâ, êîòîðûå áóäóò â
//---- äàëüíåéøåì èñïîëüçîâàíû â êà÷åñòâå èíäèêàòîðíûõ áóôåðîâ
double KagiBuffer[];
double IndBuffer[];
double ColorIndBuffer[];
//----
double dThreshold;
//---- îáúÿâëåíèå öåëî÷èñëåííûõ ïåðåìåííûõ íà÷àëà îòñ÷åòà äàííûõ
int min_rates_total;
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
void OnInit()
{
//---- èíèöèàëèçàöèÿ êîíñòàíò
min_rates_total=2;
dThreshold=Threshold/_Point;
//---- ïðåâðàùåíèå äèíàìè÷åñêîãî ìàññèâà â èíäèêàòîðíûé áóôåð
SetIndexBuffer(0,IndBuffer,INDICATOR_DATA);
//---- èíäåêñàöèÿ ýëåìåíòîâ â áóôåðå êàê â òàéìñåðèè
ArraySetAsSeries(IndBuffer,true);
//---- ïðåâðàùåíèå äèíàìè÷åñêîãî ìàññèâà â èíäèêàòîðíûé áóôåð
SetIndexBuffer(1,ColorIndBuffer,INDICATOR_COLOR_INDEX);
//---- èíäåêñàöèÿ ýëåìåíòîâ â áóôåðå êàê â òàéìñåðèè
ArraySetAsSeries(ColorIndBuffer,true);
//---- ïðåâðàùåíèå äèíàìè÷åñêîãî ìàññèâà â èíäèêàòîðíûé áóôåð
SetIndexBuffer(2,KagiBuffer,INDICATOR_CALCULATIONS);
//---- èíäåêñàöèÿ ýëåìåíòîâ â áóôåðå êàê â òàéìñåðèè
ArraySetAsSeries(KagiBuffer,true);
//---- îñóùåñòâëåíèå ñäâèãà íà÷àëà îòñ÷åòà îòðèñîâêè èíäèêàòîðà 1
PlotIndexSetInteger(0,PLOT_DRAW_BEGIN,min_rates_total);
//---- óñòàíîâêà çíà÷åíèé èíäèêàòîðà, êîòîðûå íå áóäóò âèäèìû íà ãðàôèêå
PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,0.0);
//---- èíèöèàëèçàöèÿ ïåðåìåííîé äëÿ êîðîòêîãî èìåíè èíäèêàòîðà
string shortname="KAGI-1";
//--- ñîçäàíèå èìåíè äëÿ îòîáðàæåíèÿ â îòäåëüíîì ïîäîêíå è âî âñïëûâàþùåé ïîäñêàçêå
IndicatorSetString(INDICATOR_SHORTNAME,shortname);
//--- îïðåäåëåíèå òî÷íîñòè îòîáðàæåíèÿ çíà÷åíèé èíäèêàòîðà
IndicatorSetInteger(INDICATOR_DIGITS,_Digits);
//---- çàâåðøåíèå èíèöèàëèçàöèè
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total, // êîëè÷åñòâî èñòîðèè â áàðàõ íà òåêóùåì òèêå
const int prev_calculated,// êîëè÷åñòâî èñòîðèè â áàðàõ íà ïðåäûäóùåì òèêå
const datetime &time[],
const double &open[],
const double &high[],
const double &low[],
const double &close[],
const long &tick_volume[],
const long &volume[],
const int &spread[])
{
//---- ïðîâåðêà êîëè÷åñòâà áàðîâ íà äîñòàòî÷íîñòü äëÿ ðàñ÷åòà
if(rates_total<min_rates_total) return(0);
//---- îáúÿâëåíèå ïåðåìåííûõ ñ ïëàâàþùåé òî÷êîé
double;
//---- îáúÿâëåíèå öåëî÷èñëåííûõ ïåðåìåííûõ
int i,j,Ind,size1,Threshold1,KagiBuffShift=0;
//---- èíäåêñàöèÿ ýëåìåíòîâ â ìàññèâàõ êàê â òàéìñåðèÿõ
ArraySetAsSeries(close,true);
//----
KagiBuffer[KagiBuffShift]=close[rates_total-1];
//----
for(int bar=rates_total-2; bar>=0; bar--)
{
if(Percent) Threshold1=int(close[bar]/100*dThreshold);
else Threshold1=int(Threshold);
//----
if(!KagiBuffShift)
{
if(close[bar]>=KagiBuffer[KagiBuffShift]+Threshold1*_Point)
{
KagiBuffShift++;
KagiBuffer[KagiBuffShift]=close[bar];
}
//----
if(close[bar]<=KagiBuffer[KagiBuffShift]-Threshold1*_Point)
{
KagiBuffShift++;
KagiBuffer[KagiBuffShift]=close[bar];
}
}
//----
if(KagiBuffShift>0)
{
if(KagiBuffer[KagiBuffShift]>KagiBuffer[KagiBuffShift-1])
{
if(close[bar]>KagiBuffer[KagiBuffShift]) KagiBuffer[KagiBuffShift]=close[bar];
//----
if(close[bar]<=KagiBuffer[KagiBuffShift]-Threshold1*_Point)
{
KagiBuffShift++;
KagiBuffer[KagiBuffShift]=close[bar];
}
}
//----
if(KagiBuffer[KagiBuffShift]<KagiBuffer[KagiBuffShift-1])
{
if(close[bar]<KagiBuffer[KagiBuffShift]) KagiBuffer[KagiBuffShift]=close[bar];
//----
if(close[bar]>=KagiBuffer[KagiBuffShift]+Threshold1*_Point)
{
KagiBuffShift++;
KagiBuffer[KagiBuffShift]=close[bar];
}
}
}
}
//----
size1=int(MathMin(MathMax(3,Size),50));
//----
for(i=rates_total-1; i>=0; i--) IndBuffer[i]=0.0;
//----
for(i=0; i<=KagiBuffShift; i++)
for(j=0; j<size1; j++)
{
int barX=MathMin(MathMax((KagiBuffShift-i)*size1-j,0),rates_total-1);
IndBuffer[barX]=KagiBuffer[i];
ColorIndBuffer[barX]=0;
}
//----
if(KagiBuffer[0]<KagiBuffer[1]) Ind=1;
else Ind=2;
//----
for(i=0; i<2; i++) for(j=0; j<size1; j++)
if(Ind==1 || Ind==2) ColorIndBuffer[MathMin(MathMax((KagiBuffShift-i)*size1-j,0),rates_total-1)]=1;
//----
for(i=2; i<=KagiBuffShift; i++)
{
if(Ind==2 && KagiBuffer[i]>KagiBuffer[i-1] && KagiBuffer[i]>KagiBuffer[i-2])
{
ColorIndBuffer[MathMin(MathMax((KagiBuffShift-i)*size1+1,0),rates_total-1)]=1;
Ind=1;
}
//----
if(Ind==1 && KagiBuffer[i]<KagiBuffer[i-1] && KagiBuffer[i]<KagiBuffer[i-2])
{
ColorIndBuffer[MathMin(MathMax((KagiBuffShift-i)*size1,0),rates_total-1)]=1;
Ind=2;
}
//----
if(Ind==1) for(j=0; j<size1; j++) ColorIndBuffer[MathMin(MathMax((KagiBuffShift-i)*size1-j,0),rates_total-1)]=1;
}
//----
return(rates_total);
}
//+------------------------------------------------------------------+
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
---