IchimokuAlert_v1
Download scriptThis script is a specialized technical analysis tool designed for the MetaTrader trading platform. It automates the calculation and visualization of the Ichimoku Kinko Hyo (often called the Ichimoku Cloud), a comprehensive charting technique used to identify trends, support levels, and potential price reversals in financial markets.
Core Visual Components
The script automatically calculates and draws five distinct components on your trading chart to provide a multi-layered view of market momentum:
- Tenkan Sen (Conversion Line): A short-term moving average that identifies immediate price trends.
- Kijun Sen (Base Line): A medium-term moving average that acts as a primary indicator of the overall trend's stability.
- Senkou Span A & B (The Cloud/Kumo): These lines create a "cloud" on the chart. The space between them highlights areas of potential support and resistance, helping traders identify whether the market is in a bullish, bearish, or neutral state.
- Chinkou Span (Lagging Span): This reflects past price action shifted forward on the chart to help confirm current trends by comparing previous closing prices with current ones.
Operational Logic
The script functions by constantly scanning historical price data (the highest highs and lowest lows over specific timeframes) to plot these components in real-time. By calculating the midpoint of these prices, it creates a visual "map" of where the market has been and where it is likely heading.
Automated Alert System
Beyond just drawing lines on the screen, this tool includes an interactive notification system. Users can configure the script to monitor specific "crossover" events that often signal significant shifts in market sentiment:
- Conversion Line Crosses: The script monitors when the Tenkan Sen (short-term) crosses over the Kijun Sen (medium-term). When these lines intersect, it can trigger an audible sound and a pop-up alert on your screen, indicating a potential "Buy" or "Sell" signal.
- Lagging Span Crosses: The script can also monitor when the Chinkou Span crosses the current price. This provides a secondary confirmation of trend strength and can trigger separate alerts for market entries.
User Experience
The script is designed to handle the heavy lifting of mathematical calculations automatically. Instead of a trader manually calculating averages or identifying cloud shifts, the tool provides a clean visual interface where significant opportunities are highlighted through real-time notifications, allowing for faster decision-making in dynamic trading environments.
//+------------------------------------------------------------------+
//| IchimokuAlert_v1.mq4 |
//| Copyright © 2006, Forex-TSD.com |
//| Written by IgorAD,igorad2003@yahoo.co.uk |
//| http://finance.groups.yahoo.com/group/TrendLaboratory |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2006, Forex-TSD.com "
#property link "http://www.forex-tsd.com/"
#property indicator_chart_window
#property indicator_buffers 7
#property indicator_color1 Red
#property indicator_color2 Blue
#property indicator_color3 SandyBrown
#property indicator_color4 Thistle
#property indicator_color5 Lime
#property indicator_color6 SandyBrown
#property indicator_color7 Thistle
//---- input parameters
extern int Tenkan=9;
extern int Kijun=26;
extern int Senkou=52;
extern int AlertMode=0;
//---- buffers
double Tenkan_Buffer[];
double Kijun_Buffer[];
double SpanA_Buffer[];
double SpanB_Buffer[];
double Chinkou_Buffer[];
double SpanA2_Buffer[];
double SpanB2_Buffer[];
//----
int a_begin;
bool UptrendAlert1,DntrendAlert1,UptrendAlert2,DntrendAlert2;
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
//----
SetIndexStyle(0,DRAW_LINE);
SetIndexBuffer(0,Tenkan_Buffer);
SetIndexDrawBegin(0,Tenkan-1);
SetIndexLabel(0,"Tenkan Sen");
//----
SetIndexStyle(1,DRAW_LINE);
SetIndexBuffer(1,Kijun_Buffer);
SetIndexDrawBegin(1,Kijun-1);
SetIndexLabel(1,"Kijun Sen");
//----
a_begin=Kijun; if(a_begin<Tenkan) a_begin=Tenkan;
SetIndexStyle(2,DRAW_HISTOGRAM,STYLE_DOT);
SetIndexBuffer(2,SpanA_Buffer);
SetIndexDrawBegin(2,Kijun+a_begin-1);
SetIndexShift(2,Kijun);
SetIndexLabel(2,NULL);
SetIndexStyle(5,DRAW_LINE,STYLE_DOT);
SetIndexBuffer(5,SpanA2_Buffer);
SetIndexDrawBegin(5,Kijun+a_begin-1);
SetIndexShift(5,Kijun);
SetIndexLabel(5,"Senkou Span A");
//----
SetIndexStyle(3,DRAW_HISTOGRAM,STYLE_DOT);
SetIndexBuffer(3,SpanB_Buffer);
SetIndexDrawBegin(3,Kijun+Senkou-1);
SetIndexShift(3,Kijun);
SetIndexLabel(3,NULL);
SetIndexStyle(6,DRAW_LINE,STYLE_DOT);
SetIndexBuffer(6,SpanB2_Buffer);
SetIndexDrawBegin(6,Kijun+Senkou-1);
SetIndexShift(6,Kijun);
SetIndexLabel(6,"Senkou Span B");
//----
SetIndexStyle(4,DRAW_LINE);
SetIndexBuffer(4,Chinkou_Buffer);
SetIndexShift(4,-Kijun);
SetIndexLabel(4,"Chinkou Span");
//----
return(0);
}
//+------------------------------------------------------------------+
//| Ichimoku Kinko Hyo |
//+------------------------------------------------------------------+
int start()
{
int i,k;
int counted_bars=IndicatorCounted();
double high,low,price;
//----
if(Bars<=Tenkan || Bars<=Kijun || Bars<=Senkou) return(0);
//---- initial zero
if(counted_bars<1)
{
for(i=1;i<=Tenkan;i++) Tenkan_Buffer[Bars-i]=0;
for(i=1;i<=Kijun;i++) Kijun_Buffer[Bars-i]=0;
for(i=1;i<=a_begin;i++) { SpanA_Buffer[Bars-i]=0; SpanA2_Buffer[Bars-i]=0; }
for(i=1;i<=Senkou;i++) { SpanB_Buffer[Bars-i]=0; SpanB2_Buffer[Bars-i]=0; }
}
//---- Tenkan Sen
i=Bars-Tenkan;
if(counted_bars>Tenkan) i=Bars-counted_bars-1;
while(i>=0)
{
high=High[i]; low=Low[i]; k=i-1+Tenkan;
while(k>=i)
{
price=High[k];
if(high<price) high=price;
price=Low[k];
if(low>price) low=price;
k--;
}
Tenkan_Buffer[i]=(high+low)/2;
i--;
}
//---- Kijun Sen
i=Bars-Kijun;
if(counted_bars>Kijun) i=Bars-counted_bars-1;
while(i>=0)
{
high=High[i]; low=Low[i]; k=i-1+Kijun;
while(k>=i)
{
price=High[k];
if(high<price) high=price;
price=Low[k];
if(low>price) low=price;
k--;
}
Kijun_Buffer[i]=(high+low)/2;
i--;
}
//---- Senkou Span A
i=Bars-a_begin+1;
if(counted_bars>a_begin-1) i=Bars-counted_bars-1;
while(i>=0)
{
price=(Kijun_Buffer[i]+Tenkan_Buffer[i])/2;
SpanA_Buffer[i]=price;
SpanA2_Buffer[i]=price;
i--;
}
//---- Senkou Span B
i=Bars-Senkou;
if(counted_bars>Senkou) i=Bars-counted_bars-1;
while(i>=0)
{
high=High[i]; low=Low[i]; k=i-1+Senkou;
while(k>=i)
{
price=High[k];
if(high<price) high=price;
price=Low[k];
if(low>price) low=price;
k--;
}
price=(high+low)/2;
SpanB_Buffer[i]=price;
SpanB2_Buffer[i]=price;
i--;
}
//---- Chinkou Span
i=Bars-1;
if(counted_bars>1) i=Bars-counted_bars-1;
while(i>=0) { Chinkou_Buffer[i]=Close[i]; i--; }
//----
if (AlertMode == 1 || AlertMode == 3)
{
string Message1 = Symbol()+" M"+Period()+":Tenkan crosses Kijun";
if ( Tenkan_Buffer[0]>Kijun_Buffer[0] && Tenkan_Buffer[1]<Kijun_Buffer[1])
PlaySound("alert.wav");
if ( Tenkan_Buffer[0]<Kijun_Buffer[0] && Tenkan_Buffer[1]>Kijun_Buffer[1])
PlaySound("alert.wav");
if ( Tenkan_Buffer[1]>Kijun_Buffer[1] && Tenkan_Buffer[2]<Kijun_Buffer[2] && !UptrendAlert1)
{Alert(Message1+"Signal for BUY"); UptrendAlert1 = true; DntrendAlert1 = false;}
if ( Tenkan_Buffer[1]<Kijun_Buffer[1] && Tenkan_Buffer[2]>Kijun_Buffer[2] && !DntrendAlert1)
{Alert(Message1+"Signal for SELL"); UptrendAlert1 = false; DntrendAlert1 = true;}
}
if (AlertMode == 2 || AlertMode == 3)
{
string Message2 = Symbol()+" M"+Period()+":Chinkou crosses Price";
if ( Close[0]>Close[0+Kijun] && Close[1]<Close[1+Kijun])
PlaySound("alert2.wav");
if ( Close[0]<Close[0+Kijun] && Close[1]>Close[1+Kijun])
PlaySound("alert2.wav");
if ( Close[1]>Close[1+Kijun] && Close[2]<Close[2+Kijun] && !UptrendAlert2)
{Alert(Message2+":Signal for BUY"); DntrendAlert2 = false; UptrendAlert2 = true;}
if ( Close[1]<Close[1+Kijun] && Close[2]>Close[2+Kijun] && !DntrendAlert2)
{Alert(Message2+":Signal for SELL"); DntrendAlert2 = true; UptrendAlert2 = false;}
}
return(0);
}
//+------------------------------------------------------------------+
Comments