This script is designed to provide traders with a sophisticated visual map of price action by identifying key levels of support and resistance. It uses a mathematical approach known as "Murrey Math" to divide the market into specific zones, helping users understand where the price is likely to stall, reverse, or trend.
Core Logic Overview
The script works by analyzing the highest high and lowest low over a specific period of time (defined by the user). Once it establishes this "trading range," it breaks that range down into 8 equal parts. This creates a series of horizontal lines on your chart, each with a specific purpose:
Key Trading Zones
The levels are categorized by their behavior in a live market:
-
The Major Pivot Point (4/8): This is the most significant level in the calculation. It represents the "equilibrium" of the current range.
- When price is above this line, it acts as strong Support.
- When price is below this line, it acts as strong Resistance.
- This is identified as an ideal area for considering new buy or sell positions.
-
The Trading Range (3/8 and 5/8): These lines define the "Premium" and "Discount" areas of the current movement.
- Price tends to spend a significant amount of time moving between these two levels.
- If the price stays at the 5/8 (Top) for a long period, it signals a "Premium Zone," suggesting it might be a good area to consider selling.
- Conversely, if it stays at the 3/8 (Bottom), it is a "Discount Zone," potentially favoring a buy.
-
The Reversal & Stall Zones (1/8 and 7/8): These are considered "weak" lines. The logic suggests that if the price moves too quickly and far into these areas and then pauses, there is a high probability of a rapid reversal back toward the center.
-
The Extreme Limits (0/8 and 8/8): These represent the "Ultimate Support" and "Ultimate Resistance." They signify that the market is extremely oversold or overbought, respectively.
-
Overshoot Zones (+1/8, +2/8, -1/8, -2/8): These lines appear when the price breaks outside of the standard 0/8 to 8/8 range. They indicate that the market is "overextending" itself, which can often lead to a sharp correction back into the main range.
How it Functions for the User
The script automatically calculates these levels based on the current market volatility. Instead of providing a single "buy" or "sell" signal, it provides a structural map:
- Context: It tells you where the price currently sits relative to the total range (e.g., are we in a "cheap" zone or an "expensive" zone?).
- Reaction Points: It highlights where the market is most likely to push back (the 4/8 line) or where it might be exhausted (the 0/8 and 8/8 lines).
- Visual Guidance: By using different colors for different levels, it allows traders to quickly identify these "invisible" boundaries on their charts in real-time.
/*-----------------------------+
| |
| Shared by www.Aptrafx.com |
| |
+------------------------------*/
//+------------------------------------------------------------------+
//| Murrey_Math_MT_VG.mq4 |
//| Copyright © 2004, MetaQuotes Software Corp. |
//| http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Vladislav Goshkov (VG)."
#property link "4vg@mail.ru"
#property indicator_chart_window
// ============================================================================================
// * Ëèíèè 8/8 è 0/8 (Îêîí÷àòåëüíîå ñîïðîòèâëåíèå).
// * Ýòè ëèíèè ñàìûå ñèëüíûå è îêàçûâàþò ñèëüíåéøèå ñîïðîòèâëåíèÿ è ïîääåðæêó.
// ============================================================================================
//* Ëèíèÿ 7/8 (Ñëàáàÿ, ìåñòî äëÿ îñòàíîâêè è ðàçâîðîòà). Weak, Stall and Reverse
//* Ýòà ëèíèÿ ñëàáà. Åñëè öåíà çàøëà ñëèøêîì äàëåêî è ñëèøêîì áûñòðî è åñëè îíà îñòàíîâèëàñü îêîëî ýòîé ëèíèè,
//* çíà÷èò îíà ðàçâåðíåòñÿ áûñòðî âíèç. Åñëè öåíà íå îñòàíîâèëàñü îêîëî ýòîé ëèíèè, îíà ïðîäîëæèò äâèæåíèå ââåðõ ê 8/8.
// ============================================================================================
//* Ëèíèÿ 1/8 (Ñëàáàÿ, ìåñòî äëÿ îñòàíîâêè è ðàçâîðîòà). Weak, Stall and Reverse
//* Ýòà ëèíèÿ ñëàáà. Åñëè öåíà çàøëà ñëèøêîì äàëåêî è ñëèøêîì áûñòðî è åñëè îíà îñòàíîâèëàñü îêîëî ýòîé ëèíèè,
//* çíà÷èò îíà ðàçâåðíåòñÿ áûñòðî ââåðõ. Åñëè öåíà íå îñòàíîâèëàñü îêîëî ýòîé ëèíèè, îíà ïðîäîëæèò äâèæåíèå âíèç ê 0/8.
// ============================================================================================
//* Ëèíèè 6/8 è 2/8 (Âðàùåíèå, ðàçâîðîò). Pivot, Reverse
//* Ýòè äâå ëèíèè óñòóïàþò â ñâîåé ñèëå òîëüêî 4/8 â ñâîåé ñïîñîáíîñòè ïîëíîñòüþ ðàçâåðíóòü öåíîâîå äâèæåíèå.
// ============================================================================================
//* Ëèíèÿ 5/8 (Âåðõ òîðãîâîãî äèàïàçîíà). Top of Trading Range
//* Öåíû âñåõ ðûíêîâ òðàòÿò 40% âðåìåíè, íà äâèæåíèå ìåæäó 5/8 è 3/8 ëèíèÿìè.
//* Åñëè öåíà äâèãàåòñÿ îêîëî ëèíèè 5/8 è îñòàåòñÿ îêîëî íåå â òå÷åíèè 10-12 äíåé, ðûíîê ñêàçàë ÷òî ñëåäóåò
//* ïðîäàâàòü â ýòîé «ïðåìèàëüíîé çîíå», ÷òî è äåëàþò íåêîòîðûå ëþäè, íî åñëè öåíà ñîõðàíÿåò òåíäåíöèþ îñòàâàòüñÿ
//* âûøå 5/8, òî îíà è îñòàíåòñÿ âûøå íåå. Åñëè, îäíàêî, öåíà ïàäàåò íèæå 5/8, òî îíà ñêîðåå âñåãî ïðîäîëæèò
//* ïàäàòü äàëåå äî ñëåäóþùåãî óðîâíÿ ñîïðîòèâëåíèÿ.
// ============================================================================================
//* Ëèíèÿ 3/8 (Äíî òîðãîâîãî äèàïàçîíà). Bottom of Trading Range
//* Åñëè öåíû íèæå ýòîé ëèíè è äâèãàþòñÿ ââåðõ, òî öåíå áóäåò ñëîæíî ïðîáèòü ýòîò óðîâåíü.
//* Åñëè ïðîáèâàþò ââåðõ ýòó ëèíèþ è îñòàþòñÿ âûøå íåå â òå÷åíèè 10-12 äíåé, çíà÷èò öåíû îñòàíóòñÿ âûøå ýòîé ëèíèè
//* è ïîòðàòÿò 40% âðåìåíè äâèãàÿñü ìåæäó ýòîé ëèíèåé è 5/8 ëèíèåé.
// ============================================================================================
//* Ëèíèÿ 4/8 (Ãëàâíàÿ ëèíèÿ ñîïðîòèâëåíèÿ/ïîääåðæêè). Major Support/Resistance
//* Ýòà ëèíèÿ îáåñïå÷èâàåò íàèáîëüøåå ñîïðîòèâëåíèå/ïîääåðæêó. Ýòîò óðîâåíü ÿâëÿåòñÿ ëó÷øèì äëÿ íîâîé ïîêóïêè èëè ïðîäàæè.
//* Åñëè öåíà íàõîäèòñÿ âûøå 4/8, òî ýòî ñèëüíûé óðîâåíü ïîääåðæêè. Åñëè öåíà íàõîäèòñÿ íèæå 4/8, òî ýòî ïðåêðàñíûé óðîâåíü
//* ñîïðîòèâëåíèÿ.
// ============================================================================================
extern int P = 64;
extern int StepBack = 0;
double dmml = 0,
dvtl = 0,
sum = 0,
v1 = 0,
v2 = 0,
mn = 0,
mx = 0,
x1 = 0,
x2 = 0,
x3 = 0,
x4 = 0,
x5 = 0,
x6 = 0,
y1 = 0,
y2 = 0,
y3 = 0,
y4 = 0,
y5 = 0,
y6 = 0,
octave = 0,
fractal = 0,
range = 0,
finalH = 0,
finalL = 0,
mml[13];
string ln_txt[13],
buff_str = "";
int
bn_v1 = 0,
bn_v2 = 0,
OctLinesCnt = 13,
mml_thk = 8,
mml_clr[13],
mml_shft = 3,
nTime = 0,
CurPeriod = 0,
nDigits = 0,
i = 0;
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init() {
//---- indicators
ln_txt[0] = "[-2/8]P";// "extremely overshoot [-2/8]";// [-2/8]
ln_txt[1] = "[-1/8]P";// "overshoot [-1/8]";// [-1/8]
ln_txt[2] = "[0/8]";// "Ultimate Support - extremely oversold [0/8]";// [0/8]
ln_txt[3] = "[1/8]";// "Weak, Stall and Reverse - [1/8]";// [1/8]
ln_txt[4] = "[2/8]";// "Pivot, Reverse - major [2/8]";// [2/8]
ln_txt[5] = "[3/8]";// "Bottom of Trading Range - [3/8], if 10-12 bars then 40% Time. BUY Premium Zone";//[3/8]
ln_txt[6] = "[4/8]";// "Major Support/Resistance Pivotal Point [4/8]- Best New BUY or SELL level";// [4/8]
ln_txt[7] = "[5/8]";// "Top of Trading Range - [5/8], if 10-12 bars then 40% Time. SELL Premium Zone";//[5/8]
ln_txt[8] = "[6/8]";// "Pivot, Reverse - major [6/8]";// [6/8]
ln_txt[9] = "[7/8]";// "Weak, Stall and Reverse - [7/8]";// [7/8]
ln_txt[10] = "[8/8]";// "Ultimate Resistance - extremely overbought [8/8]";// [8/8]
ln_txt[11] = "[+1/8]P";// "overshoot [+1/8]";// [+1/8]
ln_txt[12] = "[+2/8]P";// "extremely overshoot [+2/8]";// [+2/8]
//ln_txt[0] = "[-2/8]P";// "extremely overshoot [-2/8]";// [-2/8]
//ln_txt[1] = "[-1/8]P";// "overshoot [-1/8]";// [-1/8]
//ln_txt[2] = "ÏÎÄÄÅÐÆÊÀ [0/8]";// "Ultimate Support - extremely oversold [0/8]";// [0/8]
//ln_txt[3] = "ÎÑÒÀÍÎÂÊÀ_ÐÀÇÂÎÐÎÒ [1/8]";// "Weak, Stall and Reverse - [1/8]";// [1/8]
//ln_txt[4] = "ÂÐÀÙÅÍÈÅ_ÐÀÇÂÎÐÎÒ [2/8]";// "Pivot, Reverse - major [2/8]";// [2/8]
//ln_txt[5] = "ÄÍÎ_ÊÀÍÀËÀ [3/8]";// "Bottom of Trading Range - [3/8], if 10-12 bars then 40% Time. BUY Premium Zone";//[3/8]
//ln_txt[6] = "ÑÎÏÐÎÒÈÂËÅÍÈÅ_ÏÎÄÄÅÐÆÊÀ [4/8]";// "Major Support/Resistance Pivotal Point [4/8]- Best New BUY or SELL level";// [4/8]
//ln_txt[7] = "ÂÅÐÕ_ÊÀÍÀËÀ [5/8]";// "Top of Trading Range - [5/8], if 10-12 bars then 40% Time. SELL Premium Zone";//[5/8]
//ln_txt[8] = "ÂÐÀÙÅÍÈÅ_ÐÀÇÂÎÐÎÒ [6/8]";// "Pivot, Reverse - major [6/8]";// [6/8]
//ln_txt[9] = "ÎÑÒÀÍÎÂÊÀ_ÐÀÇÂÎÐÎÒ [7/8]";// "Weak, Stall and Reverse - [7/8]";// [7/8]
//ln_txt[10] = "ÑÎÏÐÎÒÈÂËÅÍÈÅ [8/8]";// "Ultimate Resistance - extremely overbought [8/8]";// [8/8]
//ln_txt[11] = "[+1/8]P";// "overshoot [+1/8]";// [+1/8]
//ln_txt[12] = "[+2/8]P";// "extremely overshoot [+2/8]";// [+2/8]
mml_shft = 50;
mml_thk = 3;
// Íà÷àëüíàÿ óñòàíîâêà öâåòîâ óðîâíåé îêòàâ
mml_clr[0] = Magenta; // [-2]/8
mml_clr[1] = Pink; // [-1]/8
mml_clr[2] = Blue; // [0]/8
mml_clr[3] = Orange; // [1]/8
mml_clr[4] = Red; // [2]/8
mml_clr[5] = OliveDrab; // [3]/8
mml_clr[6] = Blue; // [4]/8
mml_clr[7] = OliveDrab; // [5]/8
mml_clr[8] = Red; // [6]/8
mml_clr[9] = Orange; // [7]/8
mml_clr[10] = Blue; // [8]/8
mml_clr[11] = Pink; // [+1]/8
mml_clr[12] = Magenta; // [+2]/8
//----
return(0);
}
//+------------------------------------------------------------------+
//| Custor indicator deinitialization function |
//+------------------------------------------------------------------+
int deinit() {
//---- TODO: add your code here
Comment(" ");
for(i=0;i<OctLinesCnt;i++) {
buff_str = "mml"+i;
ObjectDelete(buff_str);
buff_str = "mml_txt"+i;
ObjectDelete(buff_str);
}
//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int start() {
//---- TODO: add your code here
if( (nTime != Time[0]) || (CurPeriod != Period()) ) {
//price
bn_v1 = Lowest(NULL,0,MODE_LOW,P+StepBack,0);
bn_v2 = Highest(NULL,0,MODE_HIGH,P+StepBack,0);
v1 = Low[bn_v1];
v2 = High[bn_v2];
//determine fractal.....
if( v2<=250000 && v2>25000 )
fractal=100000;
else
if( v2<=25000 && v2>2500 )
fractal=10000;
else
if( v2<=2500 && v2>250 )
fractal=1000;
else
if( v2<=250 && v2>25 )
fractal=100;
else
if( v2<=25 && v2>12.5 )
fractal=12.5;
else
if( v2<=12.5 && v2>6.25)
fractal=12.5;
else
if( v2<=6.25 && v2>3.125 )
fractal=6.25;
else
if( v2<=3.125 && v2>1.5625 )
fractal=3.125;
else
if( v2<=1.5625 && v2>0.390625 )
fractal=1.5625;
else
if( v2<=0.390625 && v2>0)
fractal=0.1953125;
range=(v2-v1);
sum=MathFloor(MathLog(fractal/range)/MathLog(2));
octave=fractal*(MathPow(0.5,sum));
mn=MathFloor(v1/octave)*octave;
if( (mn+octave)>v2 )
mx=mn+octave;
else
mx=mn+(2*octave);
// calculating xx
//x2
if( (v1>=(3*(mx-mn)/16+mn)) && (v2<=(9*(mx-mn)/16+mn)) )
x2=mn+(mx-mn)/2;
else x2=0;
//x1
if( (v1>=(mn-(mx-mn)/8))&& (v2<=(5*(mx-mn)/8+mn)) && (x2==0) )
x1=mn+(mx-mn)/2;
else x1=0;
//x4
if( (v1>=(mn+7*(mx-mn)/16))&& (v2<=(13*(mx-mn)/16+mn)) )
x4=mn+3*(mx-mn)/4;
else x4=0;
//x5
if( (v1>=(mn+3*(mx-mn)/8))&& (v2<=(9*(mx-mn)/8+mn))&& (x4==0) )
x5=mx;
else x5=0;
//x3
if( (v1>=(mn+(mx-mn)/8))&& (v2<=(7*(mx-mn)/8+mn))&& (x1==0) && (x2==0) && (x4==0) && (x5==0) )
x3=mn+3*(mx-mn)/4;
else x3=0;
//x6
if( (x1+x2+x3+x4+x5) ==0 )
x6=mx;
else x6=0;
finalH = x1+x2+x3+x4+x5+x6;
// calculating yy
//y1
if( x1>0 )
y1=mn;
else y1=0;
//y2
if( x2>0 )
y2=mn+(mx-mn)/4;
else y2=0;
//y3
if( x3>0 )
y3=mn+(mx-mn)/4;
else y3=0;
//y4
if( x4>0 )
y4=mn+(mx-mn)/2;
else y4=0;
//y5
if( x5>0 )
y5=mn+(mx-mn)/2;
else y5=0;
//y6
if( (finalH>0) && ((y1+y2+y3+y4+y5)==0) )
y6=mn;
else y6=0;
finalL = y1+y2+y3+y4+y5+y6;
for( i=0; i<OctLinesCnt; i++) {
mml[i] = 0;
}
dmml = (finalH-finalL)/8;
mml[0] =(finalL-dmml*2); //-2/8
for( i=1; i<OctLinesCnt; i++) {
mml[i] = mml[i-1] + dmml;
}
for( i=0; i<OctLinesCnt; i++ ){
buff_str = "mml"+i;
if(ObjectFind(buff_str) == -1) {
ObjectCreate(buff_str, OBJ_HLINE, 0, Time[0], mml[i]);
ObjectSet(buff_str, OBJPROP_STYLE, STYLE_SOLID);
ObjectSet(buff_str, OBJPROP_COLOR, mml_clr[i]);
ObjectMove(buff_str, 0, Time[0], mml[i]);
}
else {
ObjectMove(buff_str, 0, Time[0], mml[i]);
}
buff_str = "mml_txt"+i;
if(ObjectFind(buff_str) == -1) {
ObjectCreate(buff_str, OBJ_TEXT, 0, Time[mml_shft], mml_shft);
ObjectSetText(buff_str, ln_txt[i], 8, "Arial", mml_clr[i]);
ObjectMove(buff_str, 0, Time[mml_shft], mml[i]);
}
else {
ObjectMove(buff_str, 0, Time[mml_shft], mml[i]);
}
} // for( i=1; i<=OctLinesCnt; i++ ){
nTime = Time[0];
CurPeriod= Period();
}
//---- End Of Program
return(0);
}
//+------------------------------------------------------------------+
Comments