OzFX_D1_IndAES_v1.0

Download script
Author: Copyright � 2008, DGC
OzFX_D1_IndAES_v1.0

This script is designed as a technical analysis tool for the MetaTrader platform. Its primary purpose is to monitor market price action and generate specific visual signals—referred to as "OzFX" and "AES"—while providing optional filters to help traders determine the overall trend of the market.

Core Signal Logic

The tool evaluates two distinct types of trading signals based on momentum and oscillator data:

  • OzFX Regular Signals: These are generated by comparing current price momentum against previous levels. The logic identifies upward movement when a specific momentum indicator is positive and rising, combined with a stochastic oscillator positioned above the midline. Conversely, it identifies downward movement when that same momentum is negative and falling, while the stochastic oscillator is below the midline.
  • OzFX AES Signals: This logic functions similarly but uses a more nuanced comparison of internal "signal" lines. It looks for instances where the primary momentum value is increasing or decreasing relative to its own signal line, providing an additional layer of confirmation for potential trend shifts.

Trend Filtering Systems

To prevent entering trades against the "main" market direction, the script includes two optional filtering mechanisms:

  • SMA Filter: This uses a Simple Moving Average (a common tool used to smooth out price data). It identifies whether the current price is trading above or below a long-term average. If the price is above the average, it suggests an uptrend; if below, it suggests a downtrend.
  • RSI Filter: This utilizes the Relative Strength Index to measure the speed and change of price movements. It checks whether the market's strength is currently positioned above or below a neutral midpoint (50), helping to identify bullish or bearish territory.

Visual Presentation and Customization

The script displays these various data points in a separate window below the main price chart:

  • Histograms: Used to visualize the OzFX and AES signals clearly as vertical bars.
  • Lines: Used to represent the filtering data (SMA and RSI), allowing the user to see the "background" trend at a glance.

Users can toggle these specific signals and filters on or off through a settings menu, allowing them to customize the view based on their preferred trading style—whether they prefer raw signals, filtered trends, or a combination of both.

Indicators Used
Bill Williams Accelerator/Decelerator oscillatorStochastic oscillatorBill Williams Awesome oscillatorMoving average indicatorRelative strength index
Miscellaneous
Implements a curve of type %1It opens Message Boxes to the userIt plays sound alertsIt sends emails
17 Views
0 Downloads
0 Favorites
OzFX_D1_IndAES_v1.0
//+------------------------------------------------------------------+
//|                                          OzFX_D1_IndAES_v1.0.mq4 |
//|                                            Copyright © 2008, DGC |
//|                                          http://www.ozfx.com.au/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2008, DGC"
#property link      "http://www.ozfx.com.au/"

#include <WinUser32.mqh>

#property indicator_separate_window
#property indicator_buffers 4
#property indicator_color1 Yellow
#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_OzFX_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)
      {
         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)
      {
         if (iLastRegular != -1) OzFX_Regular[k] = -1;
         iLastRegular = -1;
      }   
      if (Show_OzFX_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);
}

Comments