SilverTrend
Download scriptThis tool is designed to provide visual guidance on market trends by identifying significant price movements and "breakout" zones. Instead of cluttering the screen with complex lines, it uses a histogram-style visual to highlight specific price action based on historical volatility and range analysis.
How the Logic Works
The script operates by scanning through a specific number of recent candles on your chart (determined by your settings) to establish a baseline of market behavior. Here is the step-by-step logic it follows:
1. Range Detection For every candle on the chart, the tool looks back at a set period (defined by the "SSP" parameter). It identifies the highest price (High) and the lowest price (Low) reached during that specific window. This creates a "trading range" for that moment in time.
2. Dynamic Threshold Calculation Rather than simply looking at the highs and lows, the tool calculates a specific percentage of that range based on your "Risk" input. It creates two invisible boundary lines:
- An Upper Boundary: A point slightly below the highest peak.
- A Lower Boundary: A point slightly above the lowest trough.
3. Identifying Breakouts The tool then compares the actual closing price of a candle against these boundaries. It is looking for "decisive" moves:
- Bearish Signal: If the price closes below the Lower Boundary, it identifies a downward momentum shift.
- Bullish Signal: If the price closes above the Upper Boundary, it identifies an upward momentum shift.
4. Visual Representation Once a breakout is confirmed, the script draws a histogram on your chart:
- It marks the high and low points of those specific candles to show you exactly where the momentum occurred.
- The visual output allows you to see at a glance whether the price is currently pushing into new territory or if it is struggling to break out of its established range.
Summary for the Trader
Essentially, this script filters out market "noise." It ignores minor fluctuations and only highlights instances where the price closes outside of its expected range based on recent history. By looking at these highlighted sections, you can better identify the strength of a trend and see where the market is making significant moves relative to its recent boundaries.
//+------------------------------------------------------------------+
//| SilverTrend.mq4
//| Ramdass - Conversion only
//+------------------------------------------------------------------+
#property copyright "SilverTrend rewritten by CrazyChart"
#property link "http://viac.ru/"
#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 Blue
#property indicator_color2 Red
//---- input parameters
extern int RISK=3;
extern int SSP=9;
extern int CountBars=350;
//---- buffers
double val1[];
double val2[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
string short_name;
//---- indicator line
IndicatorBuffers(2);
SetIndexStyle(0,DRAW_HISTOGRAM,0,2);
SetIndexStyle(1,DRAW_HISTOGRAM,0,2);
SetIndexBuffer(0,val1);
SetIndexBuffer(1,val2);
//----
return(0);
}
//+------------------------------------------------------------------+
//| SilverTrend |
//+------------------------------------------------------------------+
int start()
{
if (CountBars>=Bars) CountBars=Bars;
SetIndexDrawBegin(0,Bars-CountBars+SSP);
SetIndexDrawBegin(1,Bars-CountBars+SSP);
int i,shift,counted_bars=IndicatorCounted();
int i1,i2,x1=70,x2=30,K;
double Range,AvgRange,smin,smax,SsMax,SsMin,price;
//----
if(Bars<=SSP+1) return(0);
//---- initial zero
if(counted_bars<SSP+1)
{
for(i=1;i<=SSP;i++) val1[CountBars-i]=0.0;
for(i=1;i<=SSP;i++) val2[CountBars-i]=0.0;
}
//----
K=33-RISK;
for (shift = CountBars-SSP; shift>=0; shift--)
{
SsMax=High[shift]; SsMin=Low[shift];
for (i2=shift;i2<=shift+SSP-1;i2++)
{
price=High[i2];
if(SsMax<price) SsMax=price;
price=Low[i2];
if(SsMin>=price) SsMin=price;
}
smin = SsMin+(SsMax-SsMin)*K/100;
smax = SsMax-(SsMax-SsMin)*K/100;
val1[shift]=0;
val2[shift]=0;
if (Close[shift]<smin)
{
val1[shift]=Low[shift]; val2[shift]=High[shift];
}
if (Close[shift]>smax)
{
val1[shift]=High[shift]; val2[shift]=Low[shift];
}
}
return(0);
}
//+------------------------------------------------------------------+
Comments