IINWMARROWS

Download script
Author: Copyright � 2006, MetaQuotes Software Corp.
IINWMARROWS

This tool is designed as a visual trading assistant for MetaTrader platforms, specifically created to identify potential trend shifts in the market by monitoring the relationship between two different moving averages. Rather than cluttering your chart with constant lines, this script focuses on identifying specific "crossover" moments where momentum may be changing direction.

How the Logic Works

The script operates by comparing a Faster Moving Average against a Slower Moving Average. Think of these as two different speeds of data: one reacts quickly to recent price fluctuations, while the other provides a smoother look at the broader trend.

The core logic follows these three steps:

1. Calculating the Environment To ensure the signals are placed accurately on your chart, the tool first calculates the "Range" of the current market volatility. It looks at the price movement over the last 10 bars to determine how much space is between the highs and lows. This ensures that when a signal appears, it sits at a mathematically appropriate distance from the candle rather than overlapping with the price.

2. Detecting the Crossover The script continuously monitors three distinct points in time: the current candle, the previous candle, and the one following it. It looks for a specific "sandwich" movement:

  • Buy Signal: This occurs when the Faster Average was below the Slower Average in the past but has moved above it in the current moment.
  • Sell Signal: This occurs when the Faster Average was above the Slower Average in the past but has dropped below it in the current moment.

3. Visual and Audio Execution Once the script confirms that a crossover has officially occurred, it performs two actions:

  • Visual Markers: It places a specific arrow on your chart. For buy signals, the arrow appears below the candle; for sell signals, it appears above the candle.
  • Audio Alerts: To ensure you don't miss a move while away from your screen, the script triggers distinct sound files (a "buglehorn" for buys and a "reveille" for sells). It is programmed to play these sounds only once per candle to avoid repetitive noise.

Key Settings

The logic allows for high levels of customization regarding how these averages behave:

  • Mode Selection: You can choose between different types of moving averages (such as Simple, Exponential, Smoothed, or Linear Weighted) depending on how "reactive" you want the tool to be.
  • Speed Settings: You can adjust the periods for both the Faster and Slower averages to suit different trading styles—from scalping (fast reactions) to swing trading (slower, more stable trends).
Indicators Used
Moving average indicator
Miscellaneous
Implements a curve of type %1It plays sound alerts
17 Views
0 Downloads
0 Favorites
IINWMARROWS
//+------------------------------------------------------------------+
//|                                                  IINWMARROWS.mq4 |
//|                                           Based on EMA_CROSS.mq4 |
//|                      Copyright © 2006, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//|                           Last little modified by Iin Zulkarnain |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2006, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"
//----
#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 Green
#property indicator_color2 Red
#property indicator_width1 0
#property indicator_width2 0
//----
double CrossUp[];
double CrossDown[];
extern int FasterMode=1; //0=sma, 1=ema, 2=smma, 3=lwma
extern int FasterMA=  5;
extern int SlowerMode=1; //0=sma, 1=ema, 2=smma, 3=lwma
extern int SlowerMA=  8;
 double alertTag;
//+------------------------------------------------------------------+
//| 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;
   double fasterMAnow, slowerMAnow, fasterMAprevious, slowerMAprevious, fasterMAafter, slowerMAafter;
   double Range, AvgRange;
   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, 0, FasterMode, PRICE_CLOSE, i);
      fasterMAprevious=iMA(NULL, 0, FasterMA, 0, FasterMode, PRICE_CLOSE, i+1);
      fasterMAafter=iMA(NULL, 0, FasterMA, 0, FasterMode, PRICE_CLOSE, i-1);
//----
      slowerMAnow=iMA(NULL, 0, SlowerMA, 0, SlowerMode, PRICE_OPEN, i);
      slowerMAprevious=iMA(NULL, 0, SlowerMA, 0, SlowerMode, PRICE_OPEN, i+1);
      slowerMAafter=iMA(NULL, 0, SlowerMA, 0, SlowerMode, PRICE_OPEN, i-1);
        if ( (fasterMAnow > slowerMAnow) && (fasterMAprevious < 
slowerMAprevious) && (fasterMAafter > slowerMAafter)) {
         CrossUp[i] = Low[i] - Range*0.5;
         if ( alertTag!=Time[0])
         {
          PlaySound("buglehorn.wav");// buy wav
          //Alert(Symbol(),"  M",Period()," MA cross BUY");
         }
          alertTag = Time[0];
      }
      else if ((fasterMAnow < slowerMAnow) && (fasterMAprevious > 
slowerMAprevious) && (fasterMAafter < slowerMAafter)) {
         CrossDown[i] = High[i] + Range*0.5;
         if ( alertTag!=Time[0])
         {
          PlaySound("reveille.wav"); //sell wav
           //Alert(Symbol(),"  M",Period()," MA cross SELL");
         }
          alertTag = Time[0];
      }
   }
   return(0);
}

     
//+------------------------------------------------------------------+

Comments