IINWMARROWS alert

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

This technical indicator is designed to identify specific trend reversal points by monitoring the interaction between two different moving averages. Its primary purpose is to signal "Buy" and "Sell" opportunities on a trading chart based on the momentum of price movement.

Core Logic Overview

The script operates by tracking two distinct mathematical lines: a Faster Moving Average and a Slower Moving Average. These lines smooth out price fluctuations to help traders see the underlying direction of the market more clearly.

How it Identifies Signals

The indicator looks for "crosses"—moments where these two lines intersect and switch positions relative to one another. To ensure accuracy and filter out minor market "noise," the script employs a three-point verification logic:

  • Buy Signals (Cross Up): The script detects a potential upward trend when the Faster Moving Average moves from below the Slower Moving Average to above it. It confirms this by checking the current position, the previous bar's position, and the subsequent data point to ensure a definitive crossover has occurred. When triggered, it marks a specific point below the price candle.
  • Sell Signals (Cross Down): Conversely, it detects a downward trend when the Faster Moving Average drops from above the Slower Moving Average to below it. When this happens, the script marks a specific point above the price candle.

Dynamic Adjustments

To make the tool more adaptable to different markets, the logic includes several customizable layers:

  • Moving Average Types: Users can choose between different calculation methods (such as Simple, Exponential, Smoothed, or Linear Weighted) to determine how quickly the averages react to new price data.
  • Dynamic Range Positioning: Instead of placing signals at fixed distances, the script calculates the average range of recent price bars. It uses this information to place the visual markers (arrows/points) consistently relative to the candle's high or low, ensuring they remain visible and clear regardless of how volatile the market is.

Alert System

Beyond providing visual cues on the chart, the logic includes a notification system. When a crossover is confirmed, the script can trigger an alert. Depending on user preferences, this can be a standard pop-up notification on the platform or a specific audio file (sound effect) to grab the trader's attention immediately when a new signal appears.

Indicators Used
Moving average indicator
Miscellaneous
Implements a curve of type %1It issuies visual alerts to the screenIt plays sound alerts
18 Views
0 Downloads
0 Favorites
IINWMARROWS alert
//+------------------------------------------------------------------+
//|                                                  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 FasterMA=  5;
extern int SlowerMA=  8; 
extern string note1 = "Faster/Slower Mode Option",
              note2 = "0=sma, 1=ema, 2=smma, 3=lwma";
extern int FasterMode=1; //0=sma, 1=ema, 2=smma, 3=lwma
extern int SlowerMode=1; //0=sma, 1=ema, 2=smma, 3=lwma
extern string note3 = "Your Alert Options",
              note4 = "true using your wav file",
              note5 = "false using default alert";
extern bool YourAlert = false;

 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])
         {
         if (YourAlert == false)
            {
            Alert(Symbol(),"  M",Period()," IINWMARROWS BUY");
            }
         else
            {
            PlaySound("alert1.wav");// buy wav
            }
         }
          alertTag = Time[0];
      }
      else if ((fasterMAnow < slowerMAnow) && (fasterMAprevious > 
slowerMAprevious) && (fasterMAafter < slowerMAafter)) {
         CrossDown[i] = High[i] + Range*0.5;
         if ( alertTag!=Time[0])
         {
          if (YourAlert == false)
             {
             Alert(Symbol(),"  M",Period()," IINWMARROWS SELL");
             }
          else
             {
             PlaySound("alert2.wav"); //sell wav
             }
         }
          alertTag = Time[0];
      }
   }
   return(0);
}

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

Comments