Vasily_Pip_Sniper_v3.1Ratio

Download script
Author: By: E
Vasily_Pip_Sniper_v3.1Ratio

Overview

The Vasily Pip Sniper is a technical analysis tool designed to help traders visualize market momentum and trend strength by comparing two different types of moving averages. Rather than just showing price movement, this indicator calculates the relationship between "fast" and "slow" market data to generate a visual signal in a separate window on your chart.

Core Logic and Mechanics

1. Dynamic Parameter Scaling The script is designed to be intelligent regarding timeframes. It offers two ways to handle its calculations:

  • Manual Mode: Users can manually set the specific periods for both fast and slow data.
  • Automatic Mode: If left to its default settings, the script automatically detects which timeframe you are viewing (e.g., 1-minute, 1-hour, daily, or monthly). It then applies a pre-configured "optimal" period for that specific timeframe to ensure the signals remain consistent and relevant regardless of your zoom level.

2. Moving Average Integration The indicator uses two primary layers of data:

  • The Fast Layer: Tracks short-term price fluctuations.
  • The Slow Layer: Tracks long-term price trends. The script allows for different calculation methods (such as Simple, Exponential, Smoothed, or Linear Weighted moving averages), giving it the flexibility to be tuned to different market styles.

3. The Calculation Process Instead of simply subtracting one line from another, the logic performs a multi-step calculation:

  • It first calculates the Moving Average of the Moving Averages.
  • It then determines the "distance" or deviation between these smoothed values.
  • Finally, it converts this distance into a percentage-based value.

4. Visual Output The result is displayed as two primary lines in a separate window:

  • Upward Movement: Represents positive momentum where the fast data is leading the slow data significantly.
  • Downward Movement: Represents negative momentum where the slow data is dominating or the trend is reversing.

By viewing these lines, traders can identify the intensity of a trend—looking for moments where the gap between short-term and long-term price behavior expands or contracts, which often precedes significant market shifts.

Indicators Used
Moving average indicatorMoving average indicator
Miscellaneous
Implements a curve of type %1
10 Views
0 Downloads
0 Favorites
Vasily_Pip_Sniper_v3.1Ratio
//+------------------------------------------------------------------+
//|                                            Vasily Pip Sniper.mq4 |
//|                                                            By: E |
//|                                                                  |
//+------------------------------------------------------------------+
//mod2008fxtsd
#property copyright "By: E"

//----
#property indicator_separate_window
#property indicator_buffers 2
#property indicator_color1 Blue
#property indicator_color2 Red
#property indicator_width1 2
#property indicator_width2 2

#property indicator_level1  1
#property indicator_level2  0.25
#property indicator_level3 -0.25
#property indicator_level4 -1
#property indicator_levelcolor DarkSlateGray




extern int    Price     = 6;
extern int    Method    = 3;
extern bool   UseUserVariables = True;
extern int    FastPeriod = 12;//21
extern int    SlowPeriod = 26;//144
extern string  notes       = "If UseUserVariables set to false, Fast&SlowPeriods are preset for each TF";
extern string  price_      = "0C 1O 2H 3L 4Md 5Tp 6WghC: Md(HL/2)4,Tp(HLC/3)5,Wgh(HLCC/4)6";
extern string  Method_     = "SMA0 EMA1 SMMA2 LWMA3";

//---- parameters



int per1, per2;
//---- buffers
double up[];
double dn[];
double WorkBuffer[];
double WorkBuffer2[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//----
if (!UseUserVariables)
{
// for monthly
int mn_per = 12;
int mn_fast = 3;
// for weekly
int w_per = 9;
int w_fast = 3;
// for daily
int d_per = 5;
int d_fast = 3;
// for H4
int h4_per = 12;
int h4_fast = 2;
// for H1
int h1_per = 24;
int h1_fast = 8;
// for M30
int m30_per = 16;
int m30_fast = 2;
// for M15
int m15_per = 16;
int m15_fast = 4;
// for M5
int m5_per = 12;
int m5_fast = 3;
// for M1
int m1_per = 30;
int m1_fast = 10;
//----
}  
//---- 
     if (UseUserVariables)
     {
     per1=FastPeriod;
     per2=SlowPeriod;
     }
     else
     {
      switch(Period())
     {
       case 1:     per2 = m1_per;  per1 = m1_fast;  break;
       case 5:     per2 = m5_per;  per1 = m5_fast;  break;
       case 15:    per2 = m15_per; per1 = m15_fast; break;
       case 30:    per2 = m30_per; per1 = m30_fast; break;
       case 60:    per2 = h1_per;  per1 = h1_fast;  break;
       case 240:   per2 = h4_per;  per1 = h4_fast;  break;
       case 1440:  per2 = d_per;   per1 = d_fast;   break;
       case 10080: per2 = w_per;   per1 = w_fast;   break;
       case 43200: per2 = mn_per;  per1 = mn_fast;  break;
     } 
     }

 
string Indicator_Name = "Vasily Pip Sniper ZL ("+per1+","+ per2+")   ";
//-----
IndicatorBuffers(4);
   SetIndexStyle(0, DRAW_LINE);
   SetIndexBuffer(0, up);
    
   SetIndexStyle(1, DRAW_LINE);
   SetIndexBuffer(1, dn); 
   
   SetIndexBuffer(2, WorkBuffer);
   SetIndexBuffer(3, WorkBuffer2);
   
   SetIndexDrawBegin(0, per1 + per2);
   SetIndexDrawBegin(1, per1 + per2);

   IndicatorShortName(Indicator_Name);
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
   int limit;
   int counted_bars = IndicatorCounted();
 
//---- 
   if(counted_bars < 0) 
       return(-1);
//---- 
   if(counted_bars > 0) 
       counted_bars --;
   limit = Bars - counted_bars;
//---- 
  for(int i = 0; i < limit; i++)
       {
       WorkBuffer[i] = iMA(NULL, 0, per1, 0, Method, Price, i);
       WorkBuffer2[i]= iMA(NULL, 0, per2, 0, Method, Price, i);
       }
       
       for(i = 0; i < limit; i++)
       {
       double wMA, wMA2, lMA, sMA;
     
       wMA = iMAOnArray(WorkBuffer, 0, per1, 0, Method, i);
       lMA =   2*WorkBuffer[i]-wMA ;
     
       wMA2 = iMAOnArray(WorkBuffer2, 0, per2, 0, Method, i);
       sMA =   2*WorkBuffer2[i]-wMA2;
       
       up[i]=100*(lMA-sMA)/sMA;
       dn[i]=-1*up[i];
       
       
       
       }
//----
   return(0);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+



Comments