//+------------------------------------------------------------------+ //| PriceSound_Parabolic_standart2.mq4 | //| Roll | //+------------------------------------------------------------------+ #property copyright "Roll" #property link "http://www.mql4.com/ru/users/Roll" /*Источники:1.- индикатор Parabolic_standart2/автор Лукашук В.Г./lukas1/http://codebase.mql4.com/ru/5102 2.- индикатор PriceSound_trendline http://codebase.mql4.com/ru/7601 */ #property indicator_chart_window #property indicator_color1 Orchid extern double Step=0.02; extern double Maximum=0.2; extern bool Sound_Play=true; //разрешить звук extern int trendline_Bar_Shift=1;//сдвиг трендовой линии по барам extern string UniqueName1="TL1"; //название трендовой линии extern color LineColor_UP=Yellow; //цвет трендовой линии(направление вверх) extern color LineColor_DN=Magenta; //цвет трендовой линии(направление вниз) extern int LineWidth1=2; //ширина трендовой линии extern string Sound1="ready.wav"; //название звукового файла для трендовой линии extern string Sound2="news.wav"; //название звукового файла для смены направления Параболика по контрольному бару extern int Ind_Bar=0; //номер бара(смещение)для индикации пунктов extern int DistPips=0; //Если меньше 10-авт.установка.Регулировка расстояния от изображения числа пунктов до соотв.прямой int ArrShift,t;bool Active,dirlong;string PipsTextName; double SarBuffer[],start,last_high,last_low,ep,sar,price_low,price_high,LastLevel,LastPrice,TradePoint; static double lastLevel_1,lastPrice_1;static bool dir_dn,dir_up,first=false; //+------------------------------------------------------------------+ int init() { if(Digits==3 || Digits==5)TradePoint=Point*10;else TradePoint=Point; LastPrice=0;lastLevel_1=0; IndicatorDigits(Digits); string SS=DoubleToStr(Step,4),MM=DoubleToStr(Maximum,4); SetIndexLabel(0,"Step= "+SS+", Max= "+MM);SetIndexStyle(0,DRAW_ARROW);SetIndexArrow(0,159); SetIndexBuffer(0,SarBuffer);SetIndexDrawBegin(0,4/Step);dir_dn=-1; dir_up=-1; switch(Period()) { case PERIOD_M1: ArrShift=10;break;case PERIOD_M5: ArrShift=12;break; case PERIOD_M15:ArrShift=15;break;case PERIOD_M30:ArrShift=30;break; case PERIOD_H1: ArrShift=50;break;case PERIOD_H4:ArrShift=100;break; case PERIOD_D1: ArrShift=200;break;case PERIOD_W1:ArrShift=500;break; case PERIOD_MN1:ArrShift=1000;break; } return(0); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ int deinit() { if(UninitializeReason()==REASON_REMOVE) { ObjectDelete(UniqueName1);PipsTextName=UniqueName1+" Pips";ObjectDelete(PipsTextName); lastLevel_1=0;lastPrice_1=0; } return(0); } //+------------------------------------------------------------------+ int start() { if(Bars<5)return(0);if(trendline_Bar_Shift<0)trendline_Bar_Shift=0; dirlong=true;start=Step;int i=Bars-4;static datetime New_Time; while(i>=0) { price_low=Low[i];price_high=High[i];sar=SarBuffer[i+1]+start*(ep-SarBuffer[i+1]); if(dirlong) { if(ep=price_low) { start=Step;dirlong=false;ep=price_low;last_low=price_low; if(High[i]price_low && (start+Step)<=Maximum)start+=Step; if(sar<=price_high) { start=Step;dirlong=true;ep=price_high;last_high=price_high; if(Low[i]>last_low)SarBuffer[i]=last_low;else SarBuffer[i]=Low[i];i--;continue; } else { if(ep>price_high && (start+Step)<=Maximum)start+=Step; if(ep>price_low){last_low=price_low;ep=price_low;} } }SarBuffer[i]=sar;i--; } double c1=SarBuffer[trendline_Bar_Shift],c3=SarBuffer[trendline_Bar_Shift+1],c2=Close[1]; datetime c0=Time[0]+3*Period()*60;color LineColor;if(c1>c2)LineColor=LineColor_DN;if(c1c2&&c3c1&&dir_up==0){for(i=0;i<3;i++)PlaySound (Sound2);dir_up=1;return(0);}return(0); } //+------------------------------------------------------------------+ void PriceSound_trendline(string UniqueName,color LineColor,string Sound,int arrShift,double lastLevel,double lastPrice) { PipsTextName=StringConcatenate(UniqueName," ","Pips");if(DistPips>=10)ArrShift=DistPips;else ArrShift=arrShift; LastLevel=lastLevel;LastPrice=lastPrice; if(ObjectFind(PipsTextName)==-1) { double cp=LastLevel;if(cp==0)cp=LastLevel+(10+ArrShift)*TradePoint; ObjectCreate(PipsTextName,OBJ_TEXT,0,Time[0],cp); } if(Ind_Bar>0)t=Ind_Bar;else t=0; ObjectSet(PipsTextName,OBJPROP_TIME1,Time[t]);double newlevel=ObjectGetValueByShift(UniqueName,0); if(Active) { ObjectSet(UniqueName,OBJPROP_COLOR,LineColor);ObjectSetText(UniqueName,"Price sound level - Active",0); double Pips=MathAbs(NormalizeDouble((newlevel-Close[0])/TradePoint,Digits)); if(Digits==3 || Digits==5)ObjectSetText(PipsTextName,DoubleToStr(Pips,1),14,"Terminal",LineColor); else ObjectSetText(PipsTextName,DoubleToStr(Pips,0),14,"Terminal",LineColor); } if(Close[0]>newlevel)ObjectSet(PipsTextName,OBJPROP_PRICE1,newlevel-ArrShift*TradePoint); if(Close[0]=LastLevel) || (LastPrice>LastLevel && Close[0]<=LastLevel))) { if(Sound_Play)PlaySound(Sound);else Active=false;ObjectSetText(PipsTextName,"",14,"Terminal",LineColor); ObjectSetText(UniqueName,"Price sound level - Inactive",0);ObjectSet(UniqueName,OBJPROP_COLOR,Blue); } if(UniqueName==UniqueName1){lastLevel_1=LastLevel;lastPrice_1=Close[0];} } //-----------------------------------------------------+