The Silver-channels script is a technical analysis tool designed to project multiple price corridors onto a trading chart. Rather than relying on a single line, it creates a visual framework of "channels" that helps traders identify potential support and resistance zones based on historical price extremes.
Core Logic and Functionality
The indicator operates by analyzing specific windows of historical price data (determined by user-defined periods) to establish the high and low boundaries of the market. It then projects these boundaries forward into different layers or "channels."
1. Dynamic Range Calculation The tool continuously scans past price action to identify the highest highs and lowest lows within a set timeframe. By establishing this range, the script can calculate relative percentages of the price movement. These percentages are used to draw the various channel lines.
2. Multi-Layered Channels The script generates four distinct types of channels, each providing a different perspective on market geometry:
- Silver-channels: These are calculated using a specific percentage offset (default 38.2%). They act as primary reference points for the current price structure.
- Sky-channels: These use a tighter percentage offset (default 23.6%), creating a "ceiling" and "floor" closer to the immediate price action.
- Zen-channels: These represent the absolute extremes—the direct high and low of the analyzed period—providing a clear view of the total range.
- Future-channels: Unlike the others, these project outward beyond the current range using an expansion percentage (default 61.8%), helping traders anticipate where the market might move next.
3. Visual Offsets and Shifts To ensure the chart remains readable and to prevent visual clutter, the script utilizes "Shifts." This allows the different channels to be displayed at slightly different distances from the current price candle. This separation makes it easier for a trader to distinguish between overlapping levels at a glance.
How It Benefits the Trader
By visualizing these various levels simultaneously, the tool provides a comprehensive map of the market's "geography." Instead of looking for a single point of entry, a trader can see a series of corridors. When price enters these zones, it indicates areas where historical volatility has peaked or bottomed out, offering a more nuanced view of potential turning points and trend continuations.
//+------------------------------------------------------------------+
//| Silver-channels.mq4 |
//| Copyright © 2004, AlexSilver |
//| http://viac.ru/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2004, AlexSilver"
#property link "http://viac.ru/"
#property indicator_chart_window
#property indicator_buffers 8
#property indicator_color1 Silver
#property indicator_color2 Silver
#property indicator_color3 SkyBlue
#property indicator_color4 SkyBlue
#property indicator_color5 YellowGreen
#property indicator_color6 YellowGreen
#property indicator_color7 Magenta
#property indicator_color8 Magenta
//---- input parameters
extern int Shift=3;
extern int TSP=9;
extern int SSP=26;
extern double SilvCh=38.2;
extern double SkyCh=23.6;
extern double ZenCh=0;
extern double FutCh=61.8;
//---- buffers
double SCH_BufferH[];
double SCH_BufferL[];
double Sky_BufferH[];
double Sky_BufferL[];
double Zen_BufferH[];
double Zen_BufferL[];
double Fut_BufferL[];
double Fut_BufferH[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
//----
SetIndexStyle(0,DRAW_LINE);
SetIndexBuffer(0,SCH_BufferH);
SetIndexDrawBegin(0,SSP+Shift-1);
SetIndexShift(0,Shift);
SetIndexLabel(0,"Silver-channel High");
//----
SetIndexStyle(1,DRAW_LINE);
SetIndexBuffer(1,SCH_BufferL);
SetIndexDrawBegin(1,SSP+Shift-1);
SetIndexShift(1,Shift);
SetIndexLabel(1,"Silver-channel Low");
//----
SetIndexStyle(2,DRAW_LINE);
SetIndexBuffer(2,Sky_BufferH);
SetIndexDrawBegin(2,SSP+Shift-1);
SetIndexShift(2,Shift);
SetIndexLabel(2,"Sky-channel High");
//----
SetIndexStyle(3,DRAW_LINE);
SetIndexBuffer(3,Sky_BufferL);
SetIndexDrawBegin(3,SSP+Shift-1);
SetIndexShift(3,Shift);
SetIndexLabel(3,"Sky-channel Low");
//----
SetIndexStyle(4,DRAW_LINE);
SetIndexBuffer(4,Zen_BufferH);
SetIndexDrawBegin(4,SSP+Shift-1);
SetIndexShift(4,Shift);
SetIndexLabel(4,"Zen-channel High");
//----
SetIndexStyle(5,DRAW_LINE);
SetIndexBuffer(5,Zen_BufferL);
SetIndexDrawBegin(5,SSP+Shift-1);
SetIndexShift(5,Shift);
SetIndexLabel(5,"Zen-channel Low");
//----
SetIndexStyle(6,DRAW_LINE);
SetIndexBuffer(6,Fut_BufferL);
SetIndexDrawBegin(6,SSP+TSP-1);
SetIndexShift(6,TSP);
SetIndexLabel(6,"Future-channel Low");
//----
SetIndexStyle(7,DRAW_LINE);
SetIndexBuffer(7,Fut_BufferH);
SetIndexDrawBegin(7,SSP+TSP-1);
SetIndexShift(7,TSP);
SetIndexLabel(7,"Future-channel High");
//----
return(0);
}
//+------------------------------------------------------------------+
//| Silver-channels |
//+------------------------------------------------------------------+
int start()
{
int i,k;
int counted_bars=IndicatorCounted(); // òåêóùèé áàð äëÿ ðàñ÷åòà èíäèêàòîðà
double high,low,price;
//----
if(Bars<=SSP) return(0); // åñëè áàðîâ ìåíüøå Êèäæóí-ïåðèîäà íàôèã
//---- initial zero
if(counted_bars<1) // åñëè òåêóùèé áàð ìåíüøå åäèíèöû - íàôèã ñ ïëÿæà, óñòàíàâëèâàåì âñå â íóëè
{
for(i=1;i<=SSP;i++) SCH_BufferH[Bars-i]=0; SCH_BufferL[Bars-i]=0; Sky_BufferH[Bars-i]=0; Sky_BufferL[Bars-i]=0; Zen_BufferH[Bars-i]=0; Zen_BufferL[Bars-i]=0; Fut_BufferL[Bars-i]=0; Fut_BufferH[Bars-i]=0;
}
//---- ñòàíäàðòíûå âû÷èñëåíèÿ äî 0-ãî áàðà
i=Bars-SSP;
if(counted_bars>SSP) i=Bars-counted_bars-1;
while(i>=0)
{
high=High[i]; low=Low[i]; k=i-1+SSP;
while(k>=i)
{
price=High[k];
if(high<price) high=price;
price=Low[k];
if(low>price) low=price;
k--;
} // âñå ïîñ÷èòàëè - çàïèñûâàåì çíà÷åíèÿ òî÷êè â ìàññèâ èíäèêàòîðà
SCH_BufferL[i+Shift]=low+(high-low)*SilvCh/100;
SCH_BufferH[i+Shift]=high-(high-low)*SilvCh/100;
Sky_BufferL[i+Shift]=low+(high-low)*SkyCh/100;
Sky_BufferH[i+Shift]=high-(high-low)*SkyCh/100;
Zen_BufferL[i+Shift]=low;
Zen_BufferH[i+Shift]=high;
Fut_BufferL[i]=low-(high-low)*FutCh/100;
Fut_BufferH[i]=high+(high-low)*FutCh/100;
i--; // äâèãàåì ñ÷åò÷èê
} i=Shift-1; // Ñ÷èòàåì òî÷êè ñäâèãà - ñïðàâà îò íóëåâîãî i=Shift-1;
while(i>=0)
{
high=High[0]; low=Low[0]; k=SSP-Shift-1+i; // êàæäûé ñëåäóþùèé óìåíüøàåò ïåðèîä k=SSP-Shift+i;
while(k>=0)
{
price=High[k];
if(high<price) high=price;
price=Low[k];
if(low>price) low=price;
k--;
} // çàïèñûâàåì çíà÷åíèÿ â ìàññèâ
SCH_BufferL[i]=low+(high-low)*SilvCh/100;
SCH_BufferH[i]=high-(high-low)*SilvCh/100;
Sky_BufferL[i]=low+(high-low)*SkyCh/100;
Sky_BufferH[i]=high-(high-low)*SkyCh/100;
Zen_BufferL[i]=low;
Zen_BufferH[i]=high;
i--;
}
}
//+------------------------------------------------------------------+
Comments