//+------------------------------------------------------------------+ //| OzFX_D1_Ind_v1.0.mq4 | //| Copyright © 2008, DGC | //| http://www.ozfx.com.au/ | //+------------------------------------------------------------------+ #property copyright "Copyright © 2008, DGC & Sonic" #property link "http://www.ozfx.com.au/" #include <WinUser32.mqh> #property indicator_separate_window #property indicator_buffers 4 #property indicator_color1 Brown #property indicator_width1 2 #property indicator_color2 DodgerBlue #property indicator_width2 2 #property indicator_color3 Red #property indicator_width3 2 #property indicator_color4 White #property indicator_width4 1 #property indicator_style4 2 #property indicator_level1 0 #property indicator_minimum -1.2 #property indicator_maximum 1.2 extern string SEP1 = "----SIGNAL CONTROLS----"; extern bool Show_Sonic_Signals = true; extern bool Show_AES_Signals = false; extern string SEP2 = "----FILTER CONTROLS----"; extern bool Show_SMA_Filter = true; extern int SMA_Filter_Period = 200; extern bool Show_RSI_Filter = false; extern int RSI_Filter_Period = 45; /*extern string SEP3 = "----ALERT CONTROLS----"; extern bool Popup_Alerts_On = false; extern bool Audio_Alerts_On = false; extern bool EMail_Alerts_On = false; extern int Alert_Signal = 0; extern bool Alert_SMA_Filtered = false; extern bool Alert_RSI_Filtered = false; */ double OzFX_Regular[]; double OzFX_AES[]; double Filter_SMA[]; double Filter_RSI[]; int iLastRegular; double dLastAES; int k; bool bAlertSounded; int init() { SetIndexStyle(0, DRAW_HISTOGRAM); SetIndexBuffer(0, OzFX_Regular); SetIndexStyle(1, DRAW_HISTOGRAM); SetIndexBuffer(1, OzFX_AES); SetIndexStyle(2, DRAW_LINE); SetIndexBuffer(2, Filter_SMA); SetIndexStyle(3, DRAW_LINE); SetIndexBuffer(3, Filter_RSI); iLastRegular = 0; dLastAES = 0; bAlertSounded = false; return(0); } int start() { for (k = Bars - 205; k >= 0; k --) { /*---------------------*/ /* OZFX REGULAR CODE */ /*---------------------*/ OzFX_Regular[k] = 0; if (iAC(Symbol(), 0, k) > 0 && iAC(Symbol(), 0, k) > iAC(Symbol(), 0, k + 1) && iStochastic(Symbol(), 0, 5, 3, 3, MODE_SMA, 0, MODE_MAIN, k) > 50 && iCustom(NULL, 0, "Laguerre-ACS1", 0.6, 1000, 2, 0, k)> 0.1) { if (iLastRegular != 1) OzFX_Regular[k] = 1; iLastRegular = 1; } if (iAC(Symbol(), 0, k) < 0 && iAC(Symbol(), 0, k) < iAC(Symbol(), 0, k + 1) && iStochastic(Symbol(), 0, 5, 3, 3, MODE_SMA, 0, MODE_MAIN, k) < 50 && iCustom(NULL, 0, "Laguerre-ACS1", 0.6, 1000, 2, 0, k)< 0.9) { if (iLastRegular != -1) OzFX_Regular[k] = -1; iLastRegular = -1; } if (Show_Sonic_Signals == false) OzFX_Regular[k] = 0.0; /*-----------------*/ /* OZFX AES CODE */ /*-----------------*/ OzFX_AES[k] = 0; if (/*iAC(Symbol(), 0, k) > 0 &&*/ iAC(Symbol(), 0, k) > iAC(Symbol(), 0, k + 1) && iStochastic(Symbol(), 0, 5, 3, 3, MODE_SMA, 0, MODE_MAIN, k) > iStochastic(Symbol(), 0, 5, 3, 3, MODE_SMA, 0, MODE_SIGNAL, k) /*&& iStochastic(Symbol(), 0, 5, 3, 3, MODE_SMA, 0, MODE_MAIN, k + 1) < iStochastic(Symbol(), 0, 5, 3, 3, MODE_SMA, 0, MODE_SIGNAL, k + 1) && iAO(Symbol(), 0, k) > iAO(Symbol(), 0, k + 1)*/) { if (dLastAES != 0.7) OzFX_AES[k] = 0.7; dLastAES = 0.7; } if (/*iAC(Symbol(), 0, k) < 0 &&*/ iAC(Symbol(), 0, k) < iAC(Symbol(), 0, k + 1) && iStochastic(Symbol(), 0, 5, 3, 3, MODE_SMA, 0, MODE_MAIN, k) < iStochastic(Symbol(), 0, 5, 3, 3, MODE_SMA, 0, MODE_SIGNAL, k) /*&& iStochastic(Symbol(), 0, 5, 3, 3, MODE_SMA, 0, MODE_MAIN, k + 1) > iStochastic(Symbol(), 0, 5, 3, 3, MODE_SMA, 0, MODE_SIGNAL, k + 1) && iAO(Symbol(), 0, k) < iAO(Symbol(), 0, k + 1)*/) { if (dLastAES != -0.7) OzFX_AES[k] = -0.7; dLastAES = -0.7; } if (Show_AES_Signals == false) OzFX_AES[k] = 0.0; /*-------------------*/ /* SMA FILTER CODE */ /*-------------------*/ Filter_SMA[k] = 0; if (Close[k] > iMA(Symbol(), 0, SMA_Filter_Period, 0, MODE_SMA, PRICE_CLOSE, k)) Filter_SMA[k] = 1; if (Close[k] <= iMA(Symbol(), 0, SMA_Filter_Period, 0, MODE_SMA, PRICE_CLOSE, k)) Filter_SMA[k] = -1; if (Show_SMA_Filter == false) Filter_SMA[k] = EMPTY_VALUE; /*-------------------*/ /* RSI FILTER CODE */ /*-------------------*/ Filter_RSI[k] = 0; if (50 > iRSI(Symbol(), 0, RSI_Filter_Period, PRICE_CLOSE, k)) Filter_RSI[k] = -1; if (50 <= iRSI(Symbol(), 0, RSI_Filter_Period, PRICE_CLOSE, k)) Filter_RSI[k] = 1; if (Show_RSI_Filter == false) Filter_RSI[k] = EMPTY_VALUE; } /*--------------*/ /* ALERT CODE */ /*--------------*/ /* if ((Alert_SMA_Filtered == false || (Alert_SMA_Filtered == true && OzFX_Regular[0] == Filter_SMA[0])) && (Alert_RSI_Filtered == false || (Alert_RSI_Filtered == true && MathCeil(OzFX_AES[0]) == Filter_SMA[0]))) { switch (Alert_Signal) { case 0: if (OzFX_Regular[0] != 0 && bAlertSounded == false) { if (Popup_Alerts_On == true) MessageBox("alert", "Trade Alert!!", MB_OK); if (Audio_Alerts_On == true) PlaySound("Alert.wav"); if (EMail_Alerts_On == true) SendMail("Trade Alert!!", "alert"); bAlertSounded = true; } else bAlertSounded = false; break; case 1: if (OzFX_Regular[0] != 0 && bAlertSounded == false) { if (Popup_Alerts_On == true) MessageBox("alert", "Trade Alert!!", MB_OK); if (Audio_Alerts_On == true) PlaySound("Alert.wav"); if (EMail_Alerts_On == true) SendMail("Trade Alert!!", "alert"); bAlertSounded = true; } else bAlertSounded = false; break; } } */ return(0); }
Sample
Analysis
Market Information Used:
Series array that contains close prices for each bar
Indicator Curves created:
Implements a curve of type DRAW_HISTOGRAM
Implements a curve of type DRAW_LINE
Indicators Used:
Bill Williams Accelerator/Decelerator oscillator
Stochastic oscillator
Bill Williams Awesome oscillator
Moving average indicator
Relative strength index
Custom Indicators Used:
Laguerre-ACS1
Order Management characteristics:
Other Features:
It opens Message Boxes to the user
It plays sound alerts
It sends emails