Price Data Components
0
Views
0
Downloads
0
Favorites
amka_v1
//+------------------------------------------------------------------+
//| 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
---