В mql4 я новичок. Пишу индикатор для своих нужд, отдаленно похожий на зигзаг.
В if-ах прописала условия нахождения вершин и низин.
В настоящий момент в буфер низин записывается лоу 2-го бара и соответственно в буфер вершин хай 2-го бара.
Вопрос: как правильно написать код, чтобы в низины записывался самый низкий лоу среди 3-ёх баров и соответсвенно в вершины записывался самый высокий хай среди 3-ёх баров.
Когда использую iLowest и iHighest, то индикатор зависает в воздухе и смещается (строки с ними сейчас закомментированы). Чую, что ошибка банальна и еще наверное напутано с итерациями, но я не понимаю)) Буду рада, если поможете, как переписать.
//+------------------------------------------------------------------+//| AZ.mq4 |//| Copyright 2020, MetaQuotes Software Corp. |//| https://www.mql5.com |//+------------------------------------------------------------------+#property copyright"Anastasiya Zolotareva"#property link"insta"#property version"1.00"#property strict#property indicator_chart_window#property indicator_buffers3//--- plot myAZ#property indicator_label1"myAZ"#property indicator_color1 Black
#property indicator_color2 Blue
#property indicator_color3 Orange
#property indicator_style1STYLE_SOLID#property indicator_style2STYLE_SOLID#property indicator_style3STYLE_SOLID#property indicator_width11#property indicator_width21#property indicator_width31externint barsToProcess=200; //количество последних баров в истории//--- indicator buffersdouble myAZBuffer[];
double ExtHighBuffer[];
double ExtLowBuffer[];
//+------------------------------------------------------------------+//| Custom indicator initialization function |//+------------------------------------------------------------------+intOnInit()
{
//---- drawing settings
SetIndexStyle(0,DRAW_SECTION);
SetIndexStyle(1,DRAW_ARROW);
SetIndexStyle(2,DRAW_ARROW);
//--- indicator buffers mappingSetIndexBuffer(0,myAZBuffer);
SetIndexBuffer(1,ExtHighBuffer);
SetIndexBuffer(2,ExtLowBuffer);
IndicatorShortName("AZ");
//---return(0);
}
//+------------------------------------------------------------------+//| |//+------------------------------------------------------------------+int deinit()
{
//----//----return(0);
}
//+------------------------------------------------------------------+//| start function |//+------------------------------------------------------------------+int start()
{
int counted_bars=IndicatorCounted(); //хранит количество посчитанных индикатором баров. Функция IndicatorCounted() возвращает количество неизмененных баров после прошлого вызова функции start().int i,j,n,limit;// Индекс бараint val_index;
if(counted_bars>0)
counted_bars--;
limit=Bars-counted_bars; //количество последних баров, которые нужно пересчитать.if(limit>barsToProcess)
limit=barsToProcess;
for(n=0; n<=limit; n++)
{
if((Close[n+1]>Open[n+1] && Open[n+2]>=Close[n+2]) || (Close[n+1]>Open[n+1] && Close[n+2]>Open[n+2] && Open[n+3]>Close[n+3]))
{
// val_index=iLowest(NULL,0,MODE_LOW,3,n+1);
myAZBuffer[n+2]=Low[n+2];
ExtLowBuffer[n+2]=Low[n+2];
}
elseif((Open[n+1]>Close[n+1] && Close[n+2]>=Open[n+2]) || (Close[n+1]<Open[n+1] && Open[n+2]>Close[n+2] && Close[n+3]>Open[n+3]))
{
// val_index=iHighest(NULL,0,MODE_HIGH,3,n+1);
myAZBuffer[n+2]=High[n+2];
ExtHighBuffer[n+2]=High[n+2];
}
}
return (0);
}
//+------------------------------------------------------------------+//| Custom indicator iteration function |//+------------------------------------------------------------------+intOnCalculate(constint rates_total,
constint prev_calculated,
constdatetime &time[],
constdouble &open[],
constdouble &high[],
constdouble &low[],
constdouble &close[],
constlong &tick_volume[],
constlong &volume[],
constint &spread[])
{
//---//--- return value of prev_calculated for next callreturn(rates_total);
}
//+------------------------------------------------------------------+//+------------------------------------------------------------------+
Здравствуйте.
В mql4 я новичок. Пишу индикатор для своих нужд, отдаленно похожий на зигзаг.
В if-ах прописала условия нахождения вершин и низин.
В настоящий момент в буфер низин записывается лоу 2-го бара и соответственно в буфер вершин хай 2-го бара.
Вопрос: как правильно написать код, чтобы в низины записывался самый низкий лоу среди 3-ёх баров и соответсвенно в вершины записывался самый высокий хай среди 3-ёх баров.
Когда использую iLowest и iHighest, то индикатор зависает в воздухе и смещается (строки с ними сейчас закомментированы). Чую, что ошибка банальна и еще наверное напутано с итерациями, но я не понимаю)) Буду рада, если поможете, как переписать.