Author: Copyright � 2004, AlexSilver ? ????? +
NoName21

This script is designed to visualize two specific components of the Ichimoku Kinko Hyo, a popular technical analysis tool used in financial trading to identify market trends and momentum. By calculating these specific data points, the indicator helps traders understand the "balance" of the market at different timeframes.

Core Functionality

The script automatically calculates and plots two distinct moving averages on your chart: the Tenkan-sen (Conversion Line) and the Kijun-sen (Base Line). Unlike standard moving averages that might simply average the closing prices of a set period, these lines use a unique logic based on market extremes.

How the Logic Works

To create these lines, the script follows a specific three-step mathematical process for each component:

  • Identifying Price Extremes: For every defined period (determined by the user's settings), the script scans back through the historical data to find the highest peak and the lowest valley.
  • Calculating the Midpoint: Once it identifies the highest high and the lowest low within that timeframe, it calculates the exact middle point between them. This "mean price" becomes the value for that specific point on the chart.
  • Time Offsets (Shifting): The script doesn't just plot these values on the current candle. It applies a "shift"—a forward displacement in time. This allows the indicator to project data into the future based on historical volatility, helping traders see how past price action influences current market sentiment.

Visual Representation

  • Tenkan-sen: Generally reacts faster to recent price changes. It serves as a short-term momentum indicator.
  • Kijun-sen: Reacts more slowly and represents the medium-term trend.

By displaying both lines simultaneously, the script allows you to see the relationship between short-term fluctuations and broader market trends, providing a clearer picture of where the price is heading relative to its recent history.

Miscellaneous
Implements a curve of type %1
15 Views
0 Downloads
0 Favorites
NoName21
//+------------------------------------------------------------------+
//|                                                     Ichimoku.mq4 |
//|                      Copyright © 2004, MetaQuotes Software Corp. |
//|                      Copyright © 2004, AlexSilver ? ????? +      |
//|                                       http://www.metaquotes.net/ |
//|                                       http://www.viac.ru/        |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2004, AlexSilver ? ????? +"
#property link      "http://www.viac.ru/"

#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 Red
#property indicator_color2 Blue
//---- input parameters
extern int Tenkan=9;
extern int Kijun=26;
extern int TenkanShift=3;
extern int KijunShift=9;
//---- buffers
double Tenkan_Buffer[];
double Kijun_Buffer[];
//----
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- ????? Tenkan-sen
   SetIndexStyle(0,DRAW_LINE);
   SetIndexBuffer(0,Tenkan_Buffer);
   SetIndexDrawBegin(0,Tenkan+TenkanShift-1);
   SetIndexShift(0,TenkanShift);
   SetIndexLabel(0,"Tenkan Sen");
//---- ????? Kijun-sen
   SetIndexStyle(1,DRAW_LINE);
   SetIndexBuffer(1,Kijun_Buffer);
   SetIndexDrawBegin(1,Kijun+KijunShift-1);
   SetIndexShift(1,KijunShift);
   SetIndexLabel(1,"Kijun Sen");
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Ichimoku Kinko Hyo                                               |
//+------------------------------------------------------------------+
int start()
  {
   int    i,k;
   int    counted_bars=IndicatorCounted();
   double high,low,price;
//----
   if(Bars<=Tenkan || Bars<=Kijun) 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;
     }
//---- 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+TenkanShift]=(high+low)/2;
      i--;
     } i=TenkanShift-1;
   while(i>=0)
     {
      high=High[0]; low=Low[0]; k=Tenkan-TenkanShift+i;
      while(k>=0)
        {
         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+KijunShift]=(high+low)/2;
      i--;
     } i=KijunShift-1;
   while(i>=0)
     {
      high=High[0]; low=Low[0]; k=Kijun-KijunShift+i;
      while(k>=0)
        {
         price=High[k];
         if(high<price) high=price;
         price=Low[k];
         if(low>price) low=price;
         k--;
        }
      Kijun_Buffer[i]=(high+low)/2;
      i--;
     }
//----
   return(0);
  }
//+------------------------------------------------------------------+

Comments