3 MA Cross w_Alert v2_v1

Author: Copyright � 2005, Jason Robinson (jnrtrading)
3 MA Cross w_Alert v2_v1

Okay, here's a breakdown of what this MetaTrader script does, explained in plain language for someone who isn's a programmer. I'm focusing on the logic and purpose, not the code itself.

Overall Purpose

This script is designed to identify and alert you when two faster-moving average lines cross relative to a slower-moving average line on a price chart. It's a technical analysis tool that aims to help you spot potential trend changes. It's like having an automated assistant watching the chart and telling you when certain relationships between these averages occur.

Key Concepts: Moving Averages

  • Moving Averages (MAs): These are calculations that smooth out price data over a specific period. They help to filter out short-term noise and highlight the underlying trend. Different periods (e.g., 5, 20, 34) are used to create different MAs, each reacting differently to price changes.
  • Faster vs. Slower: A "faster" moving average reacts more quickly to recent price changes. A "slower" moving average takes a longer period into account and is less sensitive to short-term fluctuations.

How the Script Works – Step by Step

  1. User-Defined Settings:

    • The script allows you to choose the periods (lengths) for three moving averages: two "faster" ones and one "slower" one. You set these values when you apply the script to a chart.
    • You can also choose the type of moving average calculation (e.g., Simple, Exponential, Smoothed).
    • A setting controls whether or not audible alerts are triggered.
  2. Calculating Moving Averages:

    • For each bar (candle) on the chart, the script calculates the values of the three moving averages. It uses the user-defined periods and calculation type.
  3. Identifying Crosses:

    • The core logic looks for specific patterns in the relationship between the faster and slower moving averages. It checks if the faster moving averages are above the slower moving average, and if they were previously below it.
    • It also checks if the faster moving averages are below the slower moving average, and if they were previously above it.
    • The script is looking for a change in the relative position of the faster averages compared to the slower average.
  4. Alerting:

    • If the script detects a "cross" (the pattern described above), it generates an alert.
    • The alert can be a visual marker on the chart (a line indicating the cross) and/or an audible sound.
    • The alert includes the current hour and minute of the cross.
  5. Preventing Repeated Alerts:

    • The script includes logic to prevent the same alert from being triggered repeatedly on the same bar. It checks if the time of the current bar is different from the last time an alert was triggered.

In simpler terms:

Imagine you're watching a race between three cars. Two cars are faster, and one is slower. This script is like a system that tells you, "Hey, the two faster cars just passed the slower car, and they weren't passing it before! This might mean the race is about to change direction." The script is looking for these changes in relative position.

Important Notes:

  • No Guarantee: This script is a tool to help you analyze the market, but it doesn't guarantee profits. Market conditions can change rapidly.
  • Customization: The effectiveness of the script depends on the settings you choose. Experiment with different moving average periods to find what works best for your trading style and the specific asset you're analyzing.
  • False Signals: Like any technical indicator, this script can generate false signals (incorrect alerts). It's important to use it in conjunction with other forms of analysis.
Indicators Used
Moving average indicator
Miscellaneous
Implements a curve of type %1It issuies visual alerts to the screen
2 Views
0 Downloads
0 Favorites
3 MA Cross w_Alert v2_v1
/*-----------------------------+
|			       |
| Shared by www.Aptrafx.com    |
|			       |
+------------------------------*/

// This is Not Tested , Use At Your Own Risk !

//+--------------------------------------------------------------------------+
//| 3 MA Cross w_Alert v2.mq4                                                |
//| Copyright © 2005, Jason Robinson (jnrtrading)                            |
//| http://www.jnrtading.co.uk                                               |
//| 3 ma conversion and Alert , David Honeywell , transport.david@gmail.com  |
//| http://finance.groups.yahoo.com/group/MetaTrader_Experts_and_Indicators/ |
//+--------------------------------------------------------------------------+

/*
  +-------------------------------------------------------------------------------+
  | Allows you to enter 3 ma periods and it will then show you and alert you at   |
  | which point the 2 faster ma's "OPEN" are both above or below the Slowest ma . |
  +-------------------------------------------------------------------------------+
*/   

#property copyright "Copyright © 2005, Jason Robinson (jnrtrading)"
#property link      "http://www.jnrtrading.co.uk"

#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 Aqua
#property indicator_color2 Coral

double CrossUp[];
double CrossDown[];
double prevtime;
double Range, AvgRange;
double fasterMAnow, fasterMAprevious, fasterMAafter;
double mediumMAnow, mediumMAprevious, mediumMAafter;
double slowerMAnow, slowerMAprevious, slowerMAafter;

extern int FasterMA    =    5;
extern int FasterShift =   -5;
extern int FasterMode  =    1; // 0 = sma, 1 = ema, 2 = smma, 3 = lwma

extern int MediumMA    =   20;
extern int MediumShift =   -5;
extern int MediumMode  =    1; // 0 = sma, 1 = ema, 2 = smma, 3 = lwma

extern int SlowerMA    =   34;
extern int SlowerShift =    0;
extern int SlowerMode  =    1; // 0 = sma, 1 = ema, 2 = smma, 3 = lwma

extern int SoundAlert =    1; // 0 = disabled

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   SetIndexStyle(0, DRAW_ARROW, EMPTY);
   SetIndexArrow(0, 233);
   SetIndexBuffer(0, CrossUp);
   SetIndexStyle(1, DRAW_ARROW, EMPTY);
   SetIndexArrow(1, 234);
   SetIndexBuffer(1, CrossDown);
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//---- 

//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
 {
   
   int limit, i, counter;
   
   int counted_bars=IndicatorCounted();
   //---- check for possible errors
   if(counted_bars<0) return(-1);
   //---- last counted bar will be recounted
   if(counted_bars>0) counted_bars--;
   
   limit=Bars-counted_bars;
   
   for(i = 0; i <= limit; i++)
    {
      
      counter=i;
      Range=0;
      AvgRange=0;
      for (counter=i ;counter<=i+9;counter++)
       {
         AvgRange=AvgRange+MathAbs(High[counter]-Low[counter]);
       }
      Range=AvgRange/10;
       
      fasterMAnow      = iMA(NULL, 0, FasterMA, FasterShift, FasterMode, PRICE_CLOSE, i+1);
      fasterMAprevious = iMA(NULL, 0, FasterMA, FasterShift, FasterMode, PRICE_CLOSE, i+2);
      fasterMAafter    = iMA(NULL, 0, FasterMA, FasterShift, FasterMode, PRICE_CLOSE, i-1);
      
      mediumMAnow      = iMA(NULL, 0, MediumMA, MediumShift, MediumMode, PRICE_CLOSE, i+1);
      mediumMAprevious = iMA(NULL, 0, MediumMA, MediumShift, MediumMode, PRICE_CLOSE, i+2);
      mediumMAafter    = iMA(NULL, 0, MediumMA, MediumShift, MediumMode, PRICE_CLOSE, i-1);
      
      slowerMAnow      = iMA(NULL, 0, SlowerMA, SlowerShift, SlowerMode, PRICE_CLOSE, i+1);
      slowerMAprevious = iMA(NULL, 0, SlowerMA, SlowerShift, SlowerMode, PRICE_CLOSE, i+2);
      slowerMAafter    = iMA(NULL, 0, SlowerMA, SlowerShift, SlowerMode, PRICE_CLOSE, i-1);
      
      if ((fasterMAnow     > slowerMAnow       &&
          fasterMAprevious <= slowerMAprevious  &&
          fasterMAafter    > slowerMAafter     &&
          mediumMAnow      > slowerMAnow     )
          ||
          (fasterMAnow     > slowerMAnow       &&
          mediumMAnow      > slowerMAnow       &&
          mediumMAprevious <= slowerMAprevious  &&
          mediumMAafter    > slowerMAafter   ))
       {
         CrossUp[i] = Low[i] - Range*0.5;
       }
       
      if ((fasterMAnow     < slowerMAnow       &&
          fasterMAprevious >= slowerMAprevious  &&
          fasterMAafter    < slowerMAafter     &&
          mediumMAnow      < slowerMAnow     )
          ||
          (fasterMAnow     < slowerMAnow       &&
          mediumMAnow      < slowerMAnow       &&
          mediumMAprevious >= slowerMAprevious  &&
          mediumMAafter    < slowerMAafter   ))
       {
         CrossDown[i] = High[i] + Range*0.5;
       }
      
    }
   
      if ((CrossUp[0] > 2000) && (CrossDown[0] > 2000)) { prevtime = 0; }
      
      if ((CrossUp[0] == Low[0] - Range*0.5) && (prevtime != Time[0]) && (SoundAlert != 0))
       {
         prevtime = Time[0];
         Alert(Symbol()," 3 MA Cross Up @  Hour ",Hour(),"  Minute ",Minute());
       }
      
      if ((CrossDown[0] == High[0] + Range*0.5) && (prevtime != Time[0]) && (SoundAlert != 0))
       {
         prevtime = Time[0];
         Alert(Symbol()," 3 MA Cross Down @  Hour ",Hour(),"  Minute ",Minute());
       }
   
   //Comment("  CrossUp[0]  ",CrossUp[0]," ,  CrossDown[0]  ",CrossDown[0]," ,  prevtime  ",prevtime);
   //Comment("");
   
   return(0);
 }

Comments

Markdown supported. Formatting help

Markdown Formatting Guide

Element Markdown Syntax
Heading # H1
## H2
### H3
Bold **bold text**
Italic *italicized text*
Link [title](https://www.example.com)
Image ![alt text](image.jpg)
Code `code`
Code Block ```
code block
```
Quote > blockquote
Unordered List - Item 1
- Item 2
Ordered List 1. First item
2. Second item
Horizontal Rule ---