Solar_Wind

This technical indicator is designed to help traders identify momentum and trend reversals by analyzing price action relative to recent historical highs and lows. Rather than just following the price directly, it processes market data to determine the "strength" of a movement, providing a visual representation of the market's underlying direction.

How the Logic Works

1. Range Analysis The script looks at a specific set of recent candles (defined by a user-set period). It identifies the highest price reached and the lowest price reached within that timeframe. By comparing the current middle price to these extremes, the tool calculates where the price currently sits within its recent "territory."

2. Momentum Calculation The core logic uses a mathematical smoothing process. It doesn't just react instantly to every tick; instead, it weighs the current relative position against previous values. This creates a smoother flow of data, filtering out minor market noise and focusing on the broader trend. The result is a normalized value that tells the script whether the price is moving with strength in an upward or downward direction.

3. Trend Visualization The tool translates these calculations into a visual histogram on your chart:

  • Upward Momentum: When the calculated value is positive, the indicator highlights a specific color (Lime) to show bullish sentiment.
  • Downward Momentum: When the value turns negative, the indicator switches to another color (Red) to signal bearish sentiment.

4. Automated Alerts The script includes an intelligent notification system. It monitors the "cross-over" points—the exact moments when the momentum shifts from positive to negative or vice versa. When this change occurs, the script triggers a visual alert on your screen and plays an audible sound notification, ensuring you can react quickly to potential trend reversals without needing to watch the chart every second.

Summary for Traders

In simple terms, this tool acts as a "momentum compass." It looks at where the price is currently heading compared to its recent highs and lows, smooths out the erratic jumps of the market, and gives you a clear color-coded signal of which way the wind is blowing.

Miscellaneous
Implements a curve of type %1It issuies visual alerts to the screenIt plays sound alerts
6 Views
0 Downloads
0 Favorites
Solar_Wind
/*-----------------------------+
|			       |
| Shared by www.Aptrafx.com    |
|			       |
+------------------------------*/

#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;
         }
     }
      static datetime cDT = 0;
   
      if (cDT == 0) { cDT = iTime(NULL,0,0); } // Don't alert when start
   
   
        if (cDT != iTime(NULL,0,0))
        {
            if (
                  ((ExtBuffer0[0] > 0) && (ExtBuffer0[1] <= 0))
                  ||
                  ((ExtBuffer0[0] < 0) && (ExtBuffer0[1] >= 0))
                )
               {
                  Alert(Symbol(),AccountNumber(), "  Solar wind Direction Change");
                  PlaySound("alert.wav");
               }
               cDT = iTime(NULL,0,0);
        }       

   return(0);
  }

Comments