//+------------------------------------------------------------------+ //| J_TPO.mq4 | //| Copyright © 2004, | //| | //+------------------------------------------------------------------+ #property copyright "Copyright © 2004, ." #property link "" //---- #property indicator_separate_window #property indicator_minimum -1 #property indicator_maximum 1 #property indicator_buffers 1 #property indicator_color1 DodgerBlue //---- input parameters extern int Len=10; //---- buffers double ExtMapBuffer1[]; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { //---- indicators SetIndexStyle(0,DRAW_LINE); SetIndexBuffer(0, ExtMapBuffer1); //---- return(0); } //+------------------------------------------------------------------+ //| J_TPO indicatop | //+------------------------------------------------------------------+ int start() { //int limit; //int counted_bars=IndicatorCounted(); //---- check for possible errors //if(counted_bars<0) return(-1); //---- last counted bar will be recounted //if(counted_bars>0) counted_bars--; //limit=Bars-counted_bars; //---- main loop double f8, f10=0, f18=0, f20=0, f30=0, f40=0, k, var14, var18, var1C, var20, var24, value; int f38=0, f48=0, var6=0, var12, varA, varE; double arr0[300]={0}, arr1[300]={0}, arr2[300]={0}, arr3[300]={0}; //f38=0; for(int i=Bars-Len-100; i>=0; i--) { var14=0; var1C=0; if(f38==0) { f38=1; f40=0; if (Len-1>= 2) f30=Len-1; else f30=2; f48=(int)f30+1; f10=Close[i]; arr0[f38]=Close[i]; k=f48; f18=12/(k * (k - 1) * (k + 1)); f20=(f48 + 1) * 0.5; } else { if (f38<=f48) f38=f38 + 1; else f38=f48 + 1; f8=f10; f10=Close[i]; if (f38 > f48) { for(var6=2; var6<=f48; var6++) arr0[var6-1]=arr0[var6]; arr0[f48]=Close[i]; } else arr0[f38]=Close[i]; if ((f30>=f38) && (f8!=f10)) f40=1; if ((f30==f38) && (f40==0)) f38=0; } if (f38>=f48) { for(varA=1; varA<=f48; varA++) { arr2[varA]=varA; arr3[varA]=varA; arr1[varA]=arr0[varA]; } for(varA=1; varA<=(f48-1); varA++) { var24=arr1[varA]; var12=varA; var6=varA + 1; for(var6=varA+1; var6<=f48; var6++) { if (arr1[var6] < var24) { var24=arr1[var6]; var12=var6; } } var20=arr1[varA]; arr1[varA]=arr1[var12]; arr1[var12]=var20; var20=arr2[varA]; arr2[varA]=arr2[var12]; arr2[var12]=var20; } varA=1; while(f48 > varA) { var6=varA + 1; var14=1; var1C=arr3[varA]; while(var14!=0) { if (arr1[varA]!=arr1[var6]) { if ((var6 - varA) > 1) { var1C=var1C/(var6 - varA); varE=varA; for(varE=varA; varE<=(var6-1); varE++) arr3[varE]=var1C; } var14=0; } else { var1C=var1C + arr3[var6]; var6=var6 + 1; } } varA=var6; } var1C=0; for(varA=1; varA<=f48; varA++) var1C=var1C + (arr3[varA] - f20) * (arr2[varA] - f20); //---- var18=f18 * var1C; } else var18=0; //---- value=var18; if (value==0) value=0.00001; //---- ExtMapBuffer1[i]=value; } //---- done return(0); } //+------------------------------------------------------------------+