//+------------------------------------------------------------------+ //| LaGuerre RSI v1.00.mq4 | //| mladen | //+------------------------------------------------------------------+ #property copyright "mladen modified by TIMEX, modified by WSAStartup" #property link "" #property indicator_separate_window #property indicator_minimum 0 #property indicator_maximum 1 #property indicator_buffers 3 #property indicator_color1 Blue #property indicator_width1 2 #property indicator_width2 1 #property indicator_width3 1 #property indicator_color2 White #property indicator_color3 White extern string strLaguerreName="Laguerre-ACS1"; extern double Gama = 0.55; extern int PriceType = 0; extern double Level1 = 0.85; extern double Level2 = 0.45; extern double Level3 = 0.15; extern bool ShowLevels = false; extern bool ShowCrossings = true; extern bool alertsOn = true; extern bool alertsMessage = true; extern bool alertsSound = false; extern bool alertsEmail = false; extern color LevelsColor = C'30,33,36'; // // // // // double MainBuffer[]; double CUpBuffer[]; double CDnBuffer[]; double L0[]; double L1[]; double L2[]; double L3[]; string ShortName; //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ int init() { IndicatorBuffers(7); SetIndexBuffer(0, MainBuffer); SetIndexBuffer(1, CUpBuffer); SetIndexBuffer(2, CDnBuffer); SetIndexBuffer(3, L0); SetIndexBuffer(4, L1); SetIndexBuffer(5, L2); SetIndexBuffer(6, L3); // // // // // if (ShowCrossings) { SetIndexStyle(1,DRAW_ARROW); SetIndexStyle(2,DRAW_ARROW); SetIndexArrow(1,233); SetIndexArrow(2,234); } else { SetIndexStyle(1,DRAW_NONE); SetIndexStyle(2,DRAW_NONE); } // // // // // ShortName=MakeUniqueName("Laguerre Alert "," ("+DoubleToStr(Gama,2)+")"); IndicatorShortName(ShortName); SetIndexLabel(0,"Laguerre RSI"); return(0); } int deinit() { DeleteBounds(); return(0); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ int start() { int counted_bars=IndicatorCounted(); int i,limit; if(counted_bars<0) return(-1); if(counted_bars>0) counted_bars--; limit = Bars - counted_bars; // // // // // for(i = limit; i >= 0 ; i--) { MainBuffer[i] = iCustom(NULL, 0, strLaguerreName,Gama,1000000000,2,0,i); CUpBuffer[i] = EMPTY_VALUE; CDnBuffer[i] = EMPTY_VALUE; if (MainBuffer[i] < Level1 && MainBuffer[i+1] > Level1) CDnBuffer[i] = Level1; if (MainBuffer[i] > Level3 && MainBuffer[i+1] < Level3) CUpBuffer[i] = Level3; } // // // // // if (ShowLevels) UpdateBounds(); if (alertsOn) CheckCrossings(); return(0); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ // // // // // //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ // // // // // void CheckCrossings() { if (CDnBuffer[0] == Level1) doAlert("level "+DoubleToStr(Level1,2)+" crossed down"); if (CUpBuffer[0] == Level3) doAlert("level "+DoubleToStr(Level3,2)+" crossed up"); } // // // // // void doAlert(string doWhat) { static string previousAlert="nothing"; static datetime previousTime; string message; if (previousAlert != doWhat || previousTime != Time[0]) { previousAlert = doWhat; previousTime = Time[0]; // // // // // message = StringConcatenate(Symbol()," at ",TimeToStr(TimeLocal(),TIME_SECONDS)," Laguerre ",doWhat); if (alertsMessage) Alert(message); if (alertsEmail) SendMail(StringConcatenate(Symbol()," Laguerre line crossing"),message); if (alertsSound) PlaySound("alert2.wav"); } } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ // // // // // string MakeUniqueName(string first, string rest) { string result = first+(MathRand()%1001)+rest; while (WindowFind(result)> 0) result = first+(MathRand()%1001)+rest; return(result); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ // // // // // void DeleteBounds() { ObjectDelete(ShortName+"-1"); ObjectDelete(ShortName+"-2"); ObjectDelete(ShortName+"-3"); } void UpdateBounds() { if (Level1 > 0) SetUpBound(ShortName+"-1",1.0000 ,Level1); if (Level2 > 0) SetUpBound(ShortName+"-2",Level2*1.01,Level2*0.99); if (Level3 > 0) SetUpBound(ShortName+"-3",Level3 , 0.0000); } void SetUpBound(string name, double up, double down,int objType=OBJ_RECTANGLE) { if (ObjectFind(name) == -1) { ObjectCreate(name,objType,WindowFind(ShortName),0,0); ObjectSet(name,OBJPROP_PRICE1,up); ObjectSet(name,OBJPROP_PRICE2,down); ObjectSet(name,OBJPROP_COLOR,LevelsColor); ObjectSet(name,OBJPROP_BACK,true); ObjectSet(name,OBJPROP_TIME1,iTime(NULL,0,Bars-1)); } if (ObjectGet(name,OBJPROP_TIME2) != iTime(NULL,0,0)) ObjectSet(name,OBJPROP_TIME2, iTime(NULL,0,0)); }
Sample
Analysis
Market Information Used:
Series array that contains open time of each bar
Indicator Curves created:
Implements a curve of type DRAW_ARROW
Implements a curve of type DRAW_NONE
Indicators Used:
Custom Indicators Used:
strLaguerreName
Order Management characteristics:
Other Features:
It issuies visual alerts to the screen
It sends emails
It plays sound alerts