//+------------------------------------------------------------------+ //| Laguerre.mq4 | //| Emerald King | //| mailto:info@emerald-king.com | //+------------------------------------------------------------------+ #property copyright "Emerald King" #property link "mailto:info@emerald-king.com" #property indicator_separate_window #property indicator_minimum -0.1 #property indicator_maximum 1.1 #property indicator_color1 DodgerBlue #property indicator_width1 3 #property indicator_level2 0.85 #property indicator_level3 0.45 #property indicator_level4 0.15 //---- input parameters extern double gamma=0.55; extern int CountBars=9500; extern double BuyLevel=0.15; extern double SellLevel=0.85; extern bool UseAlertSound=false; datetime TimeStamp; double L0 = 0; double L1 = 0; double L2 = 0; double L3 = 0; double L0A = 0; double L1A = 0; double L2A = 0; double L3A = 0; double LRSI = 0; double CU = 0; double CD = 0; double val1[], ValBar1=0; double alertBar; double prev; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { //---- indicators //---- SetIndexBuffer(0,val1); return(0); } //+------------------------------------------------------------------+ //| Custor indicator deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- TODO: add your code here //---- return(0); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int start() { if (CountBars>Bars) CountBars=Bars; SetIndexDrawBegin(0,Bars-CountBars); int i; int counted_bars=IndicatorCounted(); i=CountBars-1; while(i>=0) { L0A = L0; L1A = L1; L2A = L2; L3A = L3; L0 = (1 - gamma)*Close[i] + gamma*L0A; L1 = - gamma *L0 + L0A + gamma *L1A; L2 = - gamma *L1 + L1A + gamma *L2A; L3 = - gamma *L2 + L2A + gamma *L3A; CU = 0; CD = 0; if (L0 >= L1) CU = L0 - L1; else CD = L1 - L0; if (L1 >= L2) CU = CU + L1 - L2; else CD = CD + L2 - L1; if (L2 >= L3) CU = CU + L2 - L3; else CD = CD + L3 - L2; if (CU + CD != 0) LRSI = CU / (CU + CD); val1[i] = LRSI; if(i==1) ValBar1=LRSI; if(UseAlertSound == true && prev != 1 && i==0 && ValBar1>SellLevel && LRSI<=SellLevel && Bars>alertBar) { Alert("Lagerre Sell "+ Symbol()+" Curr: ", LRSI," on ",Period()); alertBar = Bars;prev = 2; } if(UseAlertSound == true && prev != 2 && i==0 && ValBar1<BuyLevel && LRSI>=BuyLevel && Bars>alertBar) { Alert("Lagerre Buy "+ Symbol()+" Curr: ", LRSI," On ",Period()); alertBar = Bars;prev = 1; } i--; } return(0); } //+------------------------------------------------------------------+
Sample
Analysis
Market Information Used:
Series array that contains close prices for each bar
Indicator Curves created:
Indicators Used:
Custom Indicators Used:
Order Management characteristics:
Other Features:
It issuies visual alerts to the screen