StochasticExpansion_v1_1

Author: Copyright � 2010, Ivan Kornilov. All rights reserved.
Indicators Used
Moving average indicator
Miscellaneous
Implements a curve of type %1
0 Views
0 Downloads
0 Favorites
StochasticExpansion_v1_1
//+------------------------------------------------------------------+
//|                                   Copyright © 2010, Ivan Kornilov|
//|                                      StochasticExpansion_v1.1.mq4|
//+------------------------------------------------------------------+
#property copyright "Copyright © 2010, Ivan Kornilov. All rights reserved."
#property link "excelf@gmail.com"

#property indicator_separate_window
#property indicator_buffers 2
#property indicator_color1 SteelBlue
#property indicator_color2 OrangeRed

#property indicator_level1 5
#property indicator_level2 -5
#property indicator_level3 10
#property indicator_level4 10
#property indicator_level5 0

extern int KPeriod1 = 13;
extern int Slowing1 = 6;
extern int NoiseFilter=6;

double blue[];
double red[];
double HighesBuffer1[];
double LowesBuffer1[];

double KLineBuffer1[];
double KLineBuffer2[];
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int init()
  {
   IndicatorBuffers(6);
   SetIndexBuffer(0,blue);
   SetIndexBuffer(1,red);

//SetIndexStyle(0, DRAW_HISTOGRAM);SetIndexStyle(1, DRAW_HISTOGRAM);

   SetIndexBuffer(2,HighesBuffer1);
   SetIndexBuffer(3,LowesBuffer1);

   SetIndexBuffer(4,KLineBuffer1);
   SetIndexBuffer(5,KLineBuffer2);
   IndicatorShortName("StochasticExpansion_v1.1("+KPeriod1+","+Slowing1+")");
   return(0);
  }
int limit;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int start()
  {
   int counted_bars=IndicatorCounted();
   if(counted_bars<0) return(-1);
   if(counted_bars>0) counted_bars--;
   limit=Bars-counted_bars;
   if(counted_bars==0) limit-=1+1+Slowing1;

   minimumsCounting(LowesBuffer1,KPeriod1);
   maximumsCounting(HighesBuffer1,KPeriod1);
   KLine(KLineBuffer1,KLineBuffer2,HighesBuffer1,LowesBuffer1,Slowing1);

   for(int i=limit; i>=0; i--)
     {
      double value=iMAOnArray(KLineBuffer1,Bars,NoiseFilter,0,0,i);
      if(
         value<KLineBuffer1[i]
         )
        {
         blue[i]= KLineBuffer1[i];
         red[i] = EMPTY_VALUE;
         blue[i+1]=KLineBuffer1[i+1];

           } else {
         blue[i]= EMPTY_VALUE;
         red[i] = KLineBuffer1[i];
         red[i+1]=KLineBuffer1[i+1];

        }
     }
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void minimumsCounting(double &LowesBuffer[],int KPeriod)
  {
   for(int i=limit; i>=0; i--)
     {
      LowesBuffer[i]=Low[iLowest(NULL,0,MODE_LOW,KPeriod,i)];
     }
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void maximumsCounting(double &HighesBuffer[],int KPeriod)
  {
   for(int i=limit; i>=0; i--)
     {
      HighesBuffer[i]=High[iHighest(NULL,0,MODE_HIGH,KPeriod,i)];
     }
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void KLine(double &KLineBuffer1[],double &KLineBuffer2[],double HighesBuffer[],double LowesBuffer[],int Slowing)
  {
   for(int i=limit; i>=0; i--)
     {
      double sumlow=0;
      double sumhigh=0;
      for(int k=i+Slowing-1; k>=i; k--)
        {
         sumlow+=Close[k]-LowesBuffer[k];
         sumhigh+=HighesBuffer[k]-Close[k];
        }

      if(sumhigh==0.0)
        {
         KLineBuffer1[i]=0;
           } else {
         KLineBuffer1[i]=sumlow/sumhigh;
        }

      if(sumlow==0.0)
        {
         KLineBuffer2[i]=0;
           } else {
         KLineBuffer2[i]=-sumhigh/sumlow;
        }

      KLineBuffer1[i]=KLineBuffer1[i]+KLineBuffer2[i];
     }
   return(0);
  }
//+------------------------------------------------------------------+

Comments

Markdown supported. Formatting help

Markdown Formatting Guide

Element Markdown Syntax
Heading # H1
## H2
### H3
Bold **bold text**
Italic *italicized text*
Link [title](https://www.example.com)
Image ![alt text](image.jpg)
Code `code`
Code Block ```
code block
```
Quote > blockquote
Unordered List - Item 1
- Item 2
Ordered List 1. First item
2. Second item
Horizontal Rule ---