Hi All
May i kindly request for kind assistance if anyone can share their latest updated version of Murrey Math AFL Formula. I have attached a previous AFL Formulas.one was coded in 2006.
===========================START ================================
The 2006 Version
//------------------------------------------------------------------------------ // // Formula Name: MURREY MATH LINES Formula // Author/Uploader: Jacek // E-mail: // Date/Time Added: 2006-02-18 14:21:45 // Origin: // Keywords: MURREY MATH // Level: medium // Flags: indicator // Formula URL: http://www.amibroker.com/library/formula.php?id=588// Details URL: http://www.amibroker.com/library/detail.php?id=588// //------------------------------------------------------------------------------ // // Murrey Math Horizontal Lines. // // Use Parameter function to adjust Time Frame. // // // //------------------------------------------------------------------------------
/* MURREY MATH HORIZONTAL LINES Formula for Amibroker based on Excel spreadsheet by Jacek */
GraphXSpace=1; MaxGraph=12; Period=Param("MM_Period", 32, 4, 256, 1) ;
Graph1Color=6; Graph2Color=7; Graph3Color=4; Graph4Color=5; Graph5Color=6; Graph6Color=5; Graph7Color=4; Graph8Color=7; Graph9Color=6; Graph10Color=4; Graph11Color=4;
Graph0=Close; Graph0Color=1; Graph0Style=64;
Graph1Style=1; Graph2Style=1; Graph3Style=1; Graph4Style=1; Graph5Style=1; Graph6Style=1; Graph7Style=1; Graph8Style=1; Graph9Style=1; Graph10Style=1; Graph11Style=4;
PER = Period; BarNR = LastValue(Cum(1)) ; TimeFrame = BarNR - PER ; TF = TimeFrame ;
Lo = LastValue(ValueWhen(Cross(Cum(1), TF), LLV(Min(H,L),PER),1)) ; Hi = LastValue(ValueWhen(Cross(Cum(1), TF), HHV(Max(H,L),PER),1)) ;
Lo = LastValue( LLV(Min(H,L),PER ),1) ; Hi = LastValue( HHV(Max(H,L),PER ),1) ;
Fractal = IIf(Hi<=250,100, IIf(Hi<=2500,1000, IIf(Hi<=25000,10000, IIf(Hi<=250000,100000, 0 )))) ; int_Log = int( log(Fractal/(Hi-Lo))/log(2) ) ; Oct = Fractal * ( exp(ln(1/2)* int_Log ) ) ;
Min_1 = int( Lo / Oct ) * Oct ;
Max_1 = IIf( (Min_1 + Oct) > Hi, Min_1 + Oct, Min_1 + 2*Oct ) ;
Min_2 = IIf( (Min_1 + 1/8*(Max_1-Min_1)) <= Lo AND Hi <= (Max_1 - 1/8*(Max_1-Min_1)) , (Min_1 + 1/4*(Max_1-Min_1)) , Min_1 ) ;
Max_2 = IIf( (Min_1 + 1/8*(Max_1-Min_1)) <= Lo AND Hi <= (Max_1 - 1/8*(Max_1-Min_1)) , (Max_1 - 1/4*(Max_1-Min_1)) , Max_1 ) ;
/******************************/
Diff = Max_2 - Min_2 ;
H1 = IIf( (Min_2 + 3/16*Diff) <= Lo AND Hi <= (9/16*Diff + Min_2) , Min_2 + 1/2*Diff, 0) ;
H2 = IIf( (Min_2 - 1/8*Diff) <= Lo AND Hi <= (5/8*Diff + Min_2) AND H1==0, Min_2 + 1/2*Diff, 0) ;
H3 = IIf( (Min_2 + 7/16*Diff) <= Lo AND Hi <= (Min_2 + 13/16*Diff), Min_2 + 3/4*Diff, 0 ) ;
H4 = IIf( (Min_2 + 3/8*Diff) <= Lo AND Hi <= (Min_2 + 9/8*Diff) AND H3==0, Max_2, 0 ) ;
H5 = IIf( (Min_2 + 1/8*Diff)<=Lo AND Hi <= (Min_2 + 7/8*Diff) AND H1==0 AND H2==0 AND H3==0 AND H4==0, Min_2 + 3/4*Diff , 0 ) ;
H6 = IIf( ( H1 + H2 + H3 + H4 + H5 ) == 0, Max_2, 0 ) ;
/**************************/
L1 = IIf(H1>0, Min_2 + 1/4*Diff, 0) ;
L2 = IIf(H2>0, Min_2, 0) ;
L3 = IIf(H3>0, Min_2 + 1/2*Diff, 0) ;
L4 = IIf(H4>0, Min_2 + 1/2*Diff, 0) ;
L5 = IIf(H5>0, Min_2 + 1/4*Diff, 0) ;
L6 = IIf(H6>0, Min_2, 0 ) ;
M_8 = ( H1 + H2 + H3 + H4 + H5 + H6 ) ;
M_0 = ( L1 + L2 + L3 + L4 + L5 + L6 ) ;
/**************************************/
Graph1 = ValueWhen(Cum(1) >= TF, M_0 );
Graph2 = ValueWhen(Cum(1) >= TF, M_0 + (1*(0.125*(M_8-M_0))));
Graph3 = ValueWhen(Cum(1) >= TF, M_0 + (2*(0.125*(M_8-M_0))));
Graph4 = ValueWhen(Cum(1) >= TF, M_0 + (3*(0.125*(M_8-M_0))));
Graph5 = ValueWhen(Cum(1) >= TF, M_0 + (4*(0.125*(M_8-M_0))));
Graph6 = ValueWhen(Cum(1) >= TF, M_0 + (5*(0.125*(M_8-M_0))));
Graph7 = ValueWhen(Cum(1) >= TF, M_0 + (6*(0.125*(M_8-M_0))));
Graph8 = ValueWhen(Cum(1) >= TF, M_0 + (7*(0.125*(M_8-M_0))));
Graph9 = ValueWhen(Cum(1) >= TF, M_8 ) ;
Graph10 = ValueWhen(Cum(1) >= TF, M_8 + (2*(0.125*(M_8-M_0))));
Graph11 = ValueWhen(Cum(1) >= TF, M_0 - (2*(0.125*(M_8-M_0))));
/**************************************************************/
Title = Name() + "=" + WriteIf( round(C)== C, NumToStr(C,1) , WriteVal(C) ) + " " + " \\c17" + WriteIf( Interval()==86400, "Daily ", WriteIf(Interval()==3600,"Hourly ", WriteIf(Interval()==900,"15 Min ", WriteIf(Interval()==300,"5 Min ", WriteIf(Interval()==60,"1 Min ", "" ) ) ) ) ) + Date() + " \\c12" + WriteIf(Volume>0," Turnover=","") + WriteIf(Volume>0, WriteVal(Volume*Close/1000), "" ) ;
======================== END =====================================
I was hoping anyone have their updated versions similar to the MurreyMath EOD Software.
I have attached a Metatrader MT4 formula ,seeking any good programmer to convert to afl.
MT4 Murrey Math
=========================START ==================================
//+------------------------------------------------------------------+ //| Murrey_Math_MT_VG.mq4 | //| Copyright © 2004, MetaQuotes Software Corp. | //| http://www.metaquotes.net | //+------------------------------------------------------------------+ #property copyright "Vladislav
Goshkov (VG)." #property link " 4vg@xxxxxxx"
#property indicator_separate_window
extern int TEXT_Size =10; extern string FONT_Type = "Tahoma"; extern int TEXT_Shift = 50;
extern color Plus_28 = SteelBlue; extern color Plus_18 = MediumVioletRed; extern color _88 = Teal; extern color _78 = Goldenrod; extern color _68 = Crimson; extern color _58 = Green; extern color _48 = Blue; extern color _38 = Green; extern color _28 = Crimson; extern color _18 = Goldenrod; extern color _08 = Teal; extern color Minus_18 = MediumVioletRed; extern color Minus_28 = SteelBlue;
// ============================================================================================ // 8/8 c 0/8 // ============================================================================================ // 7/8 Weak, Stall and Reverse
// ============================================================================================ // 1/8 Weak, Stall and Reverse
// ============================================================================================ // 6/8 c 2/8 Pivot, Reverse
// ============================================================================================ // 5/8 Top of Trading Range 40% of trading range between 5/8 & 3/8 // ============================================================================================ // 3/8 Bottom of Trading Range
// ============================================================================================ // 4/8 Major Support/Resistance
// ============================================================================================ extern int P = 64; extern int StepBack = 0; extern bool Comments=false;
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() { IndicatorShortName(","); //---- indicators ln_txt[0] = " [-2/8] Extreme Overshoot [-2/8]";// [-2/8] ln_txt[1] = " [-1/8] 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 & Reverse Weak [1/8]";// [1/8] ln_txt[4] = " [2/8] Reversal - Major Pivot [2/8]";// [2/8] ln_txt[5] = " [3/8] Bottom of Trading Range - BUY Premium Zone [3/8]";//[3/8] ln_txt[6] = " [4/8]
Major Support/Resistance - New BUY or SELL level [4/8]";// [4/8] ln_txt[7] = " [5/8] Top of Trading Range - SELL Premium Zone [5/8]";//[5/8] ln_txt[8] = " [6/8] Reversal Major Pivot - [6/8]";// [6/8] ln_txt[9] = " [7/8] Weak Stall & Reverse Weak [7/8]";// [7/8] ln_txt[10] = " [8/8] Ultimate Resistance - extremely overbought [8/8]";// [8/8] ln_txt[11] = " [+1/8] Overshoot [+1/8]";// [+1/8] ln_txt[12] = " [+2/8] Extreme Overshoot [+2/8]";// [+2/8]
//extern int mml_shft = 50;//original was 3 mml_thk = 3;
// Ír÷rëüír? ónnríîâer öâlnîâ ódîâílé îenrâ mml_clr[0] = SteelBlue;//SteelBlue; // [-2]/8 mml_clr[1] = MediumVioletRed;//DarkViolet; // [-1]/8 mml_clr[2] = Teal;//Aqua; // [0]/8 mml_clr[3] = Goldenrod;//Gold; // [1]/8 mml_clr[4] = Crimson;//Red; // [2]/8 mml_clr[5] = Green;//Green; // [3]/8 mml_clr[6] = _48;//Blue; // [4]/8 mml_clr[7] = Green;//Green; // [5]/8 mml_clr[8] = Crimson;//Red; // [6]/8
mml_clr[9] = Goldenrod;//Gold; // [7]/8 mml_clr[10] = Teal;//Aqua; // [8]/8 mml_clr[11] = MediumVioletRed;//DarkViolet; // [+1]/8 mml_clr[12] = SteelBlue;//SteelBlue; // [+2]/8 //----
return(0); }
//+------------------------------------------------------------------+ //| Custor indicator deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- TODO: add your code here Comment(" ");ObjectDelete("MMPrice"); 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() {
double MMPrice = NormalizeDouble(MarketInfo(Symbol(),9),Digits); ObjectDelete("MMPrice"); ObjectCreate("MMPrice", OBJ_LABEL,WindowFind(","), 0, 0); ObjectSetText("MMPrice",""+Symbol()+" = "+DoubleToStr(MMPrice ,Digits), 18, "Arial",Silver); ObjectSet("MMPrice", OBJPROP_CORNER,0); ObjectSet("MMPrice", OBJPROP_XDISTANCE, 800); ObjectSet("MMPrice", OBJPROP_YDISTANCE, 7);
if( (nTime != Time[0]) || (CurPeriod != Period()) ) { //price bn_v1 = Lowest(NULL,0,MODE_CLOSE,P+StepBack,0); bn_v2 = Highest(NULL,0,MODE_CLOSE,P+StepBack,0);
v1 = Low[bn_v1]; v2 = High[bn_v2]; // Start Data window code double Value = v2; //High double Value1 = v1; //Low //---- TODO: add your code here
ObjectCreate("MMdata", OBJ_LABEL, WindowFind(","), 0, 0);//High value ObjectSetText("MMdata",DoubleToStr(Value,Digits),18, "Arial", Red); ObjectSet("MMdata", OBJPROP_CORNER, 0); ObjectSet("MMdata", OBJPROP_XDISTANCE, 360); ObjectSet("MMdata", OBJPROP_YDISTANCE, 7); ObjectCreate("MMdata1", OBJ_LABEL, WindowFind(","), 0, 0);//Low value ObjectSetText("MMdata1",DoubleToStr(Value1,Digits),18, "Arial", Red); ObjectSet("MMdata1", OBJPROP_CORNER, 0); ObjectSet("MMdata1", OBJPROP_XDISTANCE, 635); ObjectSet("MMdata1", OBJPROP_YDISTANCE, 7);
ObjectCreate("MMdata2", OBJ_LABEL, WindowFind(","), 0, 0); ObjectSetText("MMdata2","HighClose = ", 12, "tahoma", DodgerBlue); ObjectSet("MMdata2", OBJPROP_CORNER, 0); ObjectSet("MMdata2", OBJPROP_XDISTANCE, 260); ObjectSet("MMdata2", OBJPROP_YDISTANCE, 10); ObjectCreate("MMdata3", OBJ_LABEL, WindowFind(","), 0, 0); ObjectSetText("MMdata3","LowClose = ", 12, "tahoma", DodgerBlue); ObjectSet("MMdata3", OBJPROP_CORNER, 0); ObjectSet("MMdata3", OBJPROP_XDISTANCE, 535); ObjectSet("MMdata3", OBJPROP_YDISTANCE, 10);
ObjectCreate("MMdata4", OBJ_LABEL, WindowFind(","), 0, 0); ObjectSetText("MMdata4","MurreyMath DATA : ", 12, "tahoma", White); ObjectSet("MMdata4", OBJPROP_CORNER, 0); ObjectSet("MMdata4", OBJPROP_XDISTANCE, 8); ObjectSet("MMdata4", OBJPROP_YDISTANCE, 10); ObjectCreate("MMdata5", OBJ_LABEL, WindowFind(","), 0, 0); ObjectSetText("MMdata5","| | |", 20, "Arial Black",
DimGray); ObjectSet("MMdata5", OBJPROP_CORNER, 0); ObjectSet("MMdata5", OBJPROP_XDISTANCE, 200); ObjectSet("MMdata5", OBJPROP_YDISTANCE, 0); // End Data window code if(Comments==true){ Comment("\n","MURREYMATH ","\n","HighClose = ",v2,"\n","LowClose = ",v1,"\n");}
//v1=(Close[Lowest(NULL,0,MODE_CLOSE,P+StepBack,0)]); //v2=(Close[Highest(NULL,0,MODE_CLOSE,P+StepBack,0)]);// Possibly a better hi/low code than above code changes on CLOSE // Still does not update //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[TEXT_Shift], TEXT_Shift); ObjectSetText(buff_str, ln_txt[i], TEXT_Size,FONT_Type, mml_clr[i]); ObjectMove(buff_str, 0, Time[TEXT_Shift], mml[i]); } else
{ ObjectMove(buff_str, 0, Time[TEXT_Shift], mml[i]); } } // for( i=1; i<=OctLinesCnt; i++ ){
nTime = Time[0]; CurPeriod= Period();
} //---- End Of Program return(0); } //+------------------------------------------------------------------+ ============================ END ==============================
Thanks a million! Sincere Appreciated.
Sincere Thanks
Warmest Rgds
Colin
|