KI_signals_v2_v1

Download script
Author: Kalenzo
KI_signals_v2_v1

This script is a technical analysis tool designed to help traders identify potential momentum shifts and price trends on their trading charts. It works by analyzing the relationship between different moving averages to determine the underlying strength of the market.

Core Logic Overview

The indicator functions by calculating the "distance" between two different exponential moving averages. By subtracting a slower average from a faster one, it creates a momentum value (similar to a histogram). The script then takes this momentum value and smooths it out even further using a third calculation. This double-layer smoothing helps filter out market "noise," making it easier to see the primary direction of the price action.

Key Features and Signals

The tool provides several different ways to visualize market activity based on how you configure your settings:

  • Primary Directional Signals: The script monitors for specific "crossovers" in the smoothed momentum data. When the smoothed data moves from a negative value to a positive one, it indicates a potential upward shift. Conversely, when it moves from positive to negative, it suggests a downward shift. These are marked on your chart as clear entry/exit points.

  • Highs and Lows (Optional): If enabled, the script can identify local peaks and valleys in the momentum. It looks for specific points where the price momentum reaches a turning point—essentially highlighting where a temporary move might be losing steam before reversing.

  • Momentum Crosses (Optional): This feature allows you to see every time the immediate momentum value crosses over its own average. This provides a more granular look at how price speed is changing, helping traders stay ahead of rapid fluctuations in the market.

Summary for the Trader

In simple terms, this script acts as a trend-following assistant. Instead of just looking at where the price is now, it looks at the speed and acceleration of the price. It alerts you when the "momentum" has shifted significantly enough to suggest a change in the market's direction, helping you identify potential buying opportunities (Up Signals) and selling opportunities (Down Signals).

Indicators Used
Moving average indicatorMoving average indicator
Miscellaneous
Implements a curve of type %1
5 Views
1 Downloads
0 Favorites
KI_signals_v2_v1
/*-----------------------------+
|			       |
| Shared by www.Aptrafx.com    |
|			       |
+------------------------------*/


//+------------------------------------------------------------------+
//|                                                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;
 bool showHL = false; 
 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