0
Views
0
Downloads
0
Favorites
AroonOscillator
//+------------------------------------------------------------------+
//| AroonOscillator.mq5 |
//| Copyright © 2011, Nikolay Kositsin |
//| Khabarovsk, farria@mail.redcom.ru |
//+------------------------------------------------------------------+
//---- àâòîðñòâî èíäèêàòîðà
#property copyright "Copyright © 2011, Nikolay Kositsin"
//---- ññûëêà íà ñàéò àâòîðà
#property link "farria@mail.redcom.ru"
//---- íîìåð âåðñèè èíäèêàòîðà
#property version "1.00"
//---- îòðèñîâêà èíäèêàòîðà â îòäåëüíîì îêíå
#property indicator_separate_window
//---- êîëè÷åñòâî èíäèêàòîðíûõ áóôåðîâ 1
#property indicator_buffers 1
//---- èñïîëüçîâàíî âñåãî îäíî ãðàôè÷åñêèå ïîñòðîåíèå
#property indicator_plots 1
//+-----------------------------------+
//| Ïàðàìåòðû îòðèñîâêè èíäèêàòîðà |
//+-----------------------------------+
//---- îòðèñîâêà èíäèêàòîðà â âèäå òðåõöâåòíîé ëèíèè
#property indicator_type1 DRAW_LINE
//---- â êà÷åñòâå öâåòà ëèíèè èñïîëüçîâàí êðàñíûé öâåò
#property indicator_color1 clrRed
//---- ëèíèÿ èíäèêàòîðà - ñïëîøíàÿ
#property indicator_style1 STYLE_SOLID
//---- òîëùèíà ëèíèè èíäèêàòîðà ðàâíà 2
#property indicator_width1 2
//---- îòîáðàæåíèå ìåòêè ñèãíàëüíîé ëèíèè
#property indicator_label1 "AroonOscillator"
//+----------------------------------------------+
//| Ïàðàìåòðû îòîáðàæåíèÿ ãîðèçîíòàëüíûõ óðîâíåé |
//+----------------------------------------------+
#property indicator_level1 +50
#property indicator_level2 0
#property indicator_level3 -50
#property indicator_levelcolor clrGray
#property indicator_levelstyle STYLE_DASHDOTDOT
//+----------------------------------------------+
//| Âõîäíûå ïàðàìåòðû èíäèêàòîðà |
//+----------------------------------------------+
input int AroonPeriod= 9; // ïåðèîä èíäèêàòîðà
input int AroonShift = 0; // ñäâèã èíäèêàòîðà ïî ãîðèçîíòàëè â áàðàõ
//+----------------------------------------------+
//---- îáúÿâëåíèå äèíàìè÷åñêèõ ìàññèâîâ, êîòîðûå áóäóò â
// äàëüíåéøåì èñïîëüçîâàíû â êà÷åñòâå èíäèêàòîðíûõ áóôåðîâ
double ExtLineBuffer[];
//+------------------------------------------------------------------+
//| searching index of the highest bar |
//+------------------------------------------------------------------+
int iHighest(
const double &array[],// ìàññèâ äëÿ ïîèñêà èíäåêñà ìàêñèìàëüíîãî ýëåìåíòà
int count,// ÷èñëî ýëåìåíòîâ ìàññèâà (â íàïðàâëåíèè îò òåêóùåãî áàðà â ñòîðîíó óáûâàíèÿ èíäåêñà),
// ñðåäè êîòîðûõ äîëæåí áûòü ïðîèçâåäåí ïîèñê.
int startPos //èíäåêñ (ñìåùåíèå îòíîñèòåëüíî òåêóùåãî áàðà) íà÷àëüíîãî áàðà,
// ñ êîòîðîãî íà÷èíàåòñÿ ïîèñê íàèáîëüøåãî çíà÷åíèÿ
)
{
//----
int index=startPos;
//---- ïðîâåðêà ñòàðòîâîãî èíäåêñà íà êîððåêòíîñòü
if(startPos<0)
{
Print("Íåâåðíîå çíà÷åíèå â ôóíêöèè iHighest, startPos = ",startPos);
return(0);
}
//---- ïðîâåðêà çíà÷åíèÿ startPos íà êîððåêòíîñòü
if(startPos-count<0)
count=startPos;
double max=array[startPos];
//---- ïîèñê èíäåêñà
for(int i=startPos; i>startPos-count; i--)
{
if(array[i]>max)
{
index=i;
max=array[i];
}
}
//---- âîçâðàò èíäåêñà íàèáîëüøåãî áàðà
return(index);
}
//+------------------------------------------------------------------+
//| searching index of the lowest bar |
//+------------------------------------------------------------------+
int iLowest(
const double &array[],// ìàññèâ äëÿ ïîèñêà èíäåêñà ìèíèìàëüíîãî ýëåìåíòà
int count,// ÷èñëî ýëåìåíòîâ ìàññèâà (â íàïðàâëåíèè îò òåêóùåãî áàðà â ñòîðîíó óáûâàíèÿ èíäåêñà),
// ñðåäè êîòîðûõ äîëæåí áûòü ïðîèçâåäåí ïîèñê.
int startPos //èíäåêñ (ñìåùåíèå îòíîñèòåëüíî òåêóùåãî áàðà) íà÷àëüíîãî áàðà,
// ñ êîòîðîãî íà÷èíàåòñÿ ïîèñê íàèìåíüøåãî çíà÷åíèÿ
)
{
//----
int index=startPos;
//---- ïðîâåðêà ñòàðòîâîãî èíäåêñà íà êîððåêòíîñòü
if(startPos<0)
{
Print("Íåâåðíîå çíà÷åíèå â ôóíêöèè iLowest, startPos = ",startPos);
return(0);
}
//---- ïðîâåðêà çíà÷åíèÿ startPos íà êîððåêòíîñòü
if(startPos-count<0)
count=startPos;
double min=array[startPos];
//---- ïîèñê èíäåêñà
for(int i=startPos; i>startPos-count; i--)
{
if(array[i]<min)
{
index=i;
min=array[i];
}
}
//---- âîçâðàò èíäåêñà íàèìåíüøåãî áàðà
return(index);
}
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
void OnInit()
{
//---- ïðåâðàùåíèå äèíàìè÷åñêîãî ìàññèâà ExtLineBuffer â èíäèêàòîðíûé áóôåð
SetIndexBuffer(0,ExtLineBuffer,INDICATOR_DATA);
//---- èíèöèàëèçàöèè ïåðåìåííîé äëÿ êîðîòêîãî èìåíè èíäèêàòîðà
string shortname;
StringConcatenate(shortname,"AroonOscillator(",AroonPeriod,")");
//---- îñóùåñòâëåíèå ñäâèãà èíäèêàòîðà 1 ïî ãîðèçîíòàëè íà AroonShift
PlotIndexSetInteger(0,PLOT_SHIFT,AroonShift);
//---- ñîçäàíèå ìåòêè äëÿ îòîáðàæåíèÿ â Îêíå äàííûõ
PlotIndexSetString(0,PLOT_LABEL,shortname);
//---- ñîçäàíèå èìåíè äëÿ îòîáðàæåíèÿ â îòäåëüíîì ïîäîêíå è âî âñïëûâàþùåé ïîäñêàçêå
IndicatorSetString(INDICATOR_SHORTNAME,shortname);
//---- îïðåäåëåíèå òî÷íîñòè îòîáðàæåíèÿ çíà÷åíèé èíäèêàòîðà
IndicatorSetInteger(INDICATOR_DIGITS,0);
//---- çàïðåò íà îòðèñîâêó èíäèêàòîðîì ïóñòûõ çíà÷åíèé
PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,EMPTY_VALUE);
//----
}
//+------------------------------------------------------------------+
//| 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<AroonPeriod) return(0);
//---- îáúÿâëåíèÿ ëîêàëüíûõ ïåðåìåííûõ
int first,bar,highest,lowest;
//---- ðàñ÷åò ñòàðòîâîãî íîìåðà first äëÿ öèêëà ïåðåñ÷åòà áàðîâ
if(prev_calculated>rates_total || prev_calculated<=0) // ïðîâåðêà íà ïåðâûé ñòàðò ðàñ÷åòà èíäèêàòîðà
first=AroonPeriod-1; // ñòàðòîâûé íîìåð äëÿ ðàñ÷åòà âñåõ áàðîâ
else first=prev_calculated-1; // ñòàðòîâûé íîìåð äëÿ ðàñ÷åòà íîâûõ áàðîâ
//---- îñíîâíîé öèêë ðàñ÷åòà èíäèêàòîðà
for(bar=first; bar<rates_total; bar++)
{
highest=iHighest(high,AroonPeriod,bar);
lowest=iLowest(low,AroonPeriod,bar);
//----
ExtLineBuffer[bar]=100*(highest-lowest)/AroonPeriod;
}
//----
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
---