Deprecated: Assigning the return value of new by reference is deprecated in /home/forex/public_html/wp-settings.php on line 520

Deprecated: Assigning the return value of new by reference is deprecated in /home/forex/public_html/wp-settings.php on line 535

Deprecated: Assigning the return value of new by reference is deprecated in /home/forex/public_html/wp-settings.php on line 542

Deprecated: Assigning the return value of new by reference is deprecated in /home/forex/public_html/wp-settings.php on line 578

Deprecated: Function set_magic_quotes_runtime() is deprecated in /home/forex/public_html/wp-settings.php on line 18
J :forex decode

J Archives

JuiceLevelsAlertNew.mq4

//+------------------------------------------------------------------+
//|                                                        Juice.mq4 |
//|                                                          Perky_z |
//|                              http://fxovereasy.atspace.com/index |
//+------------------------------------------------------------------+
#property  copyright "perky"
#property  link      "http://fxovereasy.atspace.com/index"
//---- indicator settings
#property  indicator_separate_window
#property  indicator_buffers 3
#property  indicator_color1  LimeGreen
#property  indicator_color2  FireBrick
#property indicator_color3 Yellow
#property indicator_width1 2
#property indicator_width2 2
#property indicator_width3 2

//---- indicator parameters
extern bool DoAlerts = false;
extern int Periyod=7;
extern int thresholdLevel=8;
extern int sosoLevel = 4;
extern bool JuiceLevelsVisible = true;
extern int JuiceStartPips = 4;
extern int JuiceStepPips = 4;
extern int JuiceLevelsNumber = 3;
extern color JuiceLevelColor = Silver;

double thresholdLevelPoint;
double sosoLevelPoint;

//---- indicator buffers
double GoodJuice[];
double BadJuice[];
double SoSoJuice[];
double currentJuiceLevel;

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- 3 additional buffers are used for counting.
   IndicatorBuffers(3);
//---- drawing settings
   SetIndexStyle(0,DRAW_HISTOGRAM,STYLE_SOLID);
   SetIndexStyle(1,DRAW_HISTOGRAM,STYLE_SOLID);
   SetIndexStyle(2,DRAW_HISTOGRAM,STYLE_SOLID);
   SetIndexDrawBegin(0,Periyod);
   IndicatorDigits(MarketInfo(Symbol(),MODE_DIGITS)+2);
//---- 2 indicator buffers mapping
   if(!SetIndexBuffer(0,GoodJuice) &&
      !SetIndexBuffer(1,BadJuice) &&
      !SetIndexBuffer(2,SoSoJuice))
      Print("cannot set indicator buffers!");

   IndicatorDigits(4);

   thresholdLevelPoint = thresholdLevel*Point;
   sosoLevelPoint = sosoLevel*Point;

//---- name for DataWindow and indicator subwindow label
   IndicatorShortName("Juice("+Periyod+","+thresholdLevel+")");

//---- initialization done
   return(0);
  }

int SetLevelLines()
{
   string levelLabel;
   if(JuiceLevelsVisible)
   {
      SetLevelStyle(STYLE_DASH,1,JuiceLevelColor);
      for(int i=1; i<= JuiceLevelsNumber; i++)
      {

         currentJuiceLevel = (JuiceStartPips + (i-1)*JuiceStepPips);
         SetLevelValue(i,currentJuiceLevel);
         levelLabel = "Level "+i+": "+currentJuiceLevel;
         SetIndexLabel(i,levelLabel);
      }
   }else
   {
      for(i=1; i<= JuiceLevelsNumber; i++)
      {

         SetLevelValue(i,0.0);

      }
   }
}

//+------------------------------------------------------------------+
//| Moving Average of Oscillator                                     |
//+------------------------------------------------------------------+
int start()
{
//if ( Period != 15)  Alert ("Juice Is Recommended for 15 Min Chart only!!");
   int limit,i;
   int counted_bars=IndicatorCounted();
   double Juice;
   static datetime lastPriceAlertedBar=0;
   int barToCheck;

//---- 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;

   SetLevelLines();

//---- main loop
   for(i=0; i<limit; i++)
   {
      Juice=iStdDev  (NULL,0,Periyod,MODE_EMA,0,PRICE_CLOSE,i);
      if(Juice>=thresholdLevelPoint){
         GoodJuice[i]=Juice/Point;
         BadJuice[i]=0;
         SoSoJuice[i]=0;
      }else if(Juice<sosoLevelPoint){
         BadJuice[i]=Juice/Point;
         GoodJuice[i]=0;
         SoSoJuice[i] = 0;
      }else{
         SoSoJuice[i] = Juice/Point;
         BadJuice[i]=0;
         GoodJuice[i]=0;
      }
   }

   if (DoAlerts)
   {
      if (Juice >= thresholdLevelPoint && Period() == 5 && lastPriceAlertedBar != iTime(NULL,0,barToCheck))
      {
            Alert("Juice above ",thresholdLevel," for ", Symbol());
            PlaySound("Tick.wav");
            lastPriceAlertedBar = iTime(NULL,0,barToCheck);
      }
   }

//---- done
   return(0);
  }
//+------------------------------------------------------------------+

[Post to Twitter] Tweet This Post  [Post to Delicious] Delicious This Post  [Post to Ping.fm] Ping This Post  [Post to StumbleUpon] Stumble This Post 

JMASlope.mq4

//+------------------------------------------------------------------+
//|                                                     JMASlope.mq4 |
//|                           Copyright ? 2005, TrendLaboratory Ltd. |
//|            http://finance.groups.yahoo.com/group/TrendLaboratory |
//|            Thanks to Weld, Jurik Research http://weld.torguem.net|
//+------------------------------------------------------------------+
#property copyright "Copyright ? 2005, TrendLaboratory Ltd."
#property link      "http://finance.groups.yahoo.com/group/TrendLaboratory"

#property indicator_separate_window
#property indicator_buffers 2
#property indicator_color1 Green
#property indicator_color2 Red
//---- input parameters
extern int       Length = 14;
extern int       Phase  = 0;
//---- buffers
double UpBuffer [];
double DnBuffer [];
double JMAValueBuffer [];
double fC0Buffer [];
double fA8Buffer [];
double fC8Buffer [];
//---- temporary buffers
double list[128], ring1[128], ring2[11], buffer[62];
//---- bool flag
bool   initFlag;
//---- integer vars
int    limitValue, startValue, loopParam, loopCriteria;
int    cycleLimit, highLimit, counterA, counterB;
//---- double vars
double cycleDelta, lowDValue, highDValue, absValue, paramA, paramB;
double phaseParam, logParam, JMAValue, series, sValue, sqrtParam, lengthDivider;
//---- temporary int variables
int   s58, s60, s40, s38, s68;
//+------------------------------------------------------------------+
//| JMA initFlagization function                                     |
//+------------------------------------------------------------------+
int init()
  {
   double   lengthParam;
//---- 3 additional buffers are used for counting.
   IndicatorBuffers(6);
//---- drawing settings
   SetIndexStyle  (0, DRAW_HISTOGRAM);
   SetIndexStyle  (1, DRAW_HISTOGRAM);
   SetIndexDrawBegin(0, 30);
   SetIndexDrawBegin(1, 30);
//---- 4 indicator buffers mapping
   SetIndexBuffer (0, UpBuffer);
   SetIndexBuffer (1, DnBuffer);
   SetIndexBuffer (2, JMAValueBuffer);
   SetIndexBuffer (3, fC0Buffer);
   SetIndexBuffer (4, fA8Buffer);
   SetIndexBuffer (5, fC8Buffer);
//---- initialize one buffer (neccessary)
   ArrayInitialize (ring2, 0);
   ArrayInitialize (ring1, 0);
   ArrayInitialize (buffer, 0);
//---- name for DataWindow and indicator subwindow label
   IndicatorShortName ("JMASlope(" + Length + "," + Phase + ")");
   SetIndexLabel (0, "UpSlope");
   SetIndexLabel (1, "DownSlope");
//---- initial part
   limitValue = 63;
   startValue = 64;
//----
   for (int i = 0; i <= limitValue; i++) list [i] = -1000000;
   for (i = startValue; i <= 127; i++)   list [i] = 1000000;
//----
   initFlag  = true;
   if (Length < 1.0000000002) lengthParam = 0.0000000001;
   else lengthParam = (Length - 1) / 2.0;
//----
   if (Phase < -100) phaseParam = 0.5;
   else if (Phase > 100) phaseParam = 2.5;
   else phaseParam = Phase / 100.0 + 1.5;
//----
   logParam = MathLog (MathSqrt (lengthParam)) / MathLog (2.0);
//----
   if (logParam + 2.0 < 0) logParam = 0;
   else logParam = logParam + 2.0;
//----
   sqrtParam     = MathSqrt(lengthParam) * logParam;
   lengthParam   = lengthParam * 0.9;
   lengthDivider = lengthParam / (lengthParam + 2.0);
//----
   return;
}
//+------------------------------------------------------------------+
//| JMA iteration function                                           |
//+------------------------------------------------------------------+
int start()
  {

//---- get already counted bars
   int counted_bars = IndicatorCounted();
//---- check for possible errors
   if (counted_bars < 0) return (-1);
   int limit = Bars - counted_bars - 1;
//---- main cycle
   for (int shift = limit; shift >= 0; shift--) {
      series = Close [shift];

      if (loopParam < 61) {
         loopParam++;
         buffer [loopParam] = series;
      }
      if (loopParam > 30) {
         if (initFlag) {
            initFlag = false;

            int diffFlag = 0;
            for (int i = 1; i <= 29; i++) {
               if (buffer [i + 1] != buffer [i]) diffFlag = 1;
            }
            highLimit = diffFlag * 30;

            if (highLimit == 0) paramB = series;
            else paramB = buffer[1];

            paramA = paramB;
            if (highLimit > 29) highLimit = 29;
         } else
            highLimit = 0;
//---- big cycle
         for (i = highLimit; i >= 0; i--) {
			   if (i == 0) sValue = series; else sValue = buffer [31 - i];

			   if (MathAbs (sValue - paramA) > MathAbs (sValue - paramB)) absValue = MathAbs(sValue - paramA); else absValue = MathAbs(sValue - paramB);
			   double dValue = absValue + 0.0000000001; //1.0e-10;

			   if (counterA <= 1) counterA = 127; else counterA--;
			   if (counterB <= 1) counterB = 10;  else counterB--;
			   if (cycleLimit < 128) cycleLimit++;
			   cycleDelta += (dValue - ring2 [counterB]);
			   ring2 [counterB] = dValue;
			   if (cycleLimit > 10) highDValue = cycleDelta / 10.0; else highDValue = cycleDelta / cycleLimit;

			   if (cycleLimit > 127) {
				   dValue = ring1 [counterA];
				   ring1 [counterA] = highDValue;
				   s68 = 64; s58 = s68;
				   while (s68 > 1) {
					   if (list [s58] < dValue) {
						   s68 = s68 / 2.0;
						   s58 += s68;
					   } else
					   if (list [s58] <= dValue) {
						   s68 = 1;
					   } else {
						   s68 = s68 / 2.0;
						   s58 -= s68;
					   }
               }
            } else {
			      ring1 [counterA] = highDValue;
			      if ((limitValue + startValue) > 127) {
				      startValue--;
				      s58 = startValue;
			      } else {
				      limitValue++;
				      s58 = limitValue;
			      }
			      if (limitValue > 96) s38 = 96; else s38 = limitValue;
			      if (startValue < 32) s40 = 32; else s40 = startValue;
		      }
//----
		      s68 = 64;
		      s60 = s68;
		      while (s68 > 1) {
			      if (list [s60] >= highDValue) {
				      if (list [s60 - 1] <= highDValue) {
					      s68 = 1;
				      }
				      else {
					      s68 = s68 / 2.0;
					      s60 -= s68;
				      }
			      }
			      else {
				      s68 = s68 / 2.0;
				      s60 += s68;
			      }
			      if ((s60 == 127) && (highDValue > list[127])) s60 = 128;
		      }
			   if (cycleLimit > 127) {
				   if (s58 >= s60) {
					   if (((s38 + 1) > s60) && ((s40 - 1) < s60))
						    lowDValue += highDValue;
					   else if ((s40 > s60) && ((s40 - 1) < s58))
						    lowDValue += list [s40 - 1];
				   }
				   else if (s40 >= s60) {
					   if (((s38 + 1) < s60) && ((s38 + 1) > s58))
							    lowDValue += list[s38 + 1];
					}
				   else if ((s38 + 2) > s60)
						   lowDValue += highDValue;
				   else if (((s38 + 1) < s60) && ((s38 + 1) > s58))
						   lowDValue += list[s38 + 1];

				   if (s58 > s60) {
					   if (((s40 - 1) < s58) && ((s38 + 1) > s58))
						   lowDValue -= list [s58];
					   else if ((s38 < s58) && ((s38 + 1) > s60))
						   lowDValue -= list [s38];
				   }
				   else {
					   if (((s38 + 1) > s58) && ((s40 - 1) < s58))
						   lowDValue -= list [s58];
					   else if ((s40 > s58) && (s40 < s60))
						   lowDValue -= list [s40];
				   }
			   }
			   if (s58 <= s60) {
				   if (s58 >= s60) list[s60] = highDValue; else {
					   for (int j = s58 + 1; j <= (s60 - 1); j++) {
						   list [j - 1] = list[j];
					   }
					   list [s60 - 1] = highDValue;
				   }
			   } else {
				   for (j = s58 - 1; j >= s60; j--) {
					   list [j + 1] = list [j];
				   }
				   list [s60] = highDValue;
			   }

			   if (cycleLimit <= 127) {
				   lowDValue = 0;
				   for (j = s40; j <= s38; j++) {
					   lowDValue += list[j];
				   }
			   }
//----
			   if ((loopCriteria + 1) > 31) loopCriteria = 31; else loopCriteria++;
			   double JMATempValue, sqrtDivider = sqrtParam / (sqrtParam + 1.0);

			   if (loopCriteria <= 30) {
				   if (sValue - paramA > 0) paramA = sValue; else paramA = sValue - (sValue - paramA) * sqrtDivider;
				   if (sValue - paramB < 0) paramB = sValue; else paramB = sValue - (sValue - paramB) * sqrtDivider;
				   JMATempValue = series;

				   if (loopCriteria == 30) {
				     fC0Buffer [shift] = series;
				     int intPart;

				     if (MathCeil(sqrtParam) >= 1) intPart = MathCeil(sqrtParam); else intPart = 1;
				     int leftInt = IntPortion (intPart);
				     if (MathFloor(sqrtParam) >= 1) intPart = MathFloor(sqrtParam); else intPart = 1;
				     int rightPart = IntPortion (intPart);

				     if (leftInt == rightPart) dValue = 1.0;
				     else
					     dValue = (sqrtParam - rightPart) / (leftInt - rightPart);

				     if (rightPart <= 29) int upShift = rightPart; else upShift = 29;
				     if (leftInt <= 29) int dnShift = leftInt; else dnShift = 29;
				     fA8Buffer [shift] = (series - buffer [loopParam - upShift]) * (1 - dValue) / rightPart + (series - buffer[loopParam - dnShift]) * dValue / leftInt;
               }
			   } else {
			      double powerValue, squareValue;

			      dValue = lowDValue / (s38 - s40 + 1);
			      if (0.5 <= logParam - 2.0) powerValue = logParam - 2.0;
               else powerValue = 0.5;

				   if (logParam >= MathPow(absValue/dValue, powerValue)) dValue = MathPow (absValue/dValue, powerValue); else dValue = logParam;
				   if (dValue < 1) dValue = 1;

				   powerValue = MathPow (sqrtDivider, MathSqrt (dValue));
				   if (sValue - paramA > 0) paramA = sValue; else paramA = sValue - (sValue - paramA) * powerValue;
				   if (sValue - paramB < 0) paramB = sValue; else paramB = sValue - (sValue - paramB) * powerValue;
   		   }
         }
// ---- end of big cycle
         if (loopCriteria > 30) {
				JMATempValue = JMAValueBuffer [shift + 1];
            powerValue   = MathPow (lengthDivider, dValue);
            squareValue  = MathPow (powerValue, 2);

				fC0Buffer [shift] = (1 - powerValue) * series + powerValue * fC0Buffer [shift + 1];
            fC8Buffer [shift] = (series - fC0Buffer [shift]) * (1 - lengthDivider) + lengthDivider * fC8Buffer [shift + 1];

            fA8Buffer [shift] = (phaseParam * fC8Buffer [shift] + fC0Buffer [shift] - JMATempValue) *
                                 (powerValue * (-2.0) + squareValue + 1) + squareValue * fA8Buffer [shift + 1];
            JMATempValue += fA8Buffer [shift];
         }
         JMAValue = JMATempValue;
      }
      if (loopParam <= 30) JMAValue = 0;
      JMAValueBuffer [shift] = JMAValue;
      double rel=JMAValueBuffer [shift]-JMAValueBuffer [shift+1];
      if(rel>=0)
      {
      UpBuffer[shift]=rel;
      DnBuffer[shift]=0;
      }
      else
      {
      DnBuffer[shift]=rel;
      UpBuffer[shift]=0;
      }

//---- End of main cycle
   }
   return;
}

//+------------------------------------------------------------------+
int IntPortion (double param) {
   if (param > 0) return (MathFloor (param));
   if (param < 0) return (MathCeil (param));
   return (0.0);
}
//+------------------------------------------------------------------+

[Post to Twitter] Tweet This Post  [Post to Delicious] Delicious This Post  [Post to Ping.fm] Ping This Post  [Post to StumbleUpon] Stumble This Post 

JMA_v2.mq4

//+------------------------------------------------------------------+
//|                                                          JMA.mq4 |
//|                                                           Spiggy |
//|                                                                  |
//+------------------------------------------------------------------+
#property copyright "Spiggy"
#property link      ""

#property indicator_chart_window
#property indicator_buffers 1
#property indicator_color1 White

//---- input parameters
extern int       Periods=14;
extern int       PriceType = 0;
extern int       Offset = 0;
extern int       phase=0;
extern int       BarCount=300;
//---- buffers
double ExtMapBuffer1[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   SetIndexStyle(0,DRAW_LINE);
   SetIndexBuffer(0,ExtMapBuffer1);
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custor indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----

//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
   int    counted_bars=IndicatorCounted();
//----
// variable definitions
bool firstTime=True;
int AccountedBars=0;
int jj=0;
int ii=0;
int shift=0;
double series=0;

double vv=0;
double v1=0;
double v2=0;
double v3=0;
double v4=0;
double s8=0;
double s10=0;
double s18=0;
double s20=0;
int v5=0;
int v6=0;
double s28=0;
double s30=0;
int s38=0;
int s40=0;
int s48=0;
int s50=0;
int s58=0;
int s60=0;
double s68=0;
double s70=0;
double f8=0;
double f10=0;
double f18=0;
double f20=0;
double f28=0;
double f30=0;
double f38=0;
double f40=0;
double f48=0;
double f50=0;
double f58=0;
double f60=0;
double f68=0;
double f70=0;
double f78=0;
double f80=0;
double f88=0;
double f90=0;
double f98=0;
double fA0=0;
double fA8=0;
double fB0=0;
double fB8=0;
double fC0=0;
double fC8=0;
double fD0=0;
double f0=0;
double fD8=0;
double fE0=0;
double fE8=0;
int fF0=0;
double fF8=0;
int value2=0;
double JMA=0;
double prevtime=0;

double list[127];
double ring1[127];
double ring2[10];
double buffer[61];

ArrayInitialize(list,0);
ArrayInitialize(ring1,0);
ArrayInitialize(ring2,0);
ArrayInitialize(buffer,0);

if (firstTime)
{
  AccountedBars = Bars-BarCount;
  firstTime=False;
}

if ((CurTime()-prevtime)<30)
  return(-1);

prevtime=CurTime();
//SetLoopCount(0);
{
  s28 = 63;
  s30 = 64;
  for ( ii = 1 ; ii <= s28 ; ii++)
  {
    list[ii] = -1000000;
  }
  for ( ii = s30 ; ii <= 127  ; ii++ )
  {
    list[ii] = 1000000;
  }
  f0 = 1;
}

//{--------------------------------------------------------------------}
for ( shift=BarCount ; shift >= 0 ; shift-- )
{
   switch(PriceType) {
      case 0:
         series=Close[shift];
         break;
      case 1:
         series=Open[shift];
         break;
      case 2:
         series=High[shift];
         break;
      case 3:
         series=Low[shift];
         break;
      case 4:
         series=(High[shift]+Low[shift])/2;
         break;
      case 5:
         series=(High[shift]+Low[shift]+Close[shift])/3;
         break;
      case 6:
         series=(High[shift]+Low[shift]+Close[shift]+Close[shift])/4;
         break;
  }
  if (fF0 < 61)
  {
    fF0= fF0 + 1;
    buffer[fF0] = series;
  }
  //{--------------------------------------------------------------------}
  // { main cycle }
  if (fF0 > 30)
  {
    if (Periods < 1.0000000002)
    {
      f80 = 0.0000000001; //{1.0e-10}
    }
    else
    {
      f80 = (Periods - 1) / 2.0;
    }

    if (phase < -100)
    {
      f10 = 0.5;
    }
    else
    {
      if (phase > 100)
      {
           f10 = 2.5;
      }
      else
      {
        f10 = phase / 100 + 1.5;
      }
    }

    v1 = MathLog(MathSqrt(f80));
    v2 = v1;
    if (v1 / MathLog(2.0) + 2.0 < 0.0)
    {
      v3 = 0;
    }
    else
    {
      v3 = v2 / MathLog(2.0) + 2.0;
    }
    f98 = v3;

    if (0.5 <= f98 - 2.0)
    {
      f88 = f98 - 2.0;
    }
    else
    {
      f88 = 0.5;
    }

    f78 = MathSqrt(f80) * f98;
    f90 = f78 / (f78 + 1.0);
    f80 = f80 * 0.9;
    f50 = f80 / (f80 + 2.0);

    if (f0 != 0)
    {
      f0 = 0;
      v5 = 0;
      for ( ii = 1 ; ii <=29 ; ii++ )
      {
        if (buffer[ii+1] != buffer[ii])
        {
          v5 = 1.0;
        }
      }

      fD8 = v5*30.0;
      if (fD8 == 0)
      {
        f38 = series;
      }
      else
      {
        f38 = buffer[1];
      }
      f18 = f38;
      if (fD8 > 29)
        fD8 = 29;
    }
    else
      fD8 = 0;

    for ( ii = fD8 ; ii >= 0 ; ii-- )
    { //{ another bigcycle...}
      value2=31-ii;
      if (ii == 0)
      {
        f8 = series;
      }
      else
      {
        f8 = buffer[value2];
      }
      f28 = f8 - f18;
      f48 = f8 - f38;
      if (MathAbs(f28) > MathAbs(f48))
      {
        v2 = MathAbs(f28);
      }
      else
      {
        v2 = MathAbs(f48);
      }
      fA0 = v2;
      vv = fA0 + 0.0000000001; //{1.0e-10;}

      if (s48 <= 1)
      {
        s48 = 127;
      }
      else
      {
        s48 = s48 - 1;
      }
      if (s50 <= 1)
      {
        s50 = 10;
      }
      else
      {
        s50 = s50 - 1;
      }
      if (s70 < 128)
        s70 = s70 + 1;
      s8 = s8 + vv - ring2[s50];
      ring2[s50] = vv;
      if (s70 > 10)
      {
        s20 = s8 / 10;
      }
      else
        s20 = s8 / s70;

      if (s70 > 127)
      {
        s10 = ring1[s48];
        ring1[s48] = s20;
        s68 = 64;
        s58 = s68;
        while (s68 > 1)
        {
          if (list[s58] < s10)
          {
            s68 = s68 *0.5;
            s58 = s58 + s68;
          }
          else
          if (list[s58] <= s10)
          {
            s68 = 1;
          }
          else
          {
            s68 = s68 *0.5;
            s58 = s58 - s68;
          }
        }
      }
      else
      {
        ring1[s48] = s20;
        if (s28 + s30 > 127)
        {
          s30 = s30 - 1;
          s58 = s30;
        }
        else
        {
          s28 = s28 + 1;
          s58 = s28;
        }
        if (s28 > 96)
        {
          s38 = 96;
        }
        else
          s38 = s28;
        if (s30 < 32)
        {
          s40 = 32;
        }
        else
          s40 = s30;
      }

      s68 = 64;
      s60 = s68;
      while (s68 > 1)
      {
        if (list[s60] >= s20)
        {
          if (list[s60 - 1] <= s20)
          {
            s68 = 1;
          }
          else
          {
            s68 = s68 *0.5;
            s60 = s60 - s68;
          }
        }
        else
        {
          s68 = s68 *0.5;
          s60 = s60 + s68;
        }
        if ((s60 == 127) && (s20 > list[127]))
          s60 = 128;
      }

      if (s70 > 127)
      {
        if (s58 >= s60)
        {
          if ((s38 + 1 > s60) && (s40 - 1 < s60))
          {
            s18 = s18 + s20;
          }
          else
          if ((s40 > s60) && (s40 - 1 < s58))
            s18 = s18 + list[s40 - 1];
        }
        else
        if (s40 >= s60)
        {
          if ((s38 + 1 < s60) && (s38 + 1 > s58))
            s18 = s18 + list[s38 + 1];
        }
        else
        if (s38 + 2 > s60)
        {
          s18 = s18 + s20;
        }
        else
        if ((s38 + 1 < s60) && (s38 + 1 > s58))
          s18 = s18 + list[s38 + 1];

        if (s58 > s60)
        {
          if ((s40 - 1 < s58) && (s38 + 1 > s58))
          {
            s18 = s18 - list[s58];
          }
          else
          if ((s38 < s58) && (s38 + 1 > s60))
            s18 = s18 - list[s38];
        }
        else
        {
          if ((s38 + 1 > s58) && (s40 - 1 < s58))
          {
            s18 = s18 - list[s58];
          }
          else
          if ((s40 > s58) && (s40 < s60))
            s18 = s18 - list[s40];
        }
      }

      if (s58 <= s60)
      {
        if (s58 >= s60)
        {
          list[s60] = s20;
        }
        else
        {
          for ( jj = s58 + 1 ; jj <= s60 - 1 ; jj++ )
          {
            list[jj - 1] = list[jj];
          }
          list[s60 - 1] = s20;
        }
      }
      else
      {
        for ( jj = s58 - 1 ; jj >= s60 ; jj-- )
        {
          list[jj + 1] = list[jj];
        }
        list[s60] = s20;
      }

      if (s70 <= 127)
      {
        s18 = 0;
        for (jj = s40 ; jj <= s38 ; jj++)
        {
          s18 = s18 + list[jj];
        }
      }
      f60 = s18 / (s38 - s40 + 1);
      if (fF8 + 1 > 31)
      {
        fF8 = 31;
      }
      else
        fF8 = fF8 + 1;

      if (fF8 <= 30)
      {
        if (f28 > 0)
        {
          f18 = f8;
        }
        else
          f18 = f8 - f28 * f90;
        if (f48 < 0)
        {
          f38 = f8;
        }
        else
          f38 = f8 - f48 * f90;
        fB8 = series;
        //{EasyLanguage does not have "continue" statement}
        if (fF8 != 30)
        {
          continue;
        }
        if (fF8 == 30)
        {
          fC0 = series;
          if (MathCeil(f78) >= 1)
          {
            v4 = MathCeil(f78);
          }
          else
            v4 = 1;
          fE8 = MathCeil(v4);
          if (MathFloor(f78) >= 1)
          {
            v2 = MathFloor(f78);
          }
          else
            v2 = 1;
          fE0 = MathCeil(v2);
          if (fE8 == fE0)
          {
            f68 = 1;
          }
          else
          {
            v4 = fE8 - fE0;
            f68 = (f78 - fE0) / v4;
          }
          if (fE0 <= 29)
          {
            v5 = fE0;
          }
          else
            v5 = 29;
          if (fE8 <= 29)
          {
            v6 = fE8;
          }
          else
            v6 = 29;
          fA8 = (series - buffer[fF0 - v5]) * (1 - f68) / fE0 + (series - buffer[fF0 - v6]) * f68 / fE8;
        }
      }
      else
      {
        if (f98 >= MathPow(fA0/f60, f88))
        {
          v1 = MathPow(fA0/f60, f88);
        }
        else
          v1 = f98;
        if (v1 < 1)
        {
          v2 = 1;
        }
        else
        {
          if (f98 >= MathPow(fA0/f60, f88))
          {
            v3 = MathPow(fA0/f60, f88);
          }
          else
            v3 = f98;
          v2 = v3;
        }
        f58 = v2;
        f70 = MathPow(f90, MathSqrt(f58));
        if (f28 > 0)
        {
          f18 = f8;
        }
        else
        {
          f18 = f8 - f28 * f70;
        }
        if (f48 < 0)
        {
          f38 = f8;
        }
        else
        {
          f38 = f8 - f48 * f70;
        }
      }
    }

    if (fF8 > 30)
    {
      f30 = MathPow(f50, f58);
      fC0 = (1 - f30) * series + f30 * fC0;
      fC8 = (series - fC0) * (1 - f50) + f50 * fC8;
      fD0 = f10 * fC8 + fC0;
      f20 = -f30 * 2;
      f40 = f30 * f30;
      fB0 = f20 + f40 + 1;
      fA8 = (fD0 - fB8) * fB0 + f40 * fA8;
      fB8 = fB8 + fA8;
    }
    JMA= fB8;
  }
  if (fF0 <= 30)
  {
    JMA=0;
  }

//Print ("JMA is " + JMA + " shift is " + shift);
  ExtMapBuffer1[shift-Offset]=JMA;

  if (shift>0)
  {
    AccountedBars=AccountedBars+1;
  }
}
//----
   return(0);
  }
//+------------------------------------------------------------------+

[Post to Twitter] Tweet This Post  [Post to Delicious] Delicious This Post  [Post to Ping.fm] Ping This Post  [Post to StumbleUpon] Stumble This Post 

JMA_StarLight.mq4

//+GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG+
//|                                                JMA_StarLight.mq4 |
//|           JMA_Star_Light: Copyright ? 2005, Weld, Jurik Research |
//|                                          http://weld.torguem.net |
//|                         MQL4: Copyright ? 2005, Nikolay Kositsin |
//|                                   Khabarovsk, violet@mail.kht.ru |
//+GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG+
#property copyright "Weld"
#property link "http://weld.torguem.net"
#property indicator_chart_window
#property indicator_buffers 1
#property indicator_color1 Red
//---- input parameters
extern int Length = 5; // ???? ??????
extern int Phase  = 5; // ????, ???????? ? ???? -150 ... +150, ???? ? ???? ?????? ????;
extern int Shift  = 0; // c?? ????? ??? ?? ????
extern int Input_Price_Customs = 0;//??? ??, ? ???? ??????? ??? ????? (0-"Close", 1-"Open", 2-"(High+Low)/2", 3-"High", 4-"Low")
//---- indicator buffers
double JMA_Buf[ ];
double MEMORY1[9];
int    MEMORY2[12];
double MEMORY3[128];
//---- temporary double buffers
double list[128], ring1[128], ring2[11], buffer[62];
//---- double vars
double f8, f60,f20,f28,f30,f40,f48,f58,f68,f70,f90,f78,f88,f98;
double Kg,Dr,Ds,Dl,Pf,JMA,series,vv,v1,v2,v3,v4,s20,s10,fB0,fD0;
//---- integer vars
int ii,jj,s28,s30,f0,v5,v6,fE0,fD8,fE8,val,s48,s58,s60,s68,T0;
//+GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG+
//| JMA initFlagization function                                     |
//+GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG+
int init()
{
SetIndexStyle(0, DRAW_LINE);
SetIndexShift(0, Shift);
//---- 1 indicator buffers mapping
IndicatorBuffers(1);
SetIndexBuffer (0, JMA_Buf);
SetIndexEmptyValue(0,0.0);
//----
IndicatorShortName ("JMA Star Light( Length="+Length+", Phase="+Phase+", Shift="+Shift+")");
SetIndexLabel (0, "JMA Star Light");
IndicatorDigits(MarketInfo(Symbol(),MODE_DIGITS));
//+==== initial part ==============================================================================================================+
if(Phase<-100){Alert("???? Phase ??? ?? ? -100 ? +100" + " ? ??? ?????? " + Phase+ " ??? ?????? -100");}
if(Phase> 100){Alert("???? Phase ??? ?? ? -100 ? +100" + " ? ??? ?????? " + Phase+ " ??? ??????  100");}
if(Length<  1){Alert("???? Length ??? ? ??? 1" + " ? ??? ?????? " + Length+ " ??? ??????  1");}
if(Input_Price_Customs<0){Alert("???? Input_Price_Customs ??? ? ??? 0" + " ? ??? ?????? " + Input_Price_Customs+ " ??? ?????? 0");}
if(Input_Price_Customs>4){Alert("???? Input_Price_Customs ??? ? ??? 4" + " ? ??? ?????? " + Input_Price_Customs+ " ??? ?????? 0");}
if (Length < 1.0000000002) Dr = 0.0000000001; //{1.0e-10}
else Dr = (Length - 1.0) / 2.0;
if (Phase >   100) Pf = 2.5;
if (Phase <  -100) Pf = 0.5;
if((Phase >= -100)&&(Phase <= 100)) Pf = Phase / 100.0 + 1.5;
Dr = Dr * 0.9; Kg = Dr / (Dr + 2.0);
Ds=MathSqrt(Dr); Dl=MathLog(Ds);
//----==========================+
return(0);
}
//+GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG+
//| JMA iteration function                                           |
//+GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG+
int start()
{
//---- get already counted bars
int counted_bars = IndicatorCounted();
//---- check for possible errors
if (counted_bars<0) return (-1);
int limit=Bars-counted_bars-1;
//----
if(limit==Bars-1)
{
//---- ????? ?????? ????? ? ? ??????? ============+
ArrayInitialize (MEMORY1, 0.0);ArrayInitialize (MEMORY2, 0  );
ArrayInitialize (MEMORY3, 0.0);
ArrayInitialize (buffer,  0.0);ArrayInitialize (ring1,   0.0);
ArrayInitialize (ring2,   0.0);ArrayInitialize (list,    0.0);
//----+===============================================================+

double f18=0.0,f38=0.0,fA0=0.0,fA8=0.0,fC0=0.0,fC8=0.0,s8=0.0,s18=0.0;
int    s38=0,  s40=0,  s50=0,  s70=0,  LP2=0,  LP1=0;

//----+===============================================================+
f0=1; s28=63; s30=64;
for (ii=0;   ii<=s28; ii++)list[ii]=-1000000.0;
for (ii=s30; ii<=127; ii++)list[ii]= 1000000.0;
//----+#########################################+
}
if (limit<Bars-1)
{
//---- ??????? ?????  ??????? =======================+
ArrayInitialize (buffer,  0.0);ArrayInitialize (ring1,   0.0);
ArrayInitialize (list,    0.0);ArrayInitialize (ring2,   0.0);
//----+===============================================================+
f8 =0.0;f60=0.0;f20=0.0;f28=0.0;f30=0.0;f40=0.0;f48=0.0;f58=0.0;f68=0.0;
f70=0.0;f90=0.0;f78=0.0;f88=0.0;f98=0.0;vv =0.0;v1 =0.0;v2 =0.0;v3 =0.0;
v4 =0.0;fB0=0.0;fD0=0.0;v5 =0;  v6 =0;  fE0=0;  fD8=0;  fE8=0;  val=0;
//----+===============================================================+
if(Time[limit+1]!=T0)
{
//+--- ??????? ????? ############+
if(Time[limit+1]!=MEMORY2[0])return(-1);
           fC0=MEMORY1[00];
           fC8=MEMORY1[01];
           fA8=MEMORY1[02];
           s8 =MEMORY1[03];
           f18=MEMORY1[04];
           f38=MEMORY1[05];
           s18=MEMORY1[06];
           s20=MEMORY1[07];
           s10=MEMORY1[08];
//+=======================+
           s38=MEMORY2[01];
           s48=MEMORY2[02];
           s50=MEMORY2[03];
           LP1=MEMORY2[04];
           LP2=MEMORY2[05];
           s28=MEMORY2[06];
           s30=MEMORY2[07];
           s48=MEMORY2[08];
           s58=MEMORY2[09];
           s60=MEMORY2[10];
           s68=MEMORY2[11];
           JMA=JMA_Buf[limit+1];
for(ii=0;ii<=127;ii++)list [ii]=MEMORY3[ii];
//+--- ####################################+
}
}
for(int bar = limit; bar >= 0; bar--)
{
//XXXXXXXX main cycle XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX+

if((Input_Price_Customs<=0)||Input_Price_Customs>4)series=Close[bar];
if (Input_Price_Customs==1)series= Open[bar];
if (Input_Price_Customs==2)series=(High[bar]+Low[bar])/2;
if (Input_Price_Customs==3)series= High[bar];
if (Input_Price_Customs==4)series= Low [bar];
//----
if (LP1<61){LP1++; buffer[LP1]=series;}
if (LP1>30)
{
//++++++++++++++++++
v1 = Dl; v2 = v1;
if ((v1 / MathLog(2.0)) + 2.0 < 0.0) v3 = 0.0; else v3 = (v2 / MathLog(2.0)) + 2.0;
f98 = v3;
if ( f98 >= 2.5 ) f88 = f98 - 2.0; else f88 = 0.5;
f78 = Ds * f98; f90 = f78 / (f78 + 1.0);
if (f0 != 0)
{
f0 = 0; v5 = 0;
for( ii=0; ii<=29; ii++) {if (buffer[ii+1] != buffer[ii]) v5 = 1; break; }
fD8 = v5*30;
if (fD8 == 0) f38 = series; else f38 = buffer[1];
f18 = f38;
if (fD8 > 29) fD8 = 29;
}
else fD8 = 0;
for(ii=fD8; ii>=0; ii--)
{
val=31-ii;
if (ii == 0) f8 = series; else f8 = buffer[val];
f28 = f8 - f18; f48 = f8 - f38;
if (MathAbs(f28) > MathAbs(f48)) v2 = MathAbs(f28); else v2 = MathAbs(f48);
fA0 = v2; vv = fA0 + 0.0000000001; //{1.0e-10;}
if (s48 <= 1) s48 = 127; else s48 = s48 - 1;
if (s50 <= 1) s50 = 10;  else s50 = s50 - 1;
if (s70 < 128) s70 = s70 + 1;
s8 = s8 + vv - ring2[s50]; ring2[s50] = vv;
if (s70 > 10) s20 = s8 / 10.0; else s20 = s8 / s70;
if (s70 > 127)
{
s10 = ring1[s48]; ring1[s48] = s20; s68 = 64; s58 = s68;
while (s68 > 1)
{
if (list[s58] < s10){s68 = s68 *0.5; s58 = s58 + s68;}
else if (list[s58] <= s10) s68 = 1; else{s68 = s68 *0.5; s58 = s58 - s68;}
}
}
else
{
ring1[s48] = s20;
if (s28 + s30 > 127){s30 = s30 - 1; s58 = s30;}
else {s28 = s28 + 1; s58 = s28;}
if (s28 > 96) s38 = 96; else s38 = s28;
if (s30 < 32) s40 = 32; else s40 = s30;
}
s68 = 64; s60 = s68;
while (s68 > 1)
{
if (list[s60] >= s20)
{
if (list[s60 - 1] <= s20) s68 = 1; else {s68 = s68 *0.5; s60 = s60 - s68; }
}
else{s68 = s68 *0.5; s60 = s60 + s68;}
if ((s60 == 127) && (s20 > list[127])) s60 = 128;
}
if (s70 > 127)
{
if (s58 >= s60)
{
if ((s38 + 1 > s60) && (s40 - 1 < s60)) s18 = s18 + s20;
else if ((s40 + 0 > s60) && (s40 - 1 < s58)) s18 = s18 + list[s40 - 1];
}
else
if (s40 >= s60) {if ((s38 + 1 < s60) && (s38 + 1 > s58)) s18 = s18 + list[s38 + 1]; }
else if (s38 + 2 > s60) s18 = s18 + s20; else if ((s38 + 1 < s60) && (s38 + 1 > s58)) s18 = s18 + list[s38 + 1];
if (s58 > s60)
{
if ( (s40 - 1 < s58) && (s38 + 1 > s58)) s18 = s18 - list[s58];
else if ((s38 < s58) && (s38 + 1 > s60)) s18 = s18 - list[s38];
}
else
{
if ((s38 + 1 > s58) && (s40 - 1 < s58)) s18 = s18 - list[s58];
else
if ((s40 + 0 > s58) && (s40 - 0 < s60)) s18 = s18 - list[s40];
}
}
if (s58 <= s60)
{
if (s58 >= s60) list[s60] = s20;
else
{
for( jj = s58 + 1; jj<=s60 - 1 ;jj++)list[jj - 1] = list[jj];
list[s60 - 1] = s20;
}
}
else
{
for( jj = s58 - 1; jj>=s60 ;jj--) list[jj + 1] = list[jj];
list[s60] = s20;
}
if (s70 <= 127)
{
s18 = 0;
for( jj = s40 ; jj<=s38 ;jj++) s18 = s18 + list[jj];
}
f60 = s18 / (s38 - s40 + 1.0);
if (LP2 + 1 > 31) LP2 = 31; else LP2 = LP2 + 1;
if (LP2 <= 30)
{
if (f28 > 0.0) f18 = f8; else f18 = f8 - f28 * f90;
if (f48 < 0.0) f38 = f8; else f38 = f8 - f48 * f90;
JMA = series;
if (LP2!=30) continue;
if (LP2==30)
{
fC0 = series;
if ( MathCeil(f78) >= 1) v4 = MathCeil(f78); else v4 = 1.0;
fE8 = IntPortion(v4);
if (MathFloor(f78) >= 1) v2 = MathFloor(f78); else v2 = 1.0;
fE0 = IntPortion(v2);
if (fE8== fE0) f68 = 1.0; else {v4 = fE8 - fE0; f68 = (f78 - fE0) / v4;}
if (fE0 <= 29) v5 = fE0; else v5 = 29;
if (fE8 <= 29) v6 = fE8; else v6 = 29;
fA8 = (series - buffer[LP1 - v5]) * (1.0 - f68) / fE0 + (series - buffer[LP1 - v6]) * f68 / fE8;
}
}
else
{
if (f98 >= MathPow(fA0/f60, f88)) v1 = MathPow(fA0/f60, f88);
else v1 = f98;
if (v1 < 1.0) v2 = 1.0;
else
{if(f98 >= MathPow(fA0/f60, f88)) v3 = MathPow(fA0/f60, f88);
else v3 = f98; v2 = v3;}
f58 = v2; f70 = MathPow(f90, MathSqrt(f58));
if (f28 > 0.0) f18 = f8; else f18 = f8 - f28 * f70;
if (f48 < 0.0) f38 = f8; else f38 = f8 - f48 * f70;
}
}
if (LP2 >30)
{
f30 = MathPow(Kg, f58);
fC0 =(1.0 - f30) * series + f30 * fC0;
fC8 =(series - fC0) * (1.0 - Kg) + Kg * fC8;
fD0 = Pf * fC8 + fC0;
f20 = f30 *(-2.0);
f40 = f30 * f30;
fB0 = f20 + f40 + 1.0;
fA8 =(fD0 - JMA) * fB0 + f40 * fA8;
JMA = JMA + fA8;
}
}
//++++++++++++++++++
if (LP1 <=30)JMA=0.0;
JMA_Buf[bar]=JMA;

if (bar==1)
{
//+--- ????? ?????
        MEMORY1[00]=fC0;
        MEMORY1[01]=fC8;
        MEMORY1[02]=fA8;
        MEMORY1[03]= s8;
        MEMORY1[04]=f18;
        MEMORY1[05]=f38;
        MEMORY1[06]=s18;
        MEMORY1[07]=s20;
        MEMORY1[08]=s10;
//+====================+
        MEMORY2[01]=s38;
        MEMORY2[02]=s48;
        MEMORY2[03]=s50;
        MEMORY2[04]=LP1;
        MEMORY2[05]=LP2;
        MEMORY2[06]=s28;
        MEMORY2[07]=s30;
        MEMORY2[08]=s48;
        MEMORY2[09]=s58;
        MEMORY2[10]=s60;
        MEMORY2[11]=s68;
        MEMORY2[00]=Time[1];
for (ii=0; ii<=127; ii++)
        MEMORY3[ii]=list[ii];
        T0=Time[0];
//+--- ###################+
}
}
//XXXXXXX main cycle done XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX+
return(0);
}
//+-----------------------------------------+
int IntPortion (double param)
{
if (param > 0) return (MathFloor (param));
if (param < 0) return (MathCeil  (param));
return (0.0);
}
//+-----------------------------------------+

[Post to Twitter] Tweet This Post  [Post to Delicious] Delicious This Post  [Post to Ping.fm] Ping This Post  [Post to StumbleUpon] Stumble This Post 

JMA_SL.mq4

//+SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS+
//|                                                       JMA_SL.mq4 |
//|                      JMA: Copyright ? 2005, Weld, Jurik Research |
//|                                          http://weld.torguem.net |
//|                         MQL4: Copyright ? 2005, Nikolay Kositsin |
//|                                   Khabarovsk, violet@mail.kht.ru |
//+SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS+
#property copyright "Weld"
#property link "http://weld.torguem.net"
#property indicator_chart_window
#property indicator_buffers 1
#property indicator_color1 Red
//---- input parameters
extern int Length = 5; // ???? ??????
extern int Phase  = 5; // ????, ???????? ? ???? -100 ... +100, ???? ? ???? ?????? ????;
extern int Shift  = 0; // c?? ????? ??? ?? ????
extern int Input_Price_Customs = 0;//??? ??, ? ???? ??????? ??? ?????
//(0-"Close", 1-"Open", 2-"(High+Low)/2", 3-"High", 4-"Low", 5-"Heiken Ashi Close", 6-"(Open+Close)/2")
//---- indicator buffers
double JMA_Buffer[];
double MEMORY1[8];
int    MEMORY2[7];
double MEMORY3[128];
//---- temporary double buffers
double list[128], ring1[128], ring2[11], buffer[62],RING1[1],RING2[1],LIST[128];
//---- double vars
double Kg,Dr,Ds,Dl,Pf,series,vv,v1,v2,v3,v4,s20,s10,fB0,fD0;
double f8, f60,f20,f28,f30,f40,f48,f58,f68,f70,f90,f78,f88,f98,JMA;
//---- integer vars
int countR1,countR2,countL,S48[1],S50[1],Sjj[128],temp;
int ii,jj,s28,s30,f0,v5,v6,fE0,fD8,fE8,val,s48,s58,s60,s68,IPC,count,size,aa;
int IntPortion(double param){if(param>0)return(MathFloor(param));if(param<0)return(MathCeil (param));return(0.0);}
//+SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS+
//| JMA iteration function                                           |
//+SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS+
int init()
{
SetIndexStyle(0, DRAW_LINE);
SetIndexShift(0, Shift);
//---- 1 indicator buffers mapping
IndicatorBuffers(1);
SetIndexBuffer (0, JMA_Buffer);
SetIndexEmptyValue(0,0.0);
//----
IndicatorShortName ("JMA Star Light( Length="+Length+", Phase="+Phase+", Shift="+Shift+")");
SetIndexLabel (0, "JMA Star Light");
IndicatorDigits(MarketInfo(Symbol(),MODE_DIGITS));IPC=Input_Price_Customs;
//+================================================================================================================================+
if(Phase<-100){Alert("???? Phase ??? ?? ? -100 ? +100" + " ? ??? ?????? " +Phase+  " ??? ?????? -100");}
if(Phase> 100){Alert("???? Phase ??? ?? ? -100 ? +100" + " ? ??? ?????? " +Phase+  " ??? ??????  100");}
if(Length<  1){Alert("???? Length ??? ?? ? ??? 1"     + " ? ??? ?????? " +Length+ " ??? ??????  1"  );}
if(IPC<0){Alert("???? Input_Price_Customs ??? ?? ? ??? 0" + " ? ??? ?????? "+IPC+ " ??? ?????? 0"   );}
if(IPC>6){Alert("???? Input_Price_Customs ??? ?? ? ??? 6" + " ? ??? ?????? "+IPC+ " ??? ?????? 0"   );}
//+================================================================================================================================+
if (Length < 1.0000000002) Dr = 0.0000000001; //{1.0e-10}
else Dr = (Length - 1.0) / 2.0;
if((Phase >= -100)&&(Phase <= 100)) Pf = Phase / 100.0 + 1.5;
if (Phase >   100) Pf = 2.5;
if (Phase <  -100) Pf = 0.5;
Dr = Dr * 0.9; Kg = Dr / (Dr + 2.0);
Ds=MathSqrt(Dr); Dl=MathLog(Ds);
v1 = Dl; v2 = v1;
if ((v1 / MathLog(2.0)) + 2.0 < 0.0) v3 = 0.0; else v3 = (v2 / MathLog(2.0)) + 2.0;
f98 = v3;
if ( f98 >= 2.5 ) f88 = f98 - 2.0; else f88 = 0.5;
f78 = Ds * f98; f90 = f78 / (f78 + 1.0);
//----==========================+
return(0);
}
//+SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS+
//| JMA iteration function                                           |
//+SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS+
int start()
{
//---- get already counted bars
int counted_bars = IndicatorCounted();
//---- check for possible errors
if (counted_bars<0) return (-1);
int limit=Bars-counted_bars-1;
//----
if(limit==Bars-1)
{
//----+==========================================================================+
double f18,f38,fA0,fA8,fC0,fC8,s8,s18; int s38,s40,s50,s70,LP2,LP1;
ArrayInitialize(ring2,0.0);ArrayInitialize(ring1,0.0);ArrayInitialize(buffer,0.0);
ArrayInitialize(LIST, 0.0);ArrayInitialize(RING1,0.0);ArrayInitialize(RING2, 0.0);
ArrayInitialize(Sjj,  0  );ArrayInitialize(S48,  0  );ArrayInitialize(S50,   0  );
//----+==========================================================================+
f0=1; s28=63; s30=64;
for (ii=0;   ii<=s28; ii++)list[ii]=-1000000.0;
for (ii=s30; ii<=127; ii++)list[ii]= 1000000.0;
//----+#########################################+
}
fA0=0.0; vv=0.0; v4=0.0;s20=0.0;s10=0.0;fB0=0.0;fD0=0.0;f60=0.0;f20=0.0;f30=0.0;f40=0.0;f48=0.0;f58=0.0;
f68=0.0;f70=0.0; v4=0.0;s20=0.0;s10=0.0; v5=0;   v6=0;  fE0=0;  fE8=0;  s58=0;  s60=0;  s68=0;

if((limit<Bars-1)&&(Time[limit+1]!=MEMORY2[00]))
{
if(Time[limit+1]!=MEMORY2[01])return(-1);
//+--- <<< ??????? ????? >>> SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS+
s38=MEMORY2[02];s48=MEMORY2[03];s50=MEMORY2[04];LP1=MEMORY2[05];LP2=MEMORY2[06];
fC0=MEMORY1[00];fC8=MEMORY1[01];fA8=MEMORY1[02];s8 =MEMORY1[03];f18=MEMORY1[04];
f38=MEMORY1[05];s18=MEMORY1[06];JMA=MEMORY1[07];
for(ii=countL-1; ii>=0;ii--){temp=Sjj[ii];list [temp]=LIST [ii];}
for(ii=countR1-1;ii>=0;ii--){temp=S48[ii];ring1[temp]=RING1[ii];}
for(ii=countR2-1;ii>=0;ii--){temp=S50[ii];ring2[temp]=RING2[ii];}
//+--- SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS+
}
for(int bar = limit; bar >= 0; bar--)
{
//---+ main cycle -------------------------+
countR1=0;countR2=0;countL=0;

switch(IPC)
{
case 0 : series=Close[bar];break;
case 1 : series= Open[bar];break;
case 2: {series=(High[bar]+Low  [bar])/2;}break;
case 3:  series= High[bar];break;
case 4:  series=  Low[bar];break;
case 5: {series=(Open[bar]+High [bar]+Low[bar]+Close[bar])/4;}break;
case 6: {series=(Open[bar]+Close[bar])/2;}break;
default: series=Close[bar];break;
}
//----
if (LP1<61){LP1++; buffer[LP1]=series;}
if (LP1>30)
{
//++++++++++++++++++
if (f0 != 0)
{
f0 = 0; v5 = 0;
for( ii=0; ii<=29; ii++) {if (buffer[ii+1] != buffer[ii]) v5 = 1; break; }
fD8 = v5*30;
if (fD8 == 0) f38 = series; else f38 = buffer[1];
f18 = f38;
if (fD8 > 29) fD8 = 29;
}
else fD8 = 0;
for(ii=fD8; ii>=0; ii--)
{
val=31-ii;
if (ii == 0) f8 = series; else f8 = buffer[val];
f28 = f8 - f18; f48 = f8 - f38;
if (MathAbs(f28) > MathAbs(f48)) v2 = MathAbs(f28); else v2 = MathAbs(f48);
fA0 = v2; vv = fA0 + 0.0000000001; //{1.0e-10;}
if (s48 <= 1) s48 = 127; else s48 = s48 - 1;
if (s50 <= 1) s50 = 10;  else s50 = s50 - 1;
if (s70 < 128) s70 = s70 + 1;
s8 = s8 + vv - ring2[s50];
//+--- <<< ??? ????? ? ???, ????? ? 0 ?? >>> ============================================================+
if(bar==0){ArrayResize(RING2,countR2+1);ArrayResize(S50,countR2+1);RING2[countR2+1]=ring2[s50];S50[countR2]=s50;countR2++;}
//---+ +==================================================================================================================+
ring2[s50] = vv;
if (s70 > 10) s20 = s8 / 10.0; else s20 = s8 / s70;
if (s70 > 127)
{
s10 = ring1[s48];
//+--- <<< ??? ????? ? ???, ????? ? 0 ?? >>> ============================================================+
if(bar==0){ArrayResize(RING1,countR1+1);ArrayResize(S48,countR1+1);RING1[countR1+1]=ring1[s48];S48[countR1]=s48;countR1++;}
//---+ +==================================================================================================================+
ring1[s48] = s20; s68 = 64; s58 = s68;
while (s68 > 1)
{
if (list[s58] < s10){s68 = s68 *0.5; s58 = s58 + s68;}
else if (list[s58] <= s10) s68 = 1; else{s68 = s68 *0.5; s58 = s58 - s68;}
}
}
else
{
//+--- <<< ??? ????? ? ???, ????? ? 0 ?? >>> ============================================================+
if(bar==0){ArrayResize(RING1,countR1+1);ArrayResize(S48,countR1+1);RING1[countR1+1]=ring1[s48];S48[countR1]=s48;countR1++;}
//---+ +==================================================================================================================+
ring1[s48] = s20;
if (s28 + s30 > 127){s30 = s30 - 1; s58 = s30;}
else {s28 = s28 + 1; s58 = s28;}
if (s28 > 96) s38 = 96; else s38 = s28;
if (s30 < 32) s40 = 32; else s40 = s30;
}
s68 = 64; s60 = s68;
while (s68 > 1)
{
if (list[s60] >= s20)
{
if (list[s60 - 1] <= s20) s68 = 1; else {s68 = s68 *0.5; s60 = s60 - s68; }
}
else{s68 = s68 *0.5; s60 = s60 + s68;}
if ((s60 == 127) && (s20 > list[127])) s60 = 128;
}
if (s70 > 127)
{
if (s58 >= s60)
{
if ((s38 + 1 > s60) && (s40 - 1 < s60)) s18 = s18 + s20;
else if ((s40 + 0 > s60) && (s40 - 1 < s58)) s18 = s18 + list[s40 - 1];
}
else
if (s40 >= s60) {if ((s38 + 1 < s60) && (s38 + 1 > s58)) s18 = s18 + list[s38 + 1]; }
else if (s38 + 2 > s60) s18 = s18 + s20; else if ((s38 + 1 < s60) && (s38 + 1 > s58)) s18 = s18 + list[s38 + 1];
if (s58 > s60)
{
if ( (s40 - 1 < s58) && (s38 + 1 > s58)) s18 = s18 - list[s58];
else if ((s38 < s58) && (s38 + 1 > s60)) s18 = s18 - list[s38];
}
else
{
if ((s38 + 1 > s58) && (s40 - 1 < s58)) s18 = s18 - list[s58];
else
if ((s40 + 0 > s58) && (s40 - 0 < s60)) s18 = s18 - list[s40];
}
}
if (s58 <= s60)
{
if(bar==0)
{
//--+ <<< ????? ???? ?? ???????? ??? >>>
LIST[countL]=list[s60];Sjj[countL]=s60;countL++;
//--++ssssssssssssssssssssssssssssssssssssssssssssssssssss+
}
if (s58 >= s60) list[s60] = s20;
else
{
if(bar==0)
{
//--+ <<< ????? ???? ?? ???????? ??? >>> +ssssssssssssssssssssssssssssssss+
size=s60-s58;for(aa=0; aa<=size-2;aa++){LIST[countL+aa]=list[s58+aa];Sjj[countL+aa]=s58+1+aa;}
countL=countL+size;LIST[countL]=list[s60-1];Sjj[countL]=s60-1;countL++;
//--++sssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss+
}
for( jj = s58 + 1; jj<=s60 - 1 ;jj++)list[jj - 1] = list[jj];
list[s60 - 1] = s20;
}
}
else
{
if(bar==0)
{
//--+ <<< ????? ???? ?? ???????? ??? >>> +sssssssssssssssssssssssssssssssssss+
size=s58-s60+1;for(aa=0; aa<=size-2;aa++){LIST[countL+aa]=list[s58-aa];Sjj[countL+aa]=s58-1-aa;}
countL=countL+size;LIST[countL]=list[s60];Sjj[countL]=s60;countL++;
//--++ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss+
}
for( jj = s58 - 1; jj>=s60 ;jj--) list[jj + 1] = list[jj];
list[s60] = s20;
}
if (s70 <= 127)
{
s18 = 0;
for( jj = s40 ; jj<=s38 ;jj++) s18 = s18 + list[jj];
}
f60 = s18 / (s38 - s40 + 1.0);
if (LP2 + 1 > 31) LP2 = 31; else LP2 = LP2 + 1;
if (LP2 <= 30)
{
if (f28 > 0.0) f18 = f8; else f18 = f8 - f28 * f90;
if (f48 < 0.0) f38 = f8; else f38 = f8 - f48 * f90;
JMA = series;
if (LP2!=30) continue;
if (LP2==30)
{
fC0 = series;
if ( MathCeil(f78) >= 1) v4 = MathCeil(f78); else v4 = 1.0;
fE8 = IntPortion(v4);
if (MathFloor(f78) >= 1) v2 = MathFloor(f78); else v2 = 1.0;
fE0 = IntPortion(v2);
if (fE8== fE0) f68 = 1.0; else {v4 = fE8 - fE0; f68 = (f78 - fE0) / v4;}
if (fE0 <= 29) v5 = fE0; else v5 = 29;
if (fE8 <= 29) v6 = fE8; else v6 = 29;
fA8 = (series - buffer[LP1 - v5]) * (1.0 - f68) / fE0 + (series - buffer[LP1 - v6]) * f68 / fE8;
}
}
else
{
if (f98 >= MathPow(fA0/f60, f88)) v1 = MathPow(fA0/f60, f88);
else v1 = f98;
if (v1 < 1.0) v2 = 1.0;
else
{if(f98 >= MathPow(fA0/f60, f88)) v3 = MathPow(fA0/f60, f88);
else v3 = f98; v2 = v3;}
f58 = v2; f70 = MathPow(f90, MathSqrt(f58));
if (f28 > 0.0) f18 = f8; else f18 = f8 - f28 * f70;
if (f48 < 0.0) f38 = f8; else f38 = f8 - f48 * f70;
}
}
if (LP2 >30)
{
f30 = MathPow(Kg, f58);
fC0 =(1.0 - f30) * series + f30 * fC0;
fC8 =(series - fC0) * (1.0 - Kg) + Kg * fC8;
fD0 = Pf * fC8 + fC0;
f20 = f30 *(-2.0);
f40 = f30 * f30;
fB0 = f20 + f40 + 1.0;
fA8 =(fD0 - JMA) * fB0 + f40 * fA8;
JMA = JMA + fA8;
}
}
//++++++++++++++++++
if (LP1 <=30)JMA=0.0;

JMA_Buffer[bar]=JMA;

if (bar==1)
{
//+--- <<< ????? ????? >>> SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS+
MEMORY1[00]=fC0;MEMORY1[01]=fC8;MEMORY1[02]=fA8;MEMORY1[03]= s8;MEMORY1[04]=f18;MEMORY1[05]=f38;MEMORY1[06]=s18;MEMORY1[07]=JMA;
MEMORY2[02]=s38;MEMORY2[03]=s48;MEMORY2[04]=s50;MEMORY2[05]=LP1;MEMORY2[06]=LP2;MEMORY2[00]=Time[0];MEMORY2[01]=Time[1];
//+--- SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS+
}
}
//----+  done --------------------------+
return(0);
}

[Post to Twitter] Tweet This Post  [Post to Delicious] Delicious This Post  [Post to Ping.fm] Ping This Post  [Post to StumbleUpon] Stumble This Post 

JMA_CCI.mq4

//+------------------------------------------------------------------+
//|                                                          JMA_CCI.mq4 |
//|                      Copyright ? 2004, MetaQuotes Software Corp. |
//|                                       http://www.metaquotes.net/ |
//+------------------------------------------------------------------+
#property copyright "Copyright ? 2004, scorpion."
#property link      "http://www.fxfisherman.com/"

#property indicator_separate_window
#property indicator_buffers 1
#property indicator_color1 LightSeaGreen
//---- input parameters
extern int CCIPeriod=14;
extern int JMAPhrase=0;
//---- buffers
double CCIBuffer[];
double RelBuffer[];
double DevBuffer[];
double MovBuffer[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
   string short_name;
//---- 3 additional buffers are used for counting.
   IndicatorBuffers(4);
   SetIndexBuffer(1, RelBuffer);
   SetIndexBuffer(2, DevBuffer);
   SetIndexBuffer(3, MovBuffer);
//---- indicator lines
   SetIndexStyle(0,DRAW_LINE);
   SetIndexBuffer(0,CCIBuffer);
//---- name for DataWindow and indicator subwindow label
   short_name="JMA CCI("+CCIPeriod+")";
   IndicatorShortName(short_name);
   SetIndexLabel(0,short_name);
//----
   SetIndexDrawBegin(0,CCIPeriod);
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Commodity Channel Index                                          |
//+------------------------------------------------------------------+
int start()
  {
   int    i,k,counted_bars=IndicatorCounted();
   double price,sum,mul;
   if(Bars<=CCIPeriod) return(0);
//---- initial zero
   if(counted_bars<1)
     {
      for(i=1;i<=CCIPeriod;i++) CCIBuffer[Bars-i]=0.0;
      for(i=1;i<=CCIPeriod;i++) DevBuffer[Bars-i]=0.0;
      for(i=1;i<=CCIPeriod;i++) MovBuffer[Bars-i]=0.0;
     }
//---- last counted bar will be recounted
   int limit=Bars-counted_bars;
   if(counted_bars>0) limit++;
//---- moving average
   for(i=0; i<limit; i++)
      MovBuffer[i]=iCustom(NULL,0,"JMA",CCIPeriod,0,i);
      //MovBuffer[i]=iMA(NULL,0,CCIPeriod,0,MODE_SMA,PRICE_TYPICAL,i);
//---- standard deviations
   i=Bars-CCIPeriod+1;
   if(counted_bars>CCIPeriod-1) i=Bars-counted_bars-1;
   mul=0.015/CCIPeriod;
   while(i>=0)
     {
      sum=0.0;
      k=i+CCIPeriod-1;
      while(k>=i)
       {
         price=(High[k]+Low[k]+Close[k])/3;
         sum+=MathAbs(price-MovBuffer[i]);
         k--;
       }
      DevBuffer[i]=sum*mul;
      i--;
     }
   i=Bars-CCIPeriod+1;
   if(counted_bars>CCIPeriod-1) i=Bars-counted_bars-1;
   while(i>=0)
     {
      price=(High[i]+Low[i]+Close[i])/3;
      RelBuffer[i]=price-MovBuffer[i];
      i--;
     }
//---- cci counting
   i=Bars-CCIPeriod+1;
   if(counted_bars>CCIPeriod-1) i=Bars-counted_bars-1;
   while(i>=0)
     {
      if(DevBuffer[i]==0.0) CCIBuffer[i]=0.0;
      else CCIBuffer[i]=RelBuffer[i]/DevBuffer[i];
      i--;
     }
//----
   return(0);
  }
//+------------------------------------------------------------------+

[Post to Twitter] Tweet This Post  [Post to Delicious] Delicious This Post  [Post to Ping.fm] Ping This Post  [Post to StumbleUpon] Stumble This Post 

JMA1.mq4

//+------------------------------------------------------------------+
//|                                                          JMA.mq4 |
//|                                                           Spiggy |
//|                                                                  |
//+------------------------------------------------------------------+
#property copyright "Spiggy"
#property link      ""

#property indicator_chart_window
#property indicator_buffers 1
#property indicator_color1 White

//---- input parameters
extern int       Len=14;
extern int       phase=0;
extern int       BarCount=300;
//---- buffers
double ExtMapBuffer1[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   SetIndexStyle(0,DRAW_LINE);
   SetIndexBuffer(0,ExtMapBuffer1);
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custor indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----

//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
   int    counted_bars=IndicatorCounted();
//----
// variable definitions
bool firstTime=True;
int AccountedBars=0;
int jj=0;
int ii=0;
int shift=0;
double series=0;

double vv=0;
double v1=0;
double v2=0;
double v3=0;
double v4=0;
double s8=0;
double s10=0;
double s18=0;
double s20=0;
int v5=0;
int v6=0;
double s28=0;
double s30=0;
int s38=0;
int s40=0;
int s48=0;
int s50=0;
int s58=0;
int s60=0;
double s68=0;
double s70=0;
double f8=0;
double f10=0;
double f18=0;
double f20=0;
double f28=0;
double f30=0;
double f38=0;
double f40=0;
double f48=0;
double f50=0;
double f58=0;
double f60=0;
double f68=0;
double f70=0;
double f78=0;
double f80=0;
double f88=0;
double f90=0;
double f98=0;
double fA0=0;
double fA8=0;
double fB0=0;
double fB8=0;
double fC0=0;
double fC8=0;
double fD0=0;
double f0=0;
double fD8=0;
double fE0=0;
double fE8=0;
int fF0=0;
double fF8=0;
int value2=0;
double JMA=0;
double prevtime=0;

double list[127];
double ring1[127];
double ring2[10];
double buffer[61];

ArrayInitialize(list,0);
ArrayInitialize(ring1,0);
ArrayInitialize(ring2,0);
ArrayInitialize(buffer,0);

if (firstTime)
{
  AccountedBars = Bars-BarCount;
  firstTime=False;
}

if ((CurTime()-prevtime)<30)
  return(-1);

prevtime=CurTime();
//SetLoopCount(0);
{
  s28 = 63;
  s30 = 64;
  for ( ii = 1 ; ii <= s28 ; ii++)
  {
    list[ii] = -1000000;
  }
  for ( ii = s30 ; ii <= 127  ; ii++ )
  {
    list[ii] = 1000000;
  }
  f0 = 1;
}

//{--------------------------------------------------------------------}
for ( shift=BarCount ; shift >= 0 ; shift-- )
{
  series=Close[shift];
  if (fF0 < 61)
  {
    fF0= fF0 + 1;
    buffer[fF0] = series;
  }
  //{--------------------------------------------------------------------}
  // { main cycle }
  if (fF0 > 30)
  {
    if (Len < 1.0000000002)
    {
      f80 = 0.0000000001; //{1.0e-10}
    }
    else
    {
      f80 = (Len - 1) / 2.0;
    }

    if (phase < -100)
    {
      f10 = 0.5;
    }
    else
    {
      if (phase > 100)
      {
           f10 = 2.5;
      }
      else
      {
        f10 = phase / 100 + 1.5;
      }
    }

    v1 = MathLog(MathSqrt(f80));
    v2 = v1;
    if (v1 / MathLog(2.0) + 2.0 < 0.0)
    {
      v3 = 0;
    }
    else
    {
      v3 = v2 / MathLog(2.0) + 2.0;
    }
    f98 = v3;

    if (0.5 <= f98 - 2.0)
    {
      f88 = f98 - 2.0;
    }
    else
    {
      f88 = 0.5;
    }

    f78 = MathSqrt(f80) * f98;
    f90 = f78 / (f78 + 1.0);
    f80 = f80 * 0.9;
    f50 = f80 / (f80 + 2.0);

    if (f0 != 0)
    {
      f0 = 0;
      v5 = 0;
      for ( ii = 1 ; ii <=29 ; ii++ )
      {
        if (buffer[ii+1] != buffer[ii])
        {
          v5 = 1.0;
        }
      }

      fD8 = v5*30.0;
      if (fD8 == 0)
      {
        f38 = series;
      }
      else
      {
        f38 = buffer[1];
      }
      f18 = f38;
      if (fD8 > 29)
        fD8 = 29;
    }
    else
      fD8 = 0;

    for ( ii = fD8 ; ii >= 0 ; ii-- )
    { //{ another bigcycle...}
      value2=31-ii;
      if (ii == 0)
      {
        f8 = series;
      }
      else
      {
        f8 = buffer[value2];
      }
      f28 = f8 - f18;
      f48 = f8 - f38;
      if (MathAbs(f28) > MathAbs(f48))
      {
        v2 = MathAbs(f28);
      }
      else
      {
        v2 = MathAbs(f48);
      }
      fA0 = v2;
      vv = fA0 + 0.0000000001; //{1.0e-10;}

      if (s48 <= 1)
      {
        s48 = 127;
      }
      else
      {
        s48 = s48 - 1;
      }
      if (s50 <= 1)
      {
        s50 = 10;
      }
      else
      {
        s50 = s50 - 1;
      }
      if (s70 < 128)
        s70 = s70 + 1;
      s8 = s8 + vv - ring2[s50];
      ring2[s50] = vv;
      if (s70 > 10)
      {
        s20 = s8 / 10;
      }
      else
        s20 = s8 / s70;

      if (s70 > 127)
      {
        s10 = ring1[s48];
        ring1[s48] = s20;
        s68 = 64;
        s58 = s68;
        while (s68 > 1)
        {
          if (list[s58] < s10)
          {
            s68 = s68 *0.5;
            s58 = s58 + s68;
          }
          else
          if (list[s58] <= s10)
          {
            s68 = 1;
          }
          else
          {
            s68 = s68 *0.5;
            s58 = s58 - s68;
          }
        }
      }
      else
      {
        ring1[s48] = s20;
        if (s28 + s30 > 127)
        {
          s30 = s30 - 1;
          s58 = s30;
        }
        else
        {
          s28 = s28 + 1;
          s58 = s28;
        }
        if (s28 > 96)
        {
          s38 = 96;
        }
        else
          s38 = s28;
        if (s30 < 32)
        {
          s40 = 32;
        }
        else
          s40 = s30;
      }

      s68 = 64;
      s60 = s68;
      while (s68 > 1)
      {
        if (list[s60] >= s20)
        {
          if (list[s60 - 1] <= s20)
          {
            s68 = 1;
          }
          else
          {
            s68 = s68 *0.5;
            s60 = s60 - s68;
          }
        }
        else
        {
          s68 = s68 *0.5;
          s60 = s60 + s68;
        }
        if ((s60 == 127) && (s20 > list[127]))
          s60 = 128;
      }

      if (s70 > 127)
      {
        if (s58 >= s60)
        {
          if ((s38 + 1 > s60) && (s40 - 1 < s60))
          {
            s18 = s18 + s20;
          }
          else
          if ((s40 > s60) && (s40 - 1 < s58))
            s18 = s18 + list[s40 - 1];
        }
        else
        if (s40 >= s60)
        {
          if ((s38 + 1 < s60) && (s38 + 1 > s58))
            s18 = s18 + list[s38 + 1];
        }
        else
        if (s38 + 2 > s60)
        {
          s18 = s18 + s20;
        }
        else
        if ((s38 + 1 < s60) && (s38 + 1 > s58))
          s18 = s18 + list[s38 + 1];

        if (s58 > s60)
        {
          if ((s40 - 1 < s58) && (s38 + 1 > s58))
          {
            s18 = s18 - list[s58];
          }
          else
          if ((s38 < s58) && (s38 + 1 > s60))
            s18 = s18 - list[s38];
        }
        else
        {
          if ((s38 + 1 > s58) && (s40 - 1 < s58))
          {
            s18 = s18 - list[s58];
          }
          else
          if ((s40 > s58) && (s40 < s60))
            s18 = s18 - list[s40];
        }
      }

      if (s58 <= s60)
      {
        if (s58 >= s60)
        {
          list[s60] = s20;
        }
        else
        {
          for ( jj = s58 + 1 ; jj <= s60 - 1 ; jj++ )
          {
            list[jj - 1] = list[jj];
          }
          list[s60 - 1] = s20;
        }
      }
      else
      {
        for ( jj = s58 - 1 ; jj >= s60 ; jj-- )
        {
          list[jj + 1] = list[jj];
        }
        list[s60] = s20;
      }

      if (s70 <= 127)
      {
        s18 = 0;
        for (jj = s40 ; jj <= s38 ; jj++)
        {
          s18 = s18 + list[jj];
        }
      }
      f60 = s18 / (s38 - s40 + 1);
      if (fF8 + 1 > 31)
      {
        fF8 = 31;
      }
      else
        fF8 = fF8 + 1;

      if (fF8 <= 30)
      {
        if (f28 > 0)
        {
          f18 = f8;
        }
        else
          f18 = f8 - f28 * f90;
        if (f48 < 0)
        {
          f38 = f8;
        }
        else
          f38 = f8 - f48 * f90;
        fB8 = series;
        //{EasyLanguage does not have "continue" statement}
        if (fF8 != 30)
        {
          continue;
        }
        if (fF8 == 30)
        {
          fC0 = series;
          if (MathCeil(f78) >= 1)
          {
            v4 = MathCeil(f78);
          }
          else
            v4 = 1;
          fE8 = MathCeil(v4);
          if (MathFloor(f78) >= 1)
          {
            v2 = MathFloor(f78);
          }
          else
            v2 = 1;
          fE0 = MathCeil(v2);
          if (fE8 == fE0)
          {
            f68 = 1;
          }
          else
          {
            v4 = fE8 - fE0;
            f68 = (f78 - fE0) / v4;
          }
          if (fE0 <= 29)
          {
            v5 = fE0;
          }
          else
            v5 = 29;
          if (fE8 <= 29)
          {
            v6 = fE8;
          }
          else
            v6 = 29;
          fA8 = (series - buffer[fF0 - v5]) * (1 - f68) / fE0 + (series - buffer[fF0 - v6]) * f68 / fE8;
        }
      }
      else
      {
        if (f98 >= MathPow(fA0/f60, f88))
        {
          v1 = MathPow(fA0/f60, f88);
        }
        else
          v1 = f98;
        if (v1 < 1)
        {
          v2 = 1;
        }
        else
        {
          if (f98 >= MathPow(fA0/f60, f88))
          {
            v3 = MathPow(fA0/f60, f88);
          }
          else
            v3 = f98;
          v2 = v3;
        }
        f58 = v2;
        f70 = MathPow(f90, MathSqrt(f58));
        if (f28 > 0)
        {
          f18 = f8;
        }
        else
        {
          f18 = f8 - f28 * f70;
        }
        if (f48 < 0)
        {
          f38 = f8;
        }
        else
        {
          f38 = f8 - f48 * f70;
        }
      }
    }

    if (fF8 > 30)
    {
      f30 = MathPow(f50, f58);
      fC0 = (1 - f30) * series + f30 * fC0;
      fC8 = (series - fC0) * (1 - f50) + f50 * fC8;
      fD0 = f10 * fC8 + fC0;
      f20 = -f30 * 2;
      f40 = f30 * f30;
      fB0 = f20 + f40 + 1;
      fA8 = (fD0 - fB8) * fB0 + f40 * fA8;
      fB8 = fB8 + fA8;
    }
    JMA= fB8;
  }
  if (fF0 <= 30)
  {
    JMA=0;
  }

  Print ("JMA is " + JMA + " shift is " + shift);
  ExtMapBuffer1[shift]=JMA;

  if (shift>0)
  {
    AccountedBars=AccountedBars+1;
  }
}
//----
   return(0);
  }
//+------------------------------------------------------------------+

[Post to Twitter] Tweet This Post  [Post to Delicious] Delicious This Post  [Post to Ping.fm] Ping This Post  [Post to StumbleUpon] Stumble This Post 

JMA.mq4

//+------------------------------------------------------------------+
//|                                                          JMA.mq4 |
//|                                                           Spiggy |
//|                                                                  |
//+------------------------------------------------------------------+
#property copyright "Spiggy"
#property link      ""

#property indicator_chart_window
#property indicator_buffers 1
#property indicator_color1 White

//---- input parameters
extern int       Len=14;
extern int       phase=0;
extern int       BarCount=300;
//---- buffers
double ExtMapBuffer1[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   SetIndexStyle(0,DRAW_LINE);
   SetIndexBuffer(0,ExtMapBuffer1);
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custor indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----

//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
   int    counted_bars=IndicatorCounted();
//----
// variable definitions
bool firstTime=True;
int AccountedBars=0;
int jj=0;
int ii=0;
int shift=0;
double series=0;

double vv=0;
double v1=0;
double v2=0;
double v3=0;
double v4=0;
double s8=0;
double s10=0;
double s18=0;
double s20=0;
int v5=0;
int v6=0;
double s28=0;
double s30=0;
int s38=0;
int s40=0;
int s48=0;
int s50=0;
int s58=0;
int s60=0;
double s68=0;
double s70=0;
double f8=0;
double f10=0;
double f18=0;
double f20=0;
double f28=0;
double f30=0;
double f38=0;
double f40=0;
double f48=0;
double f50=0;
double f58=0;
double f60=0;
double f68=0;
double f70=0;
double f78=0;
double f80=0;
double f88=0;
double f90=0;
double f98=0;
double fA0=0;
double fA8=0;
double fB0=0;
double fB8=0;
double fC0=0;
double fC8=0;
double fD0=0;
double f0=0;
double fD8=0;
double fE0=0;
double fE8=0;
int fF0=0;
double fF8=0;
int value2=0;
double JMA=0;
double prevtime=0;

double list[127];
double ring1[127];
double ring2[10];
double buffer[61];

ArrayInitialize(list,0);
ArrayInitialize(ring1,0);
ArrayInitialize(ring2,0);
ArrayInitialize(buffer,0);

if (firstTime)
{
  AccountedBars = Bars-BarCount;
  firstTime=False;
}

if ((CurTime()-prevtime)<30)
  return(-1);

prevtime=CurTime();
//SetLoopCount(0);
{
  s28 = 63;
  s30 = 64;
  for ( ii = 1 ; ii <= s28 ; ii++)
  {
    list[ii] = -1000000;
  }
  for ( ii = s30 ; ii <= 127  ; ii++ )
  {
    list[ii] = 1000000;
  }
  f0 = 1;
}

//{--------------------------------------------------------------------}
for ( shift=BarCount ; shift >= 0 ; shift-- )
{
  series=Close[shift];
  if (fF0 < 61)
  {
    fF0= fF0 + 1;
    buffer[fF0] = series;
  }
  //{--------------------------------------------------------------------}
  // { main cycle }
  if (fF0 > 30)
  {
    if (Len < 1.0000000002)
    {
      f80 = 0.0000000001; //{1.0e-10}
    }
    else
    {
      f80 = (Len - 1) / 2.0;
    }

    if (phase < -100)
    {
      f10 = 0.5;
    }
    else
    {
      if (phase > 100)
      {
           f10 = 2.5;
      }
      else
      {
        f10 = phase / 100 + 1.5;
      }
    }

    v1 = MathLog(MathSqrt(f80));
    v2 = v1;
    if (v1 / MathLog(2.0) + 2.0 < 0.0)
    {
      v3 = 0;
    }
    else
    {
      v3 = v2 / MathLog(2.0) + 2.0;
    }
    f98 = v3;

    if (0.5 <= f98 - 2.0)
    {
      f88 = f98 - 2.0;
    }
    else
    {
      f88 = 0.5;
    }

    f78 = MathSqrt(f80) * f98;
    f90 = f78 / (f78 + 1.0);
    f80 = f80 * 0.9;
    f50 = f80 / (f80 + 2.0);

    if (f0 != 0)
    {
      f0 = 0;
      v5 = 0;
      for ( ii = 1 ; ii <=29 ; ii++ )
      {
        if (buffer[ii+1] != buffer[ii])
        {
          v5 = 1.0;
        }
      }

      fD8 = v5*30.0;
      if (fD8 == 0)
      {
        f38 = series;
      }
      else
      {
        f38 = buffer[1];
      }
      f18 = f38;
      if (fD8 > 29)
        fD8 = 29;
    }
    else
      fD8 = 0;

    for ( ii = fD8 ; ii >= 0 ; ii-- )
    { //{ another bigcycle...}
      value2=31-ii;
      if (ii == 0)
      {
        f8 = series;
      }
      else
      {
        f8 = buffer[value2];
      }
      f28 = f8 - f18;
      f48 = f8 - f38;
      if (MathAbs(f28) > MathAbs(f48))
      {
        v2 = MathAbs(f28);
      }
      else
      {
        v2 = MathAbs(f48);
      }
      fA0 = v2;
      vv = fA0 + 0.0000000001; //{1.0e-10;}

      if (s48 <= 1)
      {
        s48 = 127;
      }
      else
      {
        s48 = s48 - 1;
      }
      if (s50 <= 1)
      {
        s50 = 10;
      }
      else
      {
        s50 = s50 - 1;
      }
      if (s70 < 128)
        s70 = s70 + 1;
      s8 = s8 + vv - ring2[s50];
      ring2[s50] = vv;
      if (s70 > 10)
      {
        s20 = s8 / 10;
      }
      else
        s20 = s8 / s70;

      if (s70 > 127)
      {
        s10 = ring1[s48];
        ring1[s48] = s20;
        s68 = 64;
        s58 = s68;
        while (s68 > 1)
        {
          if (list[s58] < s10)
          {
            s68 = s68 *0.5;
            s58 = s58 + s68;
          }
          else
          if (list[s58] <= s10)
          {
            s68 = 1;
          }
          else
          {
            s68 = s68 *0.5;
            s58 = s58 - s68;
          }
        }
      }
      else
      {
        ring1[s48] = s20;
        if (s28 + s30 > 127)
        {
          s30 = s30 - 1;
          s58 = s30;
        }
        else
        {
          s28 = s28 + 1;
          s58 = s28;
        }
        if (s28 > 96)
        {
          s38 = 96;
        }
        else
          s38 = s28;
        if (s30 < 32)
        {
          s40 = 32;
        }
        else
          s40 = s30;
      }

      s68 = 64;
      s60 = s68;
      while (s68 > 1)
      {
        if (list[s60] >= s20)
        {
          if (list[s60 - 1] <= s20)
          {
            s68 = 1;
          }
          else
          {
            s68 = s68 *0.5;
            s60 = s60 - s68;
          }
        }
        else
        {
          s68 = s68 *0.5;
          s60 = s60 + s68;
        }
        if ((s60 == 127) && (s20 > list[127]))
          s60 = 128;
      }

      if (s70 > 127)
      {
        if (s58 >= s60)
        {
          if ((s38 + 1 > s60) && (s40 - 1 < s60))
          {
            s18 = s18 + s20;
          }
          else
          if ((s40 > s60) && (s40 - 1 < s58))
            s18 = s18 + list[s40 - 1];
        }
        else
        if (s40 >= s60)
        {
          if ((s38 + 1 < s60) && (s38 + 1 > s58))
            s18 = s18 + list[s38 + 1];
        }
        else
        if (s38 + 2 > s60)
        {
          s18 = s18 + s20;
        }
        else
        if ((s38 + 1 < s60) && (s38 + 1 > s58))
          s18 = s18 + list[s38 + 1];

        if (s58 > s60)
        {
          if ((s40 - 1 < s58) && (s38 + 1 > s58))
          {
            s18 = s18 - list[s58];
          }
          else
          if ((s38 < s58) && (s38 + 1 > s60))
            s18 = s18 - list[s38];
        }
        else
        {
          if ((s38 + 1 > s58) && (s40 - 1 < s58))
          {
            s18 = s18 - list[s58];
          }
          else
          if ((s40 > s58) && (s40 < s60))
            s18 = s18 - list[s40];
        }
      }

      if (s58 <= s60)
      {
        if (s58 >= s60)
        {
          list[s60] = s20;
        }
        else
        {
          for ( jj = s58 + 1 ; jj <= s60 - 1 ; jj++ )
          {
            list[jj - 1] = list[jj];
          }
          list[s60 - 1] = s20;
        }
      }
      else
      {
        for ( jj = s58 - 1 ; jj >= s60 ; jj-- )
        {
          list[jj + 1] = list[jj];
        }
        list[s60] = s20;
      }

      if (s70 <= 127)
      {
        s18 = 0;
        for (jj = s40 ; jj <= s38 ; jj++)
        {
          s18 = s18 + list[jj];
        }
      }
      f60 = s18 / (s38 - s40 + 1);
      if (fF8 + 1 > 31)
      {
        fF8 = 31;
      }
      else
        fF8 = fF8 + 1;

      if (fF8 <= 30)
      {
        if (f28 > 0)
        {
          f18 = f8;
        }
        else
          f18 = f8 - f28 * f90;
        if (f48 < 0)
        {
          f38 = f8;
        }
        else
          f38 = f8 - f48 * f90;
        fB8 = series;
        //{EasyLanguage does not have "continue" statement}
        if (fF8 != 30)
        {
          continue;
        }
        if (fF8 == 30)
        {
          fC0 = series;
          if (MathCeil(f78) >= 1)
          {
            v4 = MathCeil(f78);
          }
          else
            v4 = 1;
          fE8 = MathCeil(v4);
          if (MathFloor(f78) >= 1)
          {
            v2 = MathFloor(f78);
          }
          else
            v2 = 1;
          fE0 = MathCeil(v2);
          if (fE8 == fE0)
          {
            f68 = 1;
          }
          else
          {
            v4 = fE8 - fE0;
            f68 = (f78 - fE0) / v4;
          }
          if (fE0 <= 29)
          {
            v5 = fE0;
          }
          else
            v5 = 29;
          if (fE8 <= 29)
          {
            v6 = fE8;
          }
          else
            v6 = 29;
          fA8 = (series - buffer[fF0 - v5]) * (1 - f68) / fE0 + (series - buffer[fF0 - v6]) * f68 / fE8;
        }
      }
      else
      {
        if (f98 >= MathPow(fA0/f60, f88))
        {
          v1 = MathPow(fA0/f60, f88);
        }
        else
          v1 = f98;
        if (v1 < 1)
        {
          v2 = 1;
        }
        else
        {
          if (f98 >= MathPow(fA0/f60, f88))
          {
            v3 = MathPow(fA0/f60, f88);
          }
          else
            v3 = f98;
          v2 = v3;
        }
        f58 = v2;
        f70 = MathPow(f90, MathSqrt(f58));
        if (f28 > 0)
        {
          f18 = f8;
        }
        else
        {
          f18 = f8 - f28 * f70;
        }
        if (f48 < 0)
        {
          f38 = f8;
        }
        else
        {
          f38 = f8 - f48 * f70;
        }
      }
    }

    if (fF8 > 30)
    {
      f30 = MathPow(f50, f58);
      fC0 = (1 - f30) * series + f30 * fC0;
      fC8 = (series - fC0) * (1 - f50) + f50 * fC8;
      fD0 = f10 * fC8 + fC0;
      f20 = -f30 * 2;
      f40 = f30 * f30;
      fB0 = f20 + f40 + 1;
      fA8 = (fD0 - fB8) * fB0 + f40 * fA8;
      fB8 = fB8 + fA8;
    }
    JMA= fB8;
  }
  if (fF0 <= 30)
  {
    JMA=0;
  }

//Print ("JMA is " + JMA + " shift is " + shift);
  ExtMapBuffer1[shift]=JMA;

  if (shift>0)
  {
    AccountedBars=AccountedBars+1;
  }
}
//----
   return(0);
  }
//+------------------------------------------------------------------+

[Post to Twitter] Tweet This Post  [Post to Delicious] Delicious This Post  [Post to Ping.fm] Ping This Post  [Post to StumbleUpon] Stumble This Post 

JMA!.mq4

//+------------------------------------------------------------------+
//|                                                          JMA.mq4 |
//|                                             Weld, Jurik Research |
//|                                          http://weld.torguem.net |
//+------------------------------------------------------------------+
#property copyright "Weld"
#property link      "http://weld.torguem.net"
//I'm just intresting in 11 JMA and 8 JMA on 15M charts. No trading
//activity just alert.

#property indicator_chart_window
#property indicator_buffers 1
#property indicator_color1 Aqua
//---- input parameters
extern int       Length = 14;
extern int       Phase  = 0;
//---- buffers
double JMAValueBuffer [];
double fC0Buffer [];
double fA8Buffer [];
double fC8Buffer [];
//---- temporary buffers
double list[128], ring1[128], ring2[11], buffer[62];
//---- bool flag
bool   initFlag;
//---- integer vars
int    limitValue, startValue, loopParam, loopCriteria;
int    cycleLimit, highLimit, counterA, counterB;
//---- double vars
double cycleDelta, lowDValue, highDValue, absValue, paramA, paramB;
double phaseParam, logParam, JMAValue, series, sValue, sqrtParam,
lengthDivider;
//---- temporary int variables
int   s58, s60, s40, s38, s68;
//+------------------------------------------------------------------+
//| JMA initFlagization function                                     |
//+------------------------------------------------------------------+
int init()
  {
   double   lengthParam;
//---- 3 additional buffers are used for counting.
   IndicatorBuffers(4);
//---- drawing settings
   SetIndexStyle  (0, DRAW_LINE);
   SetIndexDrawBegin(0, 30);
//---- 4 indicator buffers mapping
   SetIndexBuffer (0, JMAValueBuffer);
   SetIndexBuffer (1, fC0Buffer);
   SetIndexBuffer (2, fA8Buffer);
   SetIndexBuffer (3, fC8Buffer);
//---- initialize one buffer (neccessary)
   ArrayInitialize (ring2, 0);
   ArrayInitialize (ring1, 0);
   ArrayInitialize (buffer, 0);
//---- name for DataWindow and indicator subwindow label
   IndicatorShortName ("JMAValue(" + Length + "," + Phase + ")");
   SetIndexLabel (0, "JMAValue");
//---- initial part
   limitValue = 63;
   startValue = 64;
//----
   for (int i = 0; i <= limitValue; i++) list [i] = -1000000;
   for (i = startValue; i <= 127; i++)   list [i] = 1000000;
//----
   initFlag  = true;
   if (Length < 1.0000000002) lengthParam = 0.0000000001;
   else lengthParam = (Length - 1) / 2.0;
//----
   if (Phase < -100) phaseParam = 0.5;
   else if (Phase > 100) phaseParam = 2.5;
   else phaseParam = Phase / 100.0 + 1.5;
//----
   logParam = MathLog (MathSqrt (lengthParam)) / MathLog (2.0);
//----
   if (logParam + 2.0 < 0) logParam = 0;
   else logParam = logParam + 2.0;
//----
   sqrtParam     = MathSqrt(lengthParam) * logParam;
   lengthParam   = lengthParam * 0.9;
   lengthDivider = lengthParam / (lengthParam + 2.0);
//----
   return;
}
//+------------------------------------------------------------------+
//| JMA iteration function                                           |
//+------------------------------------------------------------------+
int start()
  {

//---- get already counted bars
   int counted_bars = IndicatorCounted();
//---- check for possible errors
   if (counted_bars < 0) return (-1);
   int limit = Bars - counted_bars - 1;
//---- main cycle
   for (int shift = limit; shift >= 0; shift--) {
      series = Close [shift];

      if (loopParam < 61) {
         loopParam++;
         buffer [loopParam] = series;
      }
      if (loopParam > 30) {
         if (initFlag) {
            initFlag = false;

            int diffFlag = 0;
            for (int i = 1; i <= 29; i++) {
               if (buffer [i + 1] != buffer [i]) diffFlag = 1;
            }
            highLimit = diffFlag * 30;

            if (highLimit == 0) paramB = series;
            else paramB = buffer[1];

            paramA = paramB;
            if (highLimit > 29) highLimit = 29;
         } else
            highLimit = 0;
//---- big cycle
         for (i = highLimit; i >= 0; i--) {
			   if (i == 0) sValue = series; else sValue =
buffer [31 - i];

			   if (MathAbs (sValue - paramA) > MathAbs
(sValue - paramB)) absValue = MathAbs(sValue - paramA); else absValue
= MathAbs(sValue - paramB);
			   double dValue = absValue +
0.0000000001; //1.0e-10;

			   if (counterA <= 1) counterA = 127; else
counterA--;
			   if (counterB <= 1) counterB = 10;  else
counterB--;
			   if (cycleLimit < 128) cycleLimit++;
			   cycleDelta += (dValue - ring2 [counterB]);
			   ring2 [counterB] = dValue;
			   if (cycleLimit > 10) highDValue =
cycleDelta / 10.0; else highDValue = cycleDelta / cycleLimit;

			   if (cycleLimit > 127) {
				   dValue = ring1 [counterA];
				   ring1 [counterA] = highDValue;
				   s68 = 64; s58 = s68;
				   while (s68 > 1) {
					   if (list [s58] < dValue) {
						   s68 = s68 / 2.0;
						   s58 += s68;
					   } else
					   if (list [s58] <= dValue)
{
						   s68 = 1;
					   } else {
						   s68 = s68 / 2.0;
						   s58 -= s68;
					   }
               }
            } else {
			      ring1 [counterA] = highDValue;
			      if ((limitValue + startValue) > 127) {
				      startValue--;
				      s58 = startValue;
			      } else {
				      limitValue++;
				      s58 = limitValue;
			      }
			      if (limitValue > 96) s38 = 96; else s38
= limitValue;
			      if (startValue < 32) s40 = 32; else s40
= startValue;
		      }
//----
		      s68 = 64;
		      s60 = s68;
		      while (s68 > 1) {
			      if (list [s60] >= highDValue) {
				      if (list [s60 - 1] <= highDValue) {
					      s68 = 1;
				      }
				      else {
					      s68 = s68 / 2.0;
					      s60 -= s68;
				      }
			      }
			      else {
				      s68 = s68 / 2.0;
				      s60 += s68;
			      }
			      if ((s60 == 127) && (highDValue > list[127])) s60 = 128;
		      }
			   if (cycleLimit > 127) {
				   if (s58 >= s60) {
					   if (((s38 + 1) > s60) && ((s40 - 1) < s60))
						    lowDValue += highDValue;
					   else if ((s40 > s60) && ((s40 - 1) < s58))
						    lowDValue += list [s40 - 1];
				   }
				   else if (s40 >= s60) {
				   if (((s38 + 1) < s60) && ((s38 + 1) > s58))
							    lowDValue += list[s38 + 1];
					}
				   else if ((s38 + 2) > s60)
						   lowDValue += highDValue;
				   else if (((s38 + 1) < s60) && ((s38 + 1) > s58))
						   lowDValue += list[s38 + 1];

				   if (s58 > s60) {
					   if (((s40 - 1) < s58) && ((s38 + 1) > s58))
						   lowDValue -= list [s58];
					   else if ((s38 < s58) && ((s38 + 1) > s60))
						   lowDValue -= list[s38];
				   }
				   else {
					   if (((s38 + 1) > s58) && ((s40 - 1) < s58))
						   lowDValue -= list [s58];
					   else if ((s40 > s58) && (s40 < s60))
						   lowDValue -= list [s40];
				   }
			   }
			   if (s58 <= s60) {
				   if (s58 >= s60) list[s60] = highDValue; else {
					   for (int j = s58 + 1; j <= (s60 - 1); j++) {
						   list [j - 1] = list[j];
					   }
					   list [s60 - 1] = highDValue;
				   }
			   } else {
				   for (j = s58 - 1; j >= s60; j--) {
					   list [j + 1] = list [j];
				   }
				   list [s60] = highDValue;
			   }

			   if (cycleLimit <= 127) {
				   lowDValue = 0;
				   for (j = s40; j <= s38; j++) {
					   lowDValue += list[j];
				   }
			   }
//----
			   if ((loopCriteria + 1) > 31) loopCriteria = 31; else loopCriteria++;
			   double JMATempValue, sqrtDivider = sqrtParam / (sqrtParam + 1.0);

			   if (loopCriteria <= 30) {
				   if (sValue - paramA > 0) paramA = sValue; else paramA = sValue - (sValue - paramA) * sqrtDivider;
				   if (sValue - paramB < 0) paramB = sValue; else paramB = sValue - (sValue - paramB) * sqrtDivider;
				   JMATempValue = series;

				   if (loopCriteria == 30) {
				     fC0Buffer [shift] = series;
				     int intPart;

				     if (MathCeil(sqrtParam) >= 1) intPart = MathCeil(sqrtParam); else intPart = 1;
				     int leftInt = IntPortion (intPart);
				     if (MathFloor(sqrtParam) >= 1) intPart = MathFloor(sqrtParam); else intPart = 1;
				     int rightPart = IntPortion (intPart);

				     if (leftInt == rightPart) dValue = 1.0;
				     else
					     dValue = (sqrtParam - rightPart) / (leftInt - rightPart);

				     if (rightPart <= 29) int upShift = rightPart; else upShift = 29;
				     if (leftInt <= 29) int dnShift = leftInt; else dnShift = 29;
				     fA8Buffer [shift] = (series - buffer [loopParam - upShift]) * (1 - dValue) / rightPart + (series - buffer[loopParam - dnShift]) * dValue / leftInt;
               }
			   } else {
			      double powerValue, squareValue;

			      dValue = lowDValue / (s38 - s40 + 1);
			      if (0.5 <= logParam - 2.0) powerValue = logParam - 2.0;
               else powerValue = 0.5;

				   if (logParam >= MathPow(absValue/dValue, powerValue)) dValue = MathPow (absValue/dValue, powerValue); else dValue = logParam;
				   if (dValue < 1) dValue = 1;

				   powerValue = MathPow (sqrtDivider, MathSqrt (dValue));
				   if (sValue - paramA > 0) paramA = sValue; else paramA = sValue - (sValue - paramA) * powerValue;
				   if (sValue - paramB < 0) paramB = sValue; else paramB = sValue - (sValue - paramB) * powerValue;
   		   }
         }
// ---- end of big cycle
         if (loopCriteria > 30) {
				JMATempValue = JMAValueBuffer [shift
+ 1];
            powerValue   = MathPow (lengthDivider, dValue);
            squareValue  = MathPow (powerValue, 2);

				fC0Buffer [shift] = (1 - powerValue) * series + powerValue * fC0Buffer [shift + 1];
            fC8Buffer [shift] = (series - fC0Buffer [shift]) * (1 - lengthDivider) + lengthDivider * fC8Buffer [shift + 1];

            fA8Buffer [shift] = (phaseParam * fC8Buffer [shift] + fC0Buffer [shift] - JMATempValue) *
                                 (powerValue * (-2.0) + squareValue + 1) + squareValue * fA8Buffer [shift + 1];
            JMATempValue += fA8Buffer [shift];
         }
         JMAValue = JMATempValue;
      }
      if (loopParam <= 30) JMAValue = 0;
      JMAValueBuffer [shift] = JMAValue;
//---- End of main cycle
   }
   return;
}

//+------------------------------------------------------------------+
int IntPortion (double param) {
   if (param > 0) return (MathFloor (param));
   if (param < 0) return (MathCeil (param));
   return (0.0);
}
//+------------------------------------------------------------------+

[Post to Twitter] Tweet This Post  [Post to Delicious] Delicious This Post  [Post to Ping.fm] Ping This Post  [Post to StumbleUpon] Stumble This Post 

JMA RSX.mq4

#property copyright "strategybuilderfx.com"
#property link "finger"
#property indicator_separate_window
#property indicator_buffers 1
#property indicator_color1 Magenta
#property indicator_level1 70
#property indicator_level2 30
#property indicator_level3 50
#property indicator_maximum 100
#property indicator_minimum 0

//---- input parameters
extern int Len=14; //---- buffers
double rsx[];
double f88, f90;
double f0, v4, v8, vC, v10, v14, v18, v20;
double f8, f10, f18, f20, f28, f30, f38, f48, v1C;
double f50, f58, f60, f68, f70, f78, f80, f40;

int init() {
SetIndexStyle(0,DRAW_LINE);
SetIndexBuffer(0,rsx);
IndicatorShortName("rsxc("+Len+")");
return(0);
}

int deinit()
{
return(0);
}

int start()
{
int counted_bars=IndicatorCounted(),limit,shift;

if (counted_bars<0) return(-1);
if (counted_bars>0) counted_bars--;
limit=Bars-Len-1;
if(counted_bars>Len) limit=Bars-counted_bars-1;

for (shift=limit;shift>=0;shift--) {
if (f90 == 0.0) {
f90 = 1.0;
f0 = 0.0;
if (Len-1 >= 5) f88 = Len-1.0; else f88 = 5.0;
f8 = 100.0*(Close[shift]);
f18 = 3.0 / (Len + 2.0);
f20 = 1.0 - f18;
} else{
if (f88 <= f90) f90 = f88 + 1;
else
f90 = f90 + 1;
f10 = f8;
f8 = 100*Close[shift];
v8 = f8 - f10;
f28 = f20 * f28 + f18 * v8;
f30 = f18 * f28 + f20 * f30;
vC = f28 * 1.5 - f30 * 0.5;
f38 = f20 * f38 + f18 * vC;
f40 = f18 * f38 + f20 * f40;
v10 = f38 * 1.5 - f40 * 0.5;
f48 = f20 * f48 + f18 * v10;
f50 = f18 * f48 + f20 * f50;
v14 = f48 * 1.5 - f50 * 0.5;
f58 = f20 * f58 + f18 * MathAbs(v8);
f60 = f18 * f58 + f20 * f60;
v18 = f58 * 1.5 - f60 * 0.5;
f68 = f20 * f68 + f18 * v18;

f70 = f18 * f68 + f20 * f70;
v1C = f68 * 1.5 - f70 * 0.5;
f78 = f20 * f78 + f18 * v1C;
f80 = f18 * f78 + f20 * f80;
v20 = f78 * 1.5 - f80 * 0.5;

if ((f88 >= f90) && (f8 != f10)) f0 = 1.0;
if ((f88 == f90) && (f0 == 0.0)) f90 = 0.0;

}

if ((f88 < f90) && (v20 > 0.0000000001)) {

v4 = (v14 / v20 + 1.0) * 50.0;
if (v4 > 100.0) v4 = 100.0;
if (v4 < 0.0) v4 = 0.0;

} else {
v4 = 50.0;
}
rsx[shift]=v4;
}
return(0);
}

[Post to Twitter] Tweet This Post  [Post to Delicious] Delicious This Post  [Post to Ping.fm] Ping This Post  [Post to StumbleUpon] Stumble This Post 

 Page 1 of 2  1  2 »

Tweet This Post links powered by Tweet This v1.3.9, a WordPress plugin for Twitter.