0
Views
0
Downloads
0
Favorites
ama_slope_v1
//+------------------------------------------------------------------+
//| AMA_SLOPE.mq5 |
//| Copyright © 2007, Kalenzo |
//| bartlomiej.gorski@gmail.com |
//+------------------------------------------------------------------+
//--- àâòîðñòâî èíäèêàòîðà
#property copyright "Copyright © 2007, Kalenzo"
//--- ññûëêà íà ñàéò àâòîðà
#property link "bartlomiej.gorski@gmail.combartlomiej.gorski@gmail.com"
//--- íîìåð âåðñèè èíäèêàòîðà
#property version "1.00"
//--- îòðèñîâêà èíäèêàòîðà â îòäåëüíîì îêíå
#property indicator_separate_window
//--- äëÿ ðàñ÷åòà è îòðèñîâêè èíäèêàòîðà èñïîëüçîâàí îäèí áóôåð
#property indicator_buffers 1
//--- èñïîëüçîâàíî îäíî ãðàôè÷åñêå ïîñòðîåíèå
#property indicator_plots 1
//+----------------------------------------------+
//| Ïàðàìåòðû îòðèñîâêè èíäèêàòîðà |
//+----------------------------------------------+
//--- îòðèñîâêà èíäèêàòîðà 1 â âèäå ëèíèè
#property indicator_type1 DRAW_LINE
//--- â êà÷åñòâå öâåòà áû÷åé ëèíèè èíäèêàòîðà èñïîëüçîâàí ñèíå-ôèîëåòîâûé öâåò
#property indicator_color1 clrBlueViolet
//--- ëèíèÿ èíäèêàòîðà 1 - íåïðåðûâíàÿ êðèâàÿ
#property indicator_style1 STYLE_SOLID
//--- òîëùèíà ëèíèè èíäèêàòîðà 1 ðàâíà 3
#property indicator_width1 3
//--- îòîáðàæåíèå áû÷åé ìåòêè èíäèêàòîðà
#property indicator_label1 "AMA_SLOPE"
//+----------------------------------------------+
//| Âõîäíûå ïàðàìåòðû èíäèêàòîðà |
//+----------------------------------------------+
input uint ama_period=9; // Ïåðèîä AMA
input uint fast_ma_period=2; // Ïåðèîä áûñòðîé ñêîëüçÿùåé
input uint slow_ma_period=30; // Ïåðèîä ìåäëåííîé ñêîëüçÿùåé
input double G=2.0; // Ñòåïåíü, â êîòîðóþ âîçâîäèòñÿ ñãëàæèâàþùàÿ êîíñòàíòà
input int AMAShift = 0; // Ñäâèã èíäèêàòîðà ïî ãîðèçîíòàëè â áàðàõ
input double dK = 1.0; // Êîýôôèöèåíò äëÿ ôèëüòðà
//+----------------------------------------------+
//--- îáúÿâëåíèå äèíàìè÷åñêèõ ìàññèâîâ, êîòîðûå â äàëüíåéøåì
//--- áóäóò èñïîëüçîâàíû â êà÷åñòâå èíäèêàòîðíûõ áóôåðîâ
double AMABuffer[];
//--- îáúÿâëåíèå ïåðåìåííûõ ñ ïëàâàþùåé òî÷êîé äëÿ êîíñòàíò
double dSC,slowSC,fastSC;
int AMA_Handle,dAMA_Handle;
//--- îáúÿâëåíèå öåëûõ ïåðåìåííûõ íà÷àëà îòñ÷åòà äàííûõ
int min_rates_total;
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
void OnInit()
{
//--- èíèöèàëèçàöèÿ ãëîáàëüíûõ ïåðåìåííûõ
min_rates_total=int(ama_period+1);
//--- ïðåâðàùåíèå äèíàìè÷åñêîãî ìàññèâà AMABuffer â èíäèêàòîðíûé áóôåð
SetIndexBuffer(0,AMABuffer,INDICATOR_DATA);
//--- îñóùåñòâëåíèå ñäâèãà èíäèêàòîðà 1 ïî ãîðèçîíòàëè íà ama_shift
PlotIndexSetInteger(0,PLOT_SHIFT,AMAShift);
//--- îñóùåñòâëåíèå ñäâèãà íà÷àëà îòñ÷åòà îòðèñîâêè èíäèêàòîðà 1 íà 1
PlotIndexSetInteger(0,PLOT_DRAW_BEGIN,min_rates_total);
//--- çàïðåò íà îòðèñîâêó èíäèêàòîðîì ïóñòûõ çíà÷åíèé
PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,0.0);
//--- èíèöèàëèçàöèè ïåðåìåííîé äëÿ êîðîòêîãî èìåíè èíäèêàòîðà
string shortname;
StringConcatenate(shortname,"AMA_SLOPE( ",ama_period,", ",fast_ma_period,", ",slow_ma_period," )");
//--- ñîçäàíèå èìåíè äëÿ îòîáðàæåíèÿ â îòäåëüíîì ïîäîêíå è âî âñïëûâàþùåé ïîäñêàçêå
IndicatorSetString(INDICATOR_SHORTNAME,shortname);
//--- îïðåäåëåíèå òî÷íîñòè îòîáðàæåíèÿ çíà÷åíèé èíäèêàòîðà
IndicatorSetInteger(INDICATOR_DIGITS,0);
//--- èíèöèàëèçàöèÿ êîíñòàíò
slowSC = (2.0 / (slow_ma_period + 1));
fastSC = (2.0 / (fast_ma_period + 1));
dSC=fastSC-slowSC;
//---
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total, // êîëè÷åñòâî èñòîðèè â áàðàõ íà òåêóùåì òèêå
const int prev_calculated,// êîëè÷åñòâî èñòîðèè â áàðàõ íà ïðåäûäóùåì òèêå
const int begin, // íîìåð íà÷àëà äîñòîâåðíîãî îòñ÷åòà áàðîâ
const double &price[]) // öåíîâîé ìàññèâ äëÿ ðàñ÷åòà èíäèêàòîðà
{
//--- ïðîâåðêà êîëè÷åñòâà áàðîâ íà äîñòàòî÷íîñòü äëÿ ðàñ÷åòà
if(rates_total<min_rates_total+begin) return(0);
//--- îáúÿâëåíèÿ ëîêàëüíûõ ïåðåìåííûõ
int first,bar;
double noise,AMA,signal,ER,ERSC,SSC,price0,price1;
static double AMA_;
//--- ðàñ÷åò ñòàðòîâîãî íîìåðà first äëÿ öèêëà ïåðåñ÷åòà áàðîâ
if(prev_calculated>rates_total || prev_calculated<=0) // ïðîâåðêà íà ïåðâûé ñòàðò ðàñ÷åòà èíäèêàòîðà
{
first=min_rates_total+begin+1; // ñòàðòîâûé íîìåð äëÿ ðàñ÷åòà âñåõ áàðîâ
AMA_=price[first-1];
AMA=AMA_;
//--- óâåëè÷èì ïîçèöèþ íà÷àëà äàííûõ íà begin áàðîâ, âñëåäñòâèå ðàñ÷åòîâ íà äàííûõ äðóãîãî èíäèêàòîðà
if(begin>0)
{
PlotIndexSetInteger(0,PLOT_DRAW_BEGIN,min_rates_total+begin);
}
}
else
{
first=prev_calculated-1; // ñòàðòîâûé íîìåð äëÿ ðàñ÷åòà íîâûõ áàðîâ
AMA=AMA_;
}
//--- îñíîâíîé öèêë ðàñ÷åòà èíäèêàòîðà AMA
for(bar=first; bar<rates_total && !IsStopped(); bar++)
{
//---
noise=_Point/10000;
for(int iii=0; iii<int(ama_period); iii++)
{
price0=price[bar-iii-0];
price1=price[bar-iii-1];
noise+=MathAbs(price0-price1);
}
//---
price0=price[bar];
price1=price[bar-ama_period];
signal=MathAbs(price0-price1);
ER=signal/noise;
ERSC=ER*dSC;
SSC=ERSC+slowSC;
AMA=AMA+(MathPow(SSC,G)*(price0-AMA));
//--- èíèöèàëèçàöèÿ ÿ÷åéêè èíäèêàòîðíîãî áóôåðà ïîëó÷åííûì çíà÷åíèåì AMA
AMABuffer[bar]=(AMA-AMA_)/_Point;
if(bar<rates_total-1) AMA_=AMA;
}
//---
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
---