Price Data Components
0
Views
0
Downloads
0
Favorites
amka_v2
//+------------------------------------------------------------------+
//| AMkA.mq5 |
//| MQL4 Code: Copyright © 2004, GOODMAN & Mstera è AF |
//| MQL5 Code: Copyright © 2010, Nikolay Kositsin |
//| Khabarovsk, farria@mail.redcom.ru |
//+------------------------------------------------------------------+
//---- àâòîðñòâî èíäèêàòîðà
#property copyright "Copyright © 2004, by GOODMAN & Mstera è AF"
//---- ññûëêà íà ñàéò àâòîðà
#property link "http://forum.viac.ru/viewforum.php?f=7"
//---- íîìåð âåðñèè èíäèêàòîðà
#property version "1.00"
//---- îòðèñîâêà èíäèêàòîðà â ãëàâíîì îêíå
#property indicator_chart_window
//---- äëÿ ðàñ÷¸òà è îòðèñîâêè èíäèêàòîðà èñïîëüçîâàíî òðè áóôåðà
#property indicator_buffers 3
//---- èñïîëüçîâàíî òðè ãðàôè÷åñêèõ ïîñòðîåíèÿ
#property indicator_plots 3
//+----------------------------------------------+
//| Ïàðàìåòðû îòðèñîâêè ëèíèè AMA |
//+----------------------------------------------+
//---- îòðèñîâêà èíäèêàòîðà 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"
//+----------------------------------------------+
//| Ïàðàìåòðû îòðèñîâêè ìåäâåæüåãî èíäèêàòîðà |
//+----------------------------------------------+
//---- îòðèñîâêà èíäèêàòîðà 2 â âèäå ñèìâîëà
#property indicator_type2 DRAW_ARROW
//---- â êà÷åñòâå öâåòà ìåäâåæüåãî èíäèêàòîðà èñïîëüçîâàí êðàñíûé öâåò
#property indicator_color2 clrRed
//---- òîëùèíà ëèíèè èíäèêàòîðà 2 ðàâíà 2
#property indicator_width2 2
//---- îòîáðàæåíèå ìåäâåæüåé ìåòêè èíäèêàòîðà
#property indicator_label2 "Dn_Signal"
//+----------------------------------------------+
//| Ïàðàìåòðû îòðèñîâêè áû÷üãî èíäèêàòîðà |
//+----------------------------------------------+
//---- îòðèñîâêà èíäèêàòîðà 3 â âèäå ñèìâîëà
#property indicator_type3 DRAW_ARROW
//---- â êà÷åñòâå öâåòà áû÷üåãî èíäèêàòîðà èñïîëüçîâàí çåë¸íûé öâåò
#property indicator_color3 clrLime
//---- òîëùèíà ëèíèè èíäèêàòîðà 3 ðàâíà 2
#property indicator_width3 2
//---- îòîáðàæåíèå áû÷åé ìåòêè èíäèêàòîðà
#property indicator_label3 "Up_Signal"
//+----------------------------------------------+
//| Âõîäíûå ïàðàìåòðû èíäèêàòîðà |
//+----------------------------------------------+
input int ama_period=9; // ïåðèîä AMA
input int fast_ma_period=2; // ïåðèîä áûñòðîé ñêîëüçÿùåé
input int slow_ma_period=30; // ïåðèîä ìåäëåííîé ñêîëüçÿùåé
input double G=2.0; // ñòåïåíü, â êîòîðóþ âîçâîäèòñÿ ñãëàæèâàþùàÿ êîíñòàíòà
input int AMAShift = 0; // ñäâèã èíäèêàòîðà ïî ãîðèçîíòàëè â áàðàõ
input double dK = 1.0; //êîýôôèöèåíò äëÿ ôèëüòðà
//+----------------------------------------------+
//---- îáúÿâëåíèå äèíàìè÷åñêèõ ìàññèâîâ, êîòîðûå áóäóò â
// äàëüíåéøåì èñïîëüçîâàíû â êà÷åñòâå èíäèêàòîðíûõ áóôåðîâ
double AMABuffer[];
double BearsBuffer[];
double BullsBuffer[];
//---- îáúÿâëåíèå ïåðåìåííûõ ñ ïëàâàþùåé òî÷êîé äëÿ êîíñòàíò
double dSC,slowSC,fastSC; int AMA_Handle,dAMA_Handle;
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
void OnInit()
{
//---- ïðåâðàùåíèå äèíàìè÷åñêîãî ìàññèâà AMABuffer â èíäèêàòîðíûé áóôåð
SetIndexBuffer(0,AMABuffer,INDICATOR_DATA);
//---- îñóùåñòâëåíèå ñäâèãà èíäèêàòîðà 1 ïî ãîðèçîíòàëè íà ama_shift
PlotIndexSetInteger(0,PLOT_SHIFT,AMAShift);
//---- îñóùåñòâëåíèå ñäâèãà íà÷àëà îòñ÷¸òà îòðèñîâêè èíäèêàòîðà 1 íà 1
PlotIndexSetInteger(0,PLOT_DRAW_BEGIN,ama_period+1);
//---- ñîçäàíèå ìåòêè äëÿ îòîáðàæåíèÿ â DataWindow
PlotIndexSetString(0,PLOT_LABEL,"AMA");
//---- çàïðåò íà îòðèñîâêó èíäèêàòîðîì ïóñòûõ çíà÷åíèé
PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,0.0);
//---- ïðåâðàùåíèå äèíàìè÷åñêîãî ìàññèâà BearsBuffer â èíäèêàòîðíûé áóôåð
SetIndexBuffer(1,BearsBuffer,INDICATOR_DATA);
//---- îñóùåñòâëåíèå ñäâèãà èíäèêàòîðà 2 ïî ãîðèçîíòàëè íà ama_shift
PlotIndexSetInteger(1,PLOT_SHIFT,AMAShift);
//---- îñóùåñòâëåíèå ñäâèãà íà÷àëà îòñ÷¸òà îòðèñîâêè èíäèêàòîðà 2 íà ama_period + 2
PlotIndexSetInteger(1,PLOT_DRAW_BEGIN,ama_period+2);
//---- ñîçäàíèå ìåòêè äëÿ îòîáðàæåíèÿ â DataWindow
PlotIndexSetString(1,PLOT_LABEL,"DnSignal");
//---- âûáîð ñèìâîëà äëÿ îòðèñîâêè
PlotIndexSetInteger(1,PLOT_ARROW,159);
//---- çàïðåò íà îòðèñîâêó èíäèêàòîðîì ïóñòûõ çíà÷åíèé
PlotIndexSetDouble(1,PLOT_EMPTY_VALUE,0.0);
//---- ïðåâðàùåíèå äèíàìè÷åñêîãî ìàññèâà BullsBuffer â èíäèêàòîðíûé áóôåð
SetIndexBuffer(2,BullsBuffer,INDICATOR_DATA);
//---- îñóùåñòâëåíèå ñäâèãà èíäèêàòîðà 3 ïî ãîðèçîíòàëè íà ama_shift
PlotIndexSetInteger(2,PLOT_SHIFT,AMAShift);
//---- îñóùåñòâëåíèå ñäâèãà íà÷àëà îòñ÷¸òà îòðèñîâêè èíäèêàòîðà 3 íà ama_period + 2
PlotIndexSetInteger(2,PLOT_DRAW_BEGIN,ama_period+2);
//---- ñîçäàíèå ìåòêè äëÿ îòîáðàæåíèÿ â DataWindow
PlotIndexSetString(2,PLOT_LABEL,"UpSignal");
//---- âûáîð ñèìâîëà äëÿ îòðèñîâêè
PlotIndexSetInteger(2,PLOT_ARROW,159);
//---- çàïðåò íà îòðèñîâêó èíäèêàòîðîì ïóñòûõ çíà÷åíèé
PlotIndexSetDouble(2,PLOT_EMPTY_VALUE,0.0);
//---- èíèöèàëèçàöèè ïåðåìåííîé äëÿ êîðîòêîãî èìåíè èíäèêàòîðà
string shortname;
StringConcatenate(shortname,
"AMkA( ",ama_period,", ",fast_ma_period,", ",slow_ma_period," )");
//---- ñîçäàíèå èìåíè äëÿ îòîáðàæåíèÿ â îòäåëüíîì ïîäîêíå è âî âñïëûâàþùåé ïîäñêàçêå
IndicatorSetString(INDICATOR_SHORTNAME,shortname);
//---- îïðåäåëåíèå òî÷íîñòè îòîáðàæåíèÿ çíà÷åíèé èíäèêàòîðà
IndicatorSetInteger(INDICATOR_DIGITS,_Digits+1);
//---- èíèöèàëèçàöèÿ êîíñòàíò
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<2*ama_period+2+begin) return(0);
//---- îáúÿâëåíèÿ ëîêàëüíûõ ïåðåìåííûõ
int first,bar,iii;
double noise,AMA,signal,ER,ERSC,SSC,price0,price1;
double Sum,SMAdif,StDev,BULLS,BEARS,Filter;
static double dAMA[],dama;
//---- ðàñ÷¸ò ñòàðòîâîãî íîìåðà first äëÿ öèêëà ïåðåñ÷¸òà áàðîâ
if(prev_calculated>rates_total || prev_calculated<=0) // ïðîâåðêà íà ïåðâûé ñòàðò ðàñ÷¸òà èíäèêàòîðà
{
first=ama_period+2+begin; // ñòàðòîâûé íîìåð äëÿ ðàñ÷¸òà âñåõ áàðîâ
AMA=price[first-1];
if(ArrayResize(dAMA,ama_period)!=ama_period) return(0);
//---- óâåëè÷èì ïîçèöèþ íà÷àëà äàííûõ íà begin áàðîâ, âñëåäñòâèå ðàñ÷åòîâ íà äàííûõ äðóãîãî èíäèêàòîðà
if(begin>0)
{
PlotIndexSetInteger(0,PLOT_DRAW_BEGIN,ama_period+begin);
PlotIndexSetInteger(1,PLOT_DRAW_BEGIN,2*ama_period+begin+2);
PlotIndexSetInteger(2,PLOT_DRAW_BEGIN,2*ama_period+begin+2);
}
}
else
{
first=prev_calculated-1; // ñòàðòîâûé íîìåð äëÿ ðàñ÷¸òà íîâûõ áàðîâ
AMA=AMABuffer[first-1];
}
//---- îñíîâíîé öèêë ðàñ÷¸òà èíäèêàòîðà AMA
for(bar=first; bar<rates_total; bar++)
{
//----
noise=Point()/10000;
for(iii=0; iii<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 = NormalizeDouble(AMA, _Digits);
//---- Èíèöèàëèçàöèÿ ÿ÷åéêè èíäèêàòîðíîãî áóôåðà ïîëó÷åííûì çíà÷åíèåì AMA
AMABuffer[bar]=AMA;
}
if(prev_calculated==0)
first=2*ama_period+6+begin;
//---- îñíîâíîé öèêë ðàñ÷¸òà èíäèêàòîðà AMkA
for(bar=first; bar<rates_total; bar++)
{
//---- çàãðóæàåì ïðèðàùåíèÿ èíäèêàòîðà AMA â ìàññèâ äëÿ ïðîìåæóòî÷íûõ âû÷èñëåíèé
for(iii=0; iii<ama_period; iii++)
dAMA[iii]=AMABuffer[bar-iii-0]-AMABuffer[bar-iii-1];
//---- íàõîäèì ïðîñòîå ñðåäíåå ïðèðàùåíèé AMA
Sum=0.0;
for(iii=0; iii<ama_period; iii++)
Sum+=dAMA[iii];
SMAdif=Sum/ama_period;
//---- íàõîäèì ñóììó êâàäðàòîâ ðàçíîñòåé ïðèðàùåíèé è ñðåäíåãî
Sum=0.0;
for(iii=0; iii<ama_period; iii++)
Sum+=MathPow(dAMA[iii]-SMAdif,2);
//---- îïðåäåëÿåì èòîãîâîå çíà÷åíèå ñðåäíåêâàäðàòè÷íîãî îòêëîíåíèÿ StDev îò ïðèðàùåíèÿ AMA
StDev=MathSqrt(Sum/ama_period);
//---- èíèöèàëèçàöèÿ ïåðåìåííûõ
dama=NormalizeDouble(dAMA[0],_Digits+2);
Filter= NormalizeDouble(dK * StDev,_Digits+2);
BEARS = 0;
BULLS = 0;
//---- âû÷èñëåíèå èíäèêàòîðíûõ çíà÷åíèé
if(dama < -Filter) BEARS = AMABuffer[bar]; //åñòü íèñõîäÿùèé òðåíä
if(dama > +Filter) BULLS = AMABuffer[bar]; //åñòü âîñõîäÿùèé òðåíä
//---- èíèöèàëèçàöèÿ ÿ÷ååê èíäèêàòîðíûõ áóôåðîâ ïîëó÷åííûìè çíà÷åíèÿìè
BullsBuffer[bar] = BULLS;
BearsBuffer[bar] = BEARS;
}
//----
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
---