Murrey_Math_MT4_Even
Download scriptThis script is a specialized technical analysis tool designed to identify and visualize key price levels on a trading chart. It uses a mathematical framework based on "octaves" to divide the market's current trading range into significant zones of support and resistance.
Core Logic Overview
The tool works by analyzing a specific period of past price action (determined by the user settings) to find the highest and lowest points reached. Once it identifies this "range," it calculates a series of 13 horizontal lines. These lines are not random; they represent different types of market behaviors, ranging from extreme overbought/oversold conditions to primary support and resistance levels.
Key Components of the Logic
The script categorizes the market into several distinct "zones" based on where price sits relative to the calculated octaves:
- Extreme Zones (Overshoot & Resistance): The outermost lines (like -2/8 or 8/8) identify areas where the price has moved aggressively beyond normal limits. These are considered "extreme" zones where the market may be exhausted.
- Weak / Stall Zones: Certain lines are designed to act as "speed bumps." If the price moves too quickly and hits these levels, it suggests a potential stall or reversal. If the price ignores them, it indicates strong momentum continuing toward the next major level.
- Pivot & Reversal Points: These are mid-range levels that have the capacity to flip the market's direction. They serve as significant transition points in the price flow.
- Trading Range Boundaries (Premium & Discount):
- The Top of the Trading Range identifies a "Premium Zone." If the price lingers here for a specific duration, it signals a potential selling opportunity.
- The Bottom of the Trading Range identifies a "Buy Premium Zone." If the price stays above this level consistently, it indicates a stable base for potential upward movement.
- Major Support & Resistance: The central line (4/8) is considered the most pivotal point. It serves as the primary benchmark for the current market structure—acting as strong support if the price is trading above it, and heavy resistance if the price is trading below it.
Visual Representation
The script automatically draws these lines on the chart and labels them clearly. This allows a trader to see at a glance whether the current price is in a "cheap" zone (discount), an "expensive" zone (premium), or hovering near a major structural pivot point. By visualizing these levels, the tool helps users identify where the market is likely to react, slow down, or reverse based on the mathematical boundaries of recent price history.
//+------------------------------------------------------------------+
//| Murrey_Math_MT_VG_even.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 = 128;
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]P";// "Ultimate Support - extremely oversold [0/8]";// [0/8]
ln_txt[3] = "[1/8]P";// "Weak, Stall and Reverse - [1/8]";// [1/8]
ln_txt[4] = "[2/8]P";// "Pivot, Reverse - major [2/8]";// [2/8]
ln_txt[5] = "[3/8]P";// "Bottom of Trading Range - [3/8], if 10-12 bars then 40% Time. BUY Premium Zone";//[3/8]
ln_txt[6] = "[4/8]P";// "Major Support/Resistance Pivotal Point [4/8]- Best New BUY or SELL level";// [4/8]
ln_txt[7] = "[5/8]P";// "Top of Trading Range - [5/8], if 10-12 bars then 40% Time. SELL Premium Zone";//[5/8]
ln_txt[8] = "[6/8]P";// "Pivot, Reverse - major [6/8]";// [6/8]
ln_txt[9] = "[7/8]P";// "Weak, Stall and Reverse - [7/8]";// [7/8]
ln_txt[10] = "[8/8]P";// "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 = 3;
mml_thk = 3;
// Íà÷àëüíàÿ óñòàíîâêà öâåòîâ óðîâíåé îêòàâ
mml_clr[0] = RoyalBlue; // [-2]/8
mml_clr[1] = DarkViolet; // [-1]/8
mml_clr[2] = SlateBlue; // [0]/8
mml_clr[3] = Yellow; // [1]/8
mml_clr[4] = MediumPurple; // [2]/8
mml_clr[5] = DarkGreen; // [3]/8
mml_clr[6] = Blue; // [4]/8
mml_clr[7] = DarkGreen; // [5]/8
mml_clr[8] = MediumPurple; // [6]/8
mml_clr[9] = Yellow; // [7]/8
mml_clr[10] = SlateBlue; // [8]/8
mml_clr[11] = DarkViolet; // [+1]/8
mml_clr[12] = RoyalBlue; // [+2]/8
//----
return(0);
}
//+------------------------------------------------------------------+
//| Custor indicator deinitialization function |
//+------------------------------------------------------------------+
int deinit() {
//---- TODO: add your code here
Comment(" ");
for(i=0;i<OctLinesCnt*2;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++ ){
int j=i*2;
buff_str = "mml"+j;
if(ObjectFind(buff_str) == -1) {
ObjectCreate(buff_str, OBJ_HLINE, 0, Time[0], mml[j]);
ObjectSet(buff_str, OBJPROP_STYLE, STYLE_SOLID);
ObjectSet(buff_str, OBJPROP_COLOR, mml_clr[j]);
ObjectMove(buff_str, 0, Time[0], mml[j]);
}
else {
ObjectMove(buff_str, 0, Time[0], mml[j]);
}
buff_str = "mml_txt"+j;
if(ObjectFind(buff_str) == -1) {
ObjectCreate(buff_str, OBJ_TEXT, 0, Time[mml_shft], mml_shft);
ObjectSetText(buff_str, ln_txt[j], 9, "Arial", mml_clr[j]);
ObjectMove(buff_str, 0, Time[mml_shft], mml[j]);
}
else {
ObjectMove(buff_str, 0, Time[mml_shft], mml[j]);
}
} // for( i=1; i<=OctLinesCnt; i++ ){
nTime = Time[0];
CurPeriod= Period();
}
//---- End Of Program
return(0);
}
//+------------------------------------------------------------------+
Comments