//+------------------------------------------------------------------+ //| Ind-Murrey_Math_MT4_VG-1.mq4 | //| Copyright © 2005, Kara Software Corp. | //| | //+------------------------------------------------------------------+ #property copyright "Vladislav Goshkov (VG)." #property link "4vg@mail.ru" #property indicator_chart_window #property indicator_buffers 8 #property indicator_color1 DarkBlue #property indicator_color2 Aqua #property indicator_color3 DarkGreen #property indicator_color4 Blue #property indicator_color5 DarkGreen #property indicator_color6 Red #property indicator_color7 Aqua #property indicator_color8 DarkBlue //---- input parameters extern int P = 64; extern int StepBack = 0; extern int Bar = 1000; //---- buffers double ExtMapBuffer1[]; double ExtMapBuffer2[]; double ExtMapBuffer3[]; double ExtMapBuffer4[]; double ExtMapBuffer5[]; double ExtMapBuffer6[]; double ExtMapBuffer7[]; double ExtMapBuffer8[]; //+------------------------------------------------------------------+ 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; //------------------------------------------------------------------ int init() { //---- indicators SetIndexStyle(0,DRAW_LINE); SetIndexBuffer(0,ExtMapBuffer1); SetIndexStyle(1,DRAW_LINE); SetIndexBuffer(1,ExtMapBuffer2); SetIndexStyle(2,DRAW_LINE); SetIndexBuffer(2,ExtMapBuffer3); SetIndexStyle(3,DRAW_LINE); SetIndexBuffer(3,ExtMapBuffer4); SetIndexStyle(4,DRAW_LINE); SetIndexBuffer(4,ExtMapBuffer5); SetIndexStyle(5,DRAW_LINE); SetIndexBuffer(5,ExtMapBuffer6); SetIndexStyle(6,DRAW_LINE); SetIndexBuffer(6,ExtMapBuffer7); SetIndexStyle(7,DRAW_LINE); SetIndexBuffer(7,ExtMapBuffer8); //---- 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] = DarkBlue; // [-2]/8 mml_clr[1] = DarkViolet; // [-1]/8 mml_clr[2] = Aqua; // [0]/8 mml_clr[3] = Yellow; // [1]/8 mml_clr[4] = Red; // [2]/8 mml_clr[5] = DarkGreen; // [3]/8 mml_clr[6] = Blue; // [4]/8 mml_clr[7] = DarkGreen; // [5]/8 mml_clr[8] = Red; // [6]/8 mml_clr[9] = Yellow; // [7]/8 mml_clr[10] = Aqua; // [8]/8 mml_clr[11] = DarkViolet; // [+1]/8 mml_clr[12] = DarkBlue; // [+2]/8 //---- return(0); } 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); } //====================================================================== int MyFunc(int shift) { if( (nTime != Time[shift]) || (CurPeriod != Period()) ) { //price bn_v1 = Lowest(NULL,0,MODE_LOW,P+StepBack,shift); bn_v2 = Highest(NULL,0,MODE_HIGH,P+StepBack,shift); 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(i==0)ExtMapBuffer1[shift]=mml[i]; if(i==2)ExtMapBuffer2[shift]=mml[i]; if(i==5)ExtMapBuffer3[shift]=mml[i]; if(i==6)ExtMapBuffer4[shift]=mml[i]; if(i==7)ExtMapBuffer5[shift]=mml[i]; if(i==8)ExtMapBuffer6[shift]=mml[i]; if(i==10)ExtMapBuffer7[shift]=mml[i]; if(i==12)ExtMapBuffer8[shift]=mml[i]; // if(ObjectFind(buff_str) == -1) { // ObjectCreate(buff_str, OBJ_HLINE, 0, Time[shift], mml[i]); // ObjectSet(buff_str, OBJPROP_STYLE, STYLE_SOLID); // ObjectSet(buff_str, OBJPROP_COLOR, mml_clr[i]); // ObjectMove(buff_str, 0, Time[shift], mml[i]); // } // else { // ObjectMove(buff_str, 0, Time[shift], 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[shift]; CurPeriod= Period(); } } //------------------------------------------------------------------------ int start() { //---- TODO: add your code here for(int i=Bar;i>=0;i--) { MyFunc(i); } //---- End Of Program return(0); } //+------------------------------------------------------------------+
Sample
Analysis
Market Information Used:
Series array that contains open time of each bar
Series array that contains the lowest prices of each bar
Series array that contains the highest prices of each bar
Indicator Curves created:
Implements a curve of type DRAW_LINE
Indicators Used:
Custom Indicators Used:
Order Management characteristics:
Other Features: