Indicators Used
Miscellaneous
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 Formatting Guide
# H1
## H2
### H3
**bold text**
*italicized text*
[title](https://www.example.com)

`code`
```
code block
```
> blockquote
- Item 1
- Item 2
1. First item
2. Second item
---