Solar Winds_v2

Solar Winds_v2

This custom indicator, titled "Solar Wind," is designed to provide traders with a visual representation of market momentum and trend direction. It processes historical price data to create a dynamic signal that helps distinguish between bullish and bearish movements.

Core Logic and Calculation

The tool operates by analyzing price fluctuations over a specific timeframe (defined by the user-set period). Instead of looking at just the current price, it examines the highest highs and lowest lows within that window to establish a local range.

It calculates a normalized value based on where the current price sits relative to that high-low range. This calculation is then smoothed out using a weighted formula, ensuring that the resulting data isn't overly reactive to "market noise" or sudden, insignificant spikes. This creates a continuous flow of data that represents the underlying strength of the market movement.

Visual Representation and Signals

The indicator translates these calculations into a histogram shown in a separate window:

  • Trend Identification: The script evaluates whether the calculated momentum value is positive or negative.
  • Color Coding: The visual output reacts to these shifts. When the data indicates an upward trend, the indicator highlights it in one color (Lime). When the data suggests a downward trend, it shifts to another (Red).
  • Dynamic Tracking: The logic specifically looks for "crosses"—points where the momentum flips from positive to negative or vice versa. By doing this, the tool provides a clear visual cue of when the market sentiment is shifting, allowing traders to see the transition between different market phases more clearly than they might by looking at price candles alone.

In summary, this script acts as a momentum filter, smoothing out price action to reveal the prevailing trend and highlighting exactly when that trend changes direction.

Miscellaneous
Implements a curve of type %1
10 Views
0 Downloads
0 Favorites
Solar Winds_v2
//+------------------------------------------------------------------+
//|                                                                  |
//|                 Copyright © 2000-2007, MetaQuotes Software Corp. |
//|                                         http://www.metaquotes.ru |
//+------------------------------------------------------------------+
#property  copyright "Copyright © 2005, Yura Prokofiev"
#property  link      "Yura.prokofiev@gmail.com"
//----
#property  indicator_separate_window
#property  indicator_buffers 3
#property  indicator_color1  Black
#property  indicator_color2  Lime
#property  indicator_color3  Red
//----
extern int period=10;
//----
double         ExtBuffer0[];
double         ExtBuffer1[];
double         ExtBuffer2[];
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int init()
  {
   SetIndexStyle(0,DRAW_NONE);
   SetIndexStyle(1,DRAW_HISTOGRAM);
   SetIndexStyle(2,DRAW_HISTOGRAM);
   IndicatorDigits(Digits+1);
   SetIndexBuffer(0,ExtBuffer0);
   SetIndexBuffer(1,ExtBuffer1);
   SetIndexBuffer(2,ExtBuffer2);
   IndicatorShortName("SOLAR WIND");
   SetIndexLabel(1,NULL);
   SetIndexLabel(2,NULL);
   return(0);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int start()
  {
   //int     period=10;
   int    limit;
   int    counted_bars=IndicatorCounted();
   double prev,current,old;
   double Value=0,Value1=0,Value2=0,Fish=0,Fish1=0,Fish2=0;
   double price;
   double MinL=0;
   double MaxH=0;
//----
   if(counted_bars>0) counted_bars--;
   limit=Bars-counted_bars;
   for(int i=0; i<limit; i++)
     {
      MaxH=High[Highest(NULL,0,MODE_HIGH,period,i)];
      MinL=Low[Lowest(NULL,0,MODE_LOW,period,i)];
      price=(High[i]+Low[i])/2;
      Value=0.33*2*((price-MinL)/(MaxH-MinL)-0.5) + 0.67*Value1;
      Value=MathMin(MathMax(Value,-0.999),0.999);
      ExtBuffer0[i]=0.5*MathLog((1+Value)/(1-Value))+0.5*Fish1;
      Value1=Value;
      Fish1=ExtBuffer0[i];
     }
   bool up=true;
   for(i=limit-2; i>=0; i--)
     {
      current=ExtBuffer0[i];
      prev=ExtBuffer0[i+1];
      //----
      if (((current<0)&&(prev>0))||(current<0))   up= false;
      if (((current>0)&&(prev<0))||(current>0))   up= true;
      if(!up)
        {
         ExtBuffer2[i]=current;
         ExtBuffer1[i]=0.0;
        }
      else
        {
         ExtBuffer1[i]=current;
         ExtBuffer2[i]=0.0;
        }
     }
   return(0);
  }
//+------------------------------------------------------------------+

Comments