KI_signals_v1

Download script
Author: Kalenzo
KI_signals_v1

This script is a technical analysis tool designed for the MetaTrader platform to identify potential momentum shifts and price trends. It works by calculating a multi-layered relationship between different moving averages to generate visual signals on your trading chart.

Core Logic Overview

The tool operates primarily by measuring the distance and velocity between two different trend lines. It creates a "Histogram" value by subtracting a longer-term average from a shorter-term average. This allows the script to see how much faster the price is moving compared to its recent historical average.

To smooth out this data and reduce market "noise," the script then applies a third average to that histogram calculation. The primary signals are triggered based on when this final smoothed value crosses the zero line.

Key Features and Signals

The tool provides three distinct layers of analysis depending on your visual preferences:

1. Primary Trend Signals (Up/Down) These are the main indicators generated by the script.

  • Up Signal: Triggered when the smoothed momentum value moves from a negative state to a positive state.
  • Down Signal: Triggered when the smoothed momentum value moves from a positive state to a negative state. These signals aim to identify when the prevailing momentum is shifting direction.

2. High and Valley Points (Optional) If enabled, the script looks for specific "turning points" in the histogram.

  • It identifies local peaks (Highs) where the momentum begins to curve downward.
  • It identifies local troughs (Valleys) where the momentum begins to curve upward. These are designed to help visualize potential exhaustion points in a move.

3. Cross-Over Signals (Optional) If enabled, this provides an additional layer of confirmation by comparing the raw histogram directly against its own moving average.

  • It identifies moments where the current histogram value breaks above or below its own average, which can signal an immediate acceleration in price movement.

Summary for the User

Essentially, this script filters out minor price fluctuations to highlight significant momentum changes. By analyzing the relationship between three different timeframes (Lengths 1, 2, and 3), it attempts to provide a clearer picture of whether the market is gaining strength or losing steam, marking these transitions with visual icons on your chart for easier identification.

Indicators Used
Moving average indicatorMoving average indicator
Miscellaneous
Implements a curve of type %1
11 Views
0 Downloads
0 Favorites
KI_signals_v1

//+------------------------------------------------------------------+
//|                                                KI_signals_v1.mq4 |
//|                                                          Kalenzo |
//|                                      bartlomiej.gorski@gmail.com |
//+------------------------------------------------------------------+
#property copyright "Kalenzo"
#property link      "bartlomiej.gorski@gmail.com"

#property indicator_chart_window
#property indicator_buffers 6
#property indicator_color1 SteelBlue
#property indicator_color2 Orange
#property indicator_color3 DodgerBlue
#property indicator_color4 Magenta
#property indicator_color5 Blue
#property indicator_color6 Red

#property indicator_level1 0

extern int Length1 = 3;
extern int Length2 = 10;
extern int Length3 = 16;
extern bool showHL = false; 
extern bool showCrosses = false;

double Histo[];
double MaHisto[];

double up[];
double dn[]; 

double high[];
double valley[];

double cUp[];
double cDn[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- additional buffers are used for counting
   IndicatorBuffers(8);

   SetIndexStyle(0,DRAW_ARROW,EMPTY,0);
   SetIndexStyle(1,DRAW_ARROW,EMPTY,0);

   SetIndexStyle(2,DRAW_ARROW,EMPTY,1);
   SetIndexStyle(3,DRAW_ARROW,EMPTY,1);
   
   SetIndexStyle(4,DRAW_ARROW,EMPTY,0);
   SetIndexStyle(5,DRAW_ARROW,EMPTY,0);
   
   SetIndexArrow(0,217);
   SetIndexArrow(1,218);

   SetIndexArrow(2,233);
   SetIndexArrow(3,234);

   SetIndexArrow(4,108);
   SetIndexArrow(5,108);
   
   IndicatorDigits(6);
   
   SetIndexBuffer(0,high);
   SetIndexBuffer(1,valley);

   SetIndexBuffer(2,up);
   SetIndexBuffer(3,dn);

   SetIndexBuffer(4,cUp);
   SetIndexBuffer(5,cDn);
   
   SetIndexBuffer(6,Histo);
   SetIndexBuffer(7,MaHisto);
   
   IndicatorShortName("KI signals v1");
   
   SetIndexLabel(2,"UP SIGNAL");
   SetIndexLabel(3,"DN SIGNAL");
   
   
   
   return(0);
  }
//+------------------------------------------------------------------+
//| SignalIndicator                                                  |
//+------------------------------------------------------------------+
int start()
  {
   int limit;
   int counted_bars=IndicatorCounted();
   if(counted_bars<0) counted_bars=0;
   if(counted_bars>0) counted_bars--;
   limit=Bars-counted_bars;
//----
      
   for(int i = 0 ;i <= limit ;i++)Histo[i] = iMA(Symbol(),0,Length1,0,MODE_EMA,PRICE_CLOSE,i) - iMA(Symbol(),0,Length2,0,MODE_EMA,PRICE_CLOSE,i);      
   
   for(int j = 0 ;j <= limit ;j++)MaHisto[j] = iMAOnArray(Histo,0,Length3,0,MODE_EMA,j);
   
   for(int m = 0 ;m <= limit ;m++)
   {
      if(MaHisto[m+1] <= 0 && MaHisto[m]>0)
      {
         up[m] = Open[m]-(5*Point);
      }
      
      if(MaHisto[m+1] >= 0 && MaHisto[m]<0)
      {
         dn[m] = Open[m]+(5*Point);
      }
   
   
      if(showHL)
      {   
         if(Histo[m]<= 0 && Histo[m+2]<= Histo[m+1] && Histo[m+1]>Histo[m])
         {
            high[m+1] = High[m+1]+(2*Point);
         }
      
         if(Histo[m]>= 0 && Histo[m+2]>= Histo[m+1] && Histo[m+1]<Histo[m])
         {
            valley[m+1] = Low[m+1]+(2*Point);
         }
      }  
      
      if(showCrosses)
      {
         if(Histo[m+1] <= MaHisto[m+1] && Histo[m] > MaHisto[m])
         {
            cUp[m] = Open[m];
         }
      
         if(Histo[m+1] >= MaHisto[m+1] && Histo[m] < MaHisto[m])
         {
            cDn[m] = Open[m];
         }
      }      
      
      
   }
//----
 return(0);
  }
//+------------------------------------------------------------------+

Comments