0
Views
0
Downloads
0
Favorites
stepma_nrtr_v2
//+------------------------------------------------------------------+
//| StepMA_NRTR.mq5 |
//| Copyright © 2006, TrendLaboratory |
//| http://finance.groups.yahoo.com/group/TrendLaboratory |
//| E-mail: igorad2003@yahoo.co.uk |
//+------------------------------------------------------------------+
//---- àâòîðñòâî èíäèêàòîðà
#property copyright "Copyright © 2006, TrendLaboratory"
//---- ññûëêà íà ñàéò àâòîðà
#property link "http://www.forex-instruments.info"
#property link "http://finance.groups.yahoo.com/group/TrendLaboratory"
//---- íîìåð âåðñèè èíäèêàòîðà
#property version "8.00"
//---- îòðèñîâêà èíäèêàòîðà â îñíîâíîì îêíå
#property indicator_chart_window
//---- äëÿ ðàñ÷åòà è îòðèñîâêè èíäèêàòîðà èñïîëüçîâàíî 4 áóôåðà
#property indicator_buffers 4
//---- èñïîëüçîâàíî 4 ãðàôè÷åñêèõ ïîñòðîåíèÿ
#property indicator_plots 4
//+----------------------------------------------+
//| Ïàðàìåòðû îòðèñîâêè ëèíèè èíäèêàòîðà |
//+----------------------------------------------+
//---- îòðèñîâêà èíäèêàòîðà 1 â âèäå ëèíèè
#property indicator_type1 DRAW_LINE
//---- â êà÷åñòâå öâåòà áû÷åé ëèíèè èíäèêàòîðà èñïîëüçîâàí öâåò BlueViolet
#property indicator_color1 clrBlueViolet
//---- ëèíèÿ èíäèêàòîðà 1 - íåïðåðûâíàÿ êðèâàÿ
#property indicator_style1 STYLE_SOLID
//---- òîëùèíà ëèíèè èíäèêàòîðà 1 ðàâíà 2
#property indicator_width1 2
//---- îòîáðàæåíèå ìåòêè áû÷üåé ëèíèè èíäèêàòîðà
#property indicator_label1 "Upper StepMA"
//---- îòðèñîâêà èíäèêàòîðà 2 â âèäå ëèíèè
//+----------------------------------------------+
//| Ïàðàìåòðû îòðèñîâêè ëèíèè èíäèêàòîðà |
//+----------------------------------------------+
#property indicator_type2 DRAW_LINE
//---- â êà÷åñòâå öâåòà ìåäâåæåé ëèíèè èíäèêàòîðà èñïîëüçîâàí öâåò Gold
#property indicator_color2 clrGold
//---- ëèíèÿ èíäèêàòîðà 2 - íåïðåðûâíàÿ êðèâàÿ
#property indicator_style2 STYLE_SOLID
//---- òîëùèíà ëèíèè èíäèêàòîðà 2 ðàâíà 2
#property indicator_width2 2
//---- îòîáðàæåíèå ìåòêè ìåäâåæüåé ëèíèè èíäèêàòîðà
#property indicator_label2 "Lower StepMA"
//+----------------------------------------------+
//| Ïàðàìåòðû îòðèñîâêè çíà÷êà èíäèêàòîðà |
//+----------------------------------------------+
//---- îòðèñîâêà èíäèêàòîðà 3 â âèäå çíà÷êà
#property indicator_type3 DRAW_ARROW
//---- â êà÷åñòâå öâåòà áû÷åé ëèíèè èíäèêàòîðà èñïîëüçîâàí öâåò SpringGreen
#property indicator_color3 clrSpringGreen
//---- ëèíèÿ èíäèêàòîðà 3 - íåïðåðûâíàÿ êðèâàÿ
#property indicator_style3 STYLE_SOLID
//---- òîëùèíà ëèíèè èíäèêàòîðà 3 ðàâíà 4
#property indicator_width3 4
//---- îòîáðàæåíèå ìåòêè èíäèêàòîðà
#property indicator_label3 "StepMA Buy"
//+----------------------------------------------+
//| Ïàðàìåòðû îòðèñîâêè çíà÷êà èíäèêàòîðà |
//+----------------------------------------------+
//---- îòðèñîâêà èíäèêàòîðà 4 â âèäå çíà÷êà
#property indicator_type4 DRAW_ARROW
//---- â êà÷åñòâå öâåòà ìåäâåæåé ëèíèè èíäèêàòîðà èñïîëüçîâàí öâåò Red
#property indicator_color4 clrRed
//---- ëèíèÿ èíäèêàòîðà 2 - íåïðåðûâíàÿ êðèâàÿ
#property indicator_style4 STYLE_SOLID
//---- òîëùèíà ëèíèè èíäèêàòîðà 4 ðàâíà 4
#property indicator_width4 4
//---- îòîáðàæåíèå ìåòêè èíäèêàòîðà
#property indicator_label4 "StepMA Sell"
//+-----------------------------------+
//| îáúÿâëåíèå ïåðå÷èñëåíèé |
//+-----------------------------------+
enum MA_MODE // Òèï êîíñòàíòû
{
SMA, // SMA
LWMA // LWMA
};
//+-----------------------------------+
//| îáúÿâëåíèå ïåðå÷èñëåíèé |
//+-----------------------------------+
enum PRICE_MODE // Òèï êîíñòàíòû
{
HighLow, // High/Low
CloseClose // Close/Close
};
//+----------------------------------------------+
//| Âõîäíûå ïàðàìåòðû èíäèêàòîðà |
//+----------------------------------------------+
input int Length = 10; // Volty Length
input double Kv = 1.0; // Sensivity Factor
input int StepSize = 0; // Constant Step Size (if need)
input double Percentage = 0; // Percentage of Up/Down Moving
input PRICE_MODE Switch = HighLow; // High/Low Mode Switch (more sensitive)
input int Shift=0; // ñäâèã èíäèêàòîðà ïî ãîðèçîíòàëè â áàðàõ
//+----------------------------------------------+
//---- îáúÿâëåíèå äèíàìè÷åñêèõ ìàññèâîâ, êîòîðûå â äàëüíåéøåì
//---- áóäóò èñïîëüçîâàíû â êà÷åñòâå èíäèêàòîðíûõ áóôåðîâ
double UpBuffer[];
double DnBuffer[];
double SellBuffer[];
double BuyBuffer[];
double ratio;
int trend1,trend1_,trend0;
//---- îáúÿâëåíèå öåëî÷èñëåííûõ ïåðåìåííûõ íà÷àëà îòñ÷åòà äàííûõ
int min_rates_total;
//+------------------------------------------------------------------+
//| StepSize Calculation |
//+------------------------------------------------------------------+
double StepSizeCalc(const double &High[],const double &Low[],int Len,double Km,int Size,int bar)
{
//----
double result;
if(!Size)
{
double Range=0.0;
double ATRmax=-1000000;
double ATRmin=+1000000;
for(int iii=Len-1; iii>=0; iii--)
{
Range=High[bar+iii]-Low[bar+iii];
if(Range>ATRmax) ATRmax=Range;
if(Range<ATRmin) ATRmin=Range;
}
result=MathRound(0.5*Km*(ATRmax+ATRmin)/_Point);
}
else result=Km*Size;
//----
return(result);
}
//+------------------------------------------------------------------+
//| StepMA Calculation |
//+------------------------------------------------------------------+
double StepMACalc(const double &High[],const double &Low[],const double &Close[],bool HL,double Size,int bar)
{
//----
double result,smax0,smin0,SizeP,Size2P;
static double smax1,smin1;
static bool FirstStart=true;
SizeP=Size*_Point;
Size2P=2.0*SizeP;
//---- ñòàðòîâàÿ èíèöèàëèçàöèÿ ïåðåìåííûõ
if(FirstStart)
{
trend1=0;
smax1=Low[bar]+Size2P;
smin1=High[bar]-Size2P;
FirstStart=false;
}
if(HL)
{
smax0=Low[bar]+Size2P;
smin0=High[bar]-Size2P;
}
else
{
smax0=Close[bar]+Size2P;
smin0=Close[bar]-Size2P;
}
trend0=trend1;
if(Close[bar]>smax1) trend0=+1;
if(Close[bar]<smin1) trend0=-1;
if(trend0>0)
{
if(smin0<smin1) smin0=smin1;
result=smin0+SizeP;
}
else
{
if(smax0>smax1) smax0=smax1;
result=smax0-SizeP;
}
trend1_=trend1;
if(bar)
{
smax1=smax0;
smin1=smin0;
trend1=trend0;
}
//----
return(result);
}
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
void OnInit()
{
//---- èíèöèàëèçàöèÿ ïåðåìåííûõ íà÷àëà îòñ÷åòà äàííûõ
min_rates_total=Length+3;
//---- èíèöèàëèçàöèÿ ïåðåìåííûõ
ratio=Percentage/100.0*_Point;
//---- ïðåâðàùåíèå äèíàìè÷åñêîãî ìàññèâà BufferUp â èíäèêàòîðíûé áóôåð
SetIndexBuffer(0,UpBuffer,INDICATOR_DATA);
//---- îñóùåñòâëåíèå ñäâèãà èíäèêàòîðà 1 ïî ãîðèçîíòàëè íà Shift
PlotIndexSetInteger(0,PLOT_SHIFT,Shift);
//---- îñóùåñòâëåíèå ñäâèãà íà÷àëà îòñ÷åòà îòðèñîâêè èíäèêàòîðà 1
PlotIndexSetInteger(0,PLOT_DRAW_BEGIN,min_rates_total);
//---- èíäåêñàöèÿ ýëåìåíòîâ â áóôåðàõ êàê â òàéìñåðèÿõ
ArraySetAsSeries(UpBuffer,true);
//---- óñòàíîâêà çíà÷åíèé èíäèêàòîðà, êîòîðûå íå áóäóò âèäèìû íà ãðàôèêå
PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,EMPTY_VALUE);
//---- ïðåâðàùåíèå äèíàìè÷åñêîãî ìàññèâà BufferDown â èíäèêàòîðíûé áóôåð
SetIndexBuffer(1,DnBuffer,INDICATOR_DATA);
//---- îñóùåñòâëåíèå ñäâèãà èíäèêàòîðà 2 ïî ãîðèçîíòàëè íà Shift
PlotIndexSetInteger(1,PLOT_SHIFT,Shift);
//---- îñóùåñòâëåíèå ñäâèãà íà÷àëà îòñ÷åòà îòðèñîâêè èíäèêàòîðà 2
PlotIndexSetInteger(1,PLOT_DRAW_BEGIN,min_rates_total);
//---- èíäåêñàöèÿ ýëåìåíòîâ â áóôåðàõ êàê â òàéìñåðèÿõ
ArraySetAsSeries(DnBuffer,true);
//---- óñòàíîâêà çíà÷åíèé èíäèêàòîðà, êîòîðûå íå áóäóò âèäèìû íà ãðàôèêå
PlotIndexSetDouble(1,PLOT_EMPTY_VALUE,EMPTY_VALUE);
//---- ïðåâðàùåíèå äèíàìè÷åñêîãî ìàññèâà BufferUp1 â èíäèêàòîðíûé áóôåð
SetIndexBuffer(2,BuyBuffer,INDICATOR_DATA);
//---- îñóùåñòâëåíèå ñäâèãà èíäèêàòîðà 1 ïî ãîðèçîíòàëè íà Shift
PlotIndexSetInteger(2,PLOT_SHIFT,Shift);
//---- îñóùåñòâëåíèå ñäâèãà íà÷àëà îòñ÷åòà îòðèñîâêè èíäèêàòîðà 3
PlotIndexSetInteger(2,PLOT_DRAW_BEGIN,min_rates_total);
//---- èíäåêñàöèÿ ýëåìåíòîâ â áóôåðàõ êàê â òàéìñåðèÿõ
ArraySetAsSeries(BuyBuffer,true);
//---- óñòàíîâêà çíà÷åíèé èíäèêàòîðà, êîòîðûå íå áóäóò âèäèìû íà ãðàôèêå
PlotIndexSetDouble(2,PLOT_EMPTY_VALUE,EMPTY_VALUE);
//---- ñèìâîë äëÿ èíäèêàòîðà
PlotIndexSetInteger(2,PLOT_ARROW,108);
//---- ïðåâðàùåíèå äèíàìè÷åñêîãî ìàññèâà BufferDown1 â èíäèêàòîðíûé áóôåð
SetIndexBuffer(3,SellBuffer,INDICATOR_DATA);
//---- îñóùåñòâëåíèå ñäâèãà èíäèêàòîðà 2 ïî ãîðèçîíòàëè íà Shift
PlotIndexSetInteger(3,PLOT_SHIFT,Shift);
//---- îñóùåñòâëåíèå ñäâèãà íà÷àëà îòñ÷åòà îòðèñîâêè èíäèêàòîðà 4
PlotIndexSetInteger(3,PLOT_DRAW_BEGIN,min_rates_total);
//---- èíäåêñàöèÿ ýëåìåíòîâ â áóôåðàõ êàê â òàéìñåðèÿõ
ArraySetAsSeries(SellBuffer,true);
//---- óñòàíîâêà çíà÷åíèé èíäèêàòîðà, êîòîðûå íå áóäóò âèäèìû íà ãðàôèêå
PlotIndexSetDouble(3,PLOT_EMPTY_VALUE,EMPTY_VALUE);
//---- ñèìâîë äëÿ èíäèêàòîðà
PlotIndexSetInteger(3,PLOT_ARROW,108);
//---- èíèöèàëèçàöèè ïåðåìåííîé äëÿ êîðîòêîãî èìåíè èíäèêàòîðà
string shortname;
StringConcatenate(shortname,"StepMA NRTR (",Length,", ",Kv,", ",StepSize,")");
//--- ñîçäàíèå èìåíè äëÿ îòîáðàæåíèÿ â îòäåëüíîì ïîäîêíå è âî âñïëûâàþùåé ïîäñêàçêå
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);
//---- îáúÿâëåíèÿ ëîêàëüíûõ ïåðåìåííûõ
int limit,bar;
double StepMA,Step;
//---- èíäåêñàöèÿ ýëåìåíòîâ â ìàññèâàõ êàê â òàéìñåðèÿõ
ArraySetAsSeries(high,true);
ArraySetAsSeries(low,true);
ArraySetAsSeries(close,true);
//---- ðàñ÷åò ñòàðòîâîãî íîìåðà first äëÿ öèêëà ïåðåñ÷åòà áàðîâ
if(prev_calculated>rates_total || prev_calculated<=0) // ïðîâåðêà íà ïåðâûé ñòàðò ðàñ÷åòà èíäèêàòîðà
{
limit=rates_total-min_rates_total; // ñòàðòîâûé íîìåð äëÿ ðàñ÷åòà âñåõ áàðîâ
trend1_=0;
}
else limit=rates_total-prev_calculated; // ñòàðòîâûé íîìåð äëÿ ðàñ÷åòà íîâûõ áàðîâ
//---- îñíîâíîé öèêë ðàñ÷åòà èíäèêàòîðà
for(bar=limit; bar>=0; bar--)
{
UpBuffer[bar]=EMPTY_VALUE;
DnBuffer[bar]=EMPTY_VALUE;
SellBuffer[bar]=EMPTY_VALUE;
BuyBuffer[bar]=EMPTY_VALUE;
Step=StepSizeCalc(high,low,Length,Kv,StepSize,bar);
if(!Step) Step=1;
StepMA=StepMACalc(high,low,close,Switch,Step,bar)+ratio/Step;
if(trend0>0)
{
UpBuffer[bar]=StepMA-Step*_Point;
if(trend1_<0) BuyBuffer[bar]=UpBuffer[bar];
DnBuffer[bar]=EMPTY_VALUE;
}
if(trend0<0)
{
DnBuffer[bar]=StepMA+Step*_Point;
if(trend1_>0) SellBuffer[bar]=DnBuffer[bar];
UpBuffer[bar]=EMPTY_VALUE;
}
}
//----
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
---