//+------------------------------------------------------------------+ //| ADX FiboMA 2.mq4 | //| Copyright © 2005, MetaQuotes Software Corp. | //| http://www.metaquotes.net | //+------------------------------------------------------------------+ #property copyright "Copyright © 2005" #property link "" //#property indicator_separate_window #property indicator_chart_window #property indicator_buffers 7 #property indicator_color1 Magenta #property indicator_color2 Green #property indicator_color3 Yellow #property indicator_color4 Gray #property indicator_color5 Red #property indicator_color6 Gray #property indicator_color7 Gray #property indicator_color8 Gray //---- input parameters extern int MAPeriod; extern int Lots; extern int TakeProfit;extern int StopLoss; extern int TrailingStop; extern int FiboMA;//0=>9.0170,1=>14.5898,2=>23.6068,3=>38.1966,4=>50.0000,5=>61.8034,Null extern int GoldenRatioPwr;//default=8 extern int ADXPr;//default = 50 (1-100) extern int ADXtype;//0=ADX, 1=ADXR //---- buffers double FIMA[]; double FIMA_Osc[]; double StdFIMA[]; double AdjFIMA[]; double B1[]; double B2[]; double B3[]; double B4[]; double ADX[]; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { //---- indicators IndicatorBuffers(8); SetIndexStyle(0,DRAW_LINE, STYLE_DOT); SetIndexBuffer(0,FIMA); SetIndexLabel(0,"FIMA"); SetIndexStyle(1,DRAW_LINE); SetIndexBuffer(1,FIMA_Osc); SetIndexLabel(1,"FIMA_Osc"); SetIndexStyle(2,DRAW_LINE); SetIndexBuffer(2,StdFIMA); SetIndexLabel(2,"StdFIMA"); SetIndexStyle(3,DRAW_LINE); SetIndexBuffer(3,B1); SetIndexLabel(3,"B1"); SetIndexStyle(4,DRAW_LINE); SetIndexBuffer(4,B2); SetIndexLabel(4,"B2"); SetIndexStyle(5,DRAW_LINE); SetIndexBuffer(5,B3); SetIndexLabel(5,"B3"); SetIndexStyle(6,DRAW_LINE); SetIndexBuffer(6,B4); SetIndexLabel(6,"B4"); SetIndexStyle(7,DRAW_LINE); SetIndexBuffer(7,ADX); //---- return(0); } //+------------------------------------------------------------------+ //| Custor indicator deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int start() { int i,p; int counted_bars = IndicatorCounted(); //---- /* double TR; double TH; double TL; double PlusDM, PlusDI, MinusDM, MinusDI, DIDif, DISum; */ double FMA; double ADXFinal; double ADXRCustom; double EmaIndex, Diff, MyConst; double Hhv, Llv; double GoldenRatio, GoldVal,FBase,F0,F1,F2,F3,F4,F5,F6,F7,F8,F9,F10,F11,F12,F13; //test default vals FiboMA = 2; GoldenRatio = 1;//=8; ADXPr = 23;//50; ADXtype = 0; // if ( ADXPr<1 || ADXPr >100) {ADXPr =50;} //default = 50 (1-100) //calc FMA to use switch (FiboMA) { case 0: FMA = 9.0170; break; case 1: FMA = 14.5898; break; case 2: FMA = 23.6068; break; case 3: FMA = 38.1966; break; case 4: FMA = 50.0000; break; case 5: FMA = 61.8034; break; default: FMA = 23.6068; break; } //Calculate & Plot Tushar Chande style Fibonacci Based Moving Average Using Wilders ADX} i=Bars; //if (counted_bars>=i) {i=Bars-counted_bars-1;} while (i>=0) { ADXFinal = iADX(NULL,0,ADXPr,PRICE_CLOSE,MODE_MAIN,i); ADXRCustom = ( ADXFinal + iADX(NULL,0,ADXPr,PRICE_CLOSE,MODE_MAIN,(i+ADXPr-1)) )/2; if ( ADXtype == 0 ) { ADX[i] = ADXFinal; } else { ADX[i] = ADXRCustom;} if ( FMA>0) { EmaIndex = (2/(1+FMA)); } else {EmaIndex = 0.20;} //get Hhv(_ADX, ADXPr) and Llv(_ADX, ADXPr) - substituted for VT Hhv and Llv functions Hhv = ADX[i]; Llv = ADX[i]; for(p=i; p < (i+ADXPr) ; p++) { if (ADX[p]>Hhv) {Hhv = ADX[p];} if (ADX[p]<Llv) {Llv = ADX[p];} } Diff = Hhv - Llv; // Diff = Hhv(_ADX, ADXPr) - Llv(_ADX, ADXPr); if (Diff > 0) {MyConst = (ADX[i] - Llv)/Diff;} else {MyConst = EmaIndex;} if ( MyConst > EmaIndex) {MyConst = EmaIndex;} //if (IndicatorCounted() < ADXPr+(ADXPr*1.5)) if (Bars < ADXPr+(ADXPr*1.5)) { FIMA[i] = Close[i]; } else { //sub for VT expression, subst simple average for 2 period MA //FIMA[i] = MOV( (((1 - MyConst) * Ref(FIMA,-1)) + (MyConst * Close)),2,s)); FIMA[i] = ( (1-MyConst)*FIMA[i+1]+MyConst*Close[i] + (1-MyConst)*FIMA[i+2]+MyConst*Close[i+1] )/2; } FIMA_Osc[i] = iMAOnArray(FIMA, 0, FMA*0.236068 , 0,MODE_LWMA,i); StdFIMA[i] = iMA(NULL,0,FMA,0,MODE_EMA,PRICE_CLOSE,i); //{Control the distance from Price to F Lines} if (GoldenRatioPwr <=0) {GoldenRatioPwr=8;}//default=8 GoldenRatio = MathPow(1.618034 ,GoldenRatioPwr ); GoldVal = 1.618034; FBase = 0.1919/2; F0 = FBase * GoldenRatio; F1 = F0*GoldVal;F2 = F1*GoldVal;F3 = F2*GoldVal;F4 = F3*GoldVal; F5 = F4*GoldVal;F6 = F5*GoldVal;F7 = F6*GoldVal;F8 = F7*GoldVal; F9 = F8*GoldVal;F10 = F9*GoldVal;F11 = F10*GoldVal;F12 = F11*GoldVal; F13 = F12*GoldVal; if (Close[i]>=FIMA[i]) { B1[i] = FIMA[i]+(FIMA[i]*(FMA*(F1/100000))); B2[i] = FIMA[i]+(FIMA[i]*(FMA*(F2/100000))); B3[i] = FIMA[i]+(FIMA[i]*(FMA*(F3/100000))); B4[i] = FIMA[i]+(FIMA[i]*(FMA*(F4/100000))); } else { B1[i] = FIMA[i]-(FIMA[i]*(FMA*(F1/100000))); B2[i] = FIMA[i]-(FIMA[i]*(FMA*(F2/100000))); B3[i] = FIMA[i]-(FIMA[i]*(FMA*(F3/100000))); B4[i] = FIMA[i]-(FIMA[i]*(FMA*(F4/100000))); } i--; } //---- return(0); } //+------------------------------------------------------------------+
Sample
Analysis
Market Information Used:
Series array that contains close prices for each bar
Indicator Curves created:
Implements a curve of type DRAW_LINE
Indicators Used:
Movement directional index
Moving average indicator
Custom Indicators Used:
Order Management characteristics:
Other Features: