//Version October 1 , 2006 //+------------------------------------------------------------------+ //| 4c_Parabolic.mq4 | //| Copyright © 2006, Nikolay Kositsin | //| Khabarovsk, farria@mail.redcom.ru | //+------------------------------------------------------------------+ #property copyright "Copyright © 2006, Nikolay Kositsin" #property link "farria@mail.redcom.ru" //---- отрисовка индикатора в главном окне #property indicator_chart_window //---- количество индикаторных буфферов #property indicator_buffers 4 //---- цвета индикатора #property indicator_color1 Yellow #property indicator_color2 Magenta #property indicator_color3 Lime #property indicator_color4 Red //---- толщина индикаторных линий #property indicator_width1 0 #property indicator_width2 0 #property indicator_width3 0 #property indicator_width4 0 //---- ВХОДНЫЕ ПАРАМЕТРЫ ИНДИКАТОРА ююююююжж+ extern double Step = 0.02; extern double Maximum = 0.2; extern int Trend_Minimum = 5; // минимальная скорость тренда в пунктах //---- жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж+ //---- индикаторные буфферы double UpBuffer1[]; double DnBuffer1[]; double UpBuffer2[]; double DnBuffer2[]; double SarBuffer[]; //----+ Введение целых глобальных переменных int bar; //---- Введение констант и глобальных переменных с плавающей точкой double dT_min,low,low1,high,high1,SAR,ABS_trend,SAR1; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { //---- 5 индикаторных буфферов использованы для счёта IndicatorBuffers(5); SetIndexBuffer(0,UpBuffer1); SetIndexBuffer(1,DnBuffer1); SetIndexBuffer(2,UpBuffer2); SetIndexBuffer(3,DnBuffer2); SetIndexBuffer(4,SarBuffer); //---- Стиль исполнения графика в виде точечных объектов SetIndexStyle(0,DRAW_ARROW); SetIndexStyle(1,DRAW_ARROW); SetIndexStyle(2,DRAW_ARROW); SetIndexStyle(3,DRAW_ARROW); SetIndexArrow(0,159); SetIndexArrow(1,159); SetIndexArrow(2,159); SetIndexArrow(3,159); //---- установка значений индикатора, которые не будут видимы на графике SetIndexEmptyValue(0,0.0); SetIndexEmptyValue(1,0.0); SetIndexEmptyValue(2,0.0); SetIndexEmptyValue(3,0.0); //---- имя для окон данных и лэйба для субъокон IndicatorShortName ("Parabolic( Step="+Step+", Maximum="+Maximum+")"); SetIndexLabel (0, "lower_Up_Trend"); SetIndexLabel (1, "lower_Down_Trend"); SetIndexLabel (2, "Up_Trend"); SetIndexLabel (3, "Down_Trend"); //---- Установка формата точности отображения индикатора IndicatorDigits(Digits); //---- инициализация константы dT_min=Trend_Minimum*Point; //---- завершение инициализации return(0); } //+------------------------------------------------------------------+ //| 4c_Parabolic | //+------------------------------------------------------------------+ int start() { if(Bars-1<2) return(0); //----+ Введение целых переменных и получение уже подсчитанных баров int MaxBar,limit,counted_bars=IndicatorCounted(); //---- проверка на возможные ошибки if (counted_bars<0)return(-1); //---- последний подсчитанный бар должен быть пересчитан if (counted_bars>0) counted_bars--; //---- определение номера самого старого бара, начиная с которого будет произедён пересчёт новых баров MaxBar=Bars-1; limit=MaxBar-counted_bars; if (limit>MaxBar-1){limit=MaxBar-1; SarBuffer[MaxBar]=0; } //---- for (bar=limit;bar>=0;bar--) { SarBuffer[bar]=iSAR(NULL,0,Step,Maximum,bar); //---- SAR=SarBuffer[bar]; SAR1=SarBuffer[bar+1]; //---- low=Low[bar]; high=High[bar]; low1=Low[bar+1]; high1=High[bar+1]; //---- Ind_SAR(); //---- if((SAR1>=high1)&&(SARlow )){SAR=low-Point ;SarBuffer[bar]=SAR;Ind_SAR();} if((SAR1<=low1 )&&(SAR>low )&&(SAR=high)&&(SAR1>=high1))||((SAR<=low)&&(SAR1<=low1))) ABS_trend=MathAbs(SAR-SAR1);else ABS_trend=0.0; //---- if(SAR>=high)if(ABS_trend