SilverTrend_Signal1_v1
Download scriptThis tool is designed to act as a visual trend signal indicator for financial charts. Its primary purpose is to identify clear shifts in market direction—specifically, when the price moves from a downward trend into an upward momentum, or vice versa—and mark these transition points with distinct symbols on the screen.
Core Methodology
The logic operates by analyzing the price action over a specific look-back period. It doesn't just look at where the price is right now; it calculates the volatility and extremes of recent price movement to determine if the current price is "breaking out" of its established range.
Here is how the system processes this information:
- Volatility Assessment: The tool first calculates the average size of price candles (the distance between the high and low points) over a set number of bars. This helps the indicator understand the current "mood" of the market—whether it is moving aggressively or calmly.
- Dynamic Range Detection: It scans a window of recent price data to identify the highest highs and the lowest lows reached during that period. By finding these boundaries, it establishes a "trading zone."
- The Threshold Logic: Instead of waiting for a simple price touch, the tool applies a percentage-based buffer (determined by user settings). It creates an invisible upper and lower boundary within the recent trading zone.
- Trend Confirmation: The script constantly monitors whether the closing price has breached these boundaries:
- Bullish Signal: If the price closes significantly above the calculated upper resistance, it registers a trend shift to "Up."
- Bearish Signal: If the price closes significantly below the calculated lower support, it registers a trend shift to "Down."
Visual Output
To make this data actionable for a trader, the script filters out the constant noise of minor price fluctuations. It only places an icon on the chart at the exact moment the trend status flips from one state to another.
- When the market flips from bearish to bullish, a signal appears below the candle.
- When the market flips from bullish to bearish, a signal appears above the candle.
By focusing only on these specific "flip" points, the tool helps users identify the start of new movements while ignoring the fluctuations that occur within an established trend.
/*-----------------------------+
| |
| Shared by www.Aptrafx.com |
| |
+------------------------------*/
//+------------------------------------------------------------------+
//| SilverTrend_Signal.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 Aqua
#property indicator_color2 Violet
//---- input parameters
extern int RISK=3;
extern int CountBars=350;
int SSP=9;
//---- buffers
double val1[];
double val2[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
string short_name;
//---- indicator line
IndicatorBuffers(2);
SetIndexStyle(0,DRAW_ARROW);
SetIndexArrow(0,233);
SetIndexStyle(1,DRAW_ARROW);
SetIndexArrow(1,234);
SetIndexBuffer(0,val1);
SetIndexBuffer(1,val2);
//----
return(0);
}
//+------------------------------------------------------------------+
//| SilverTrend_Signal |
//+------------------------------------------------------------------+
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,K;
double Range,AvgRange,smin,smax,SsMax,SsMin,price;
bool uptrend,old;
//----
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--)
{
Range=0;
AvgRange=0;
for (i1=shift; i1<=shift+SSP; i1++)
{AvgRange=AvgRange+MathAbs(High[i1]-Low[i1]);
}
Range=AvgRange/(SSP+1);
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)
{
uptrend = false;
}
if (Close[shift]>smax)
{
uptrend = true;
}
if (uptrend!=old && uptrend==true) {val1[shift]=Low[shift]-Range*0.5;}
if (uptrend!=old && uptrend==false) {val2[shift]=High[shift]+Range*0.5;}
// Comment(shift);
old=uptrend;
}
return(uptrend);
}
//+------------------------------------------------------------------+
Comments