Indicators Used
Miscellaneous
0
Views
0
Downloads
0
Favorites
SMI_Correct
//+------------------------------------------------------------------+
//| SMI_Correct.mq4 |
//| re-write by transport_david |
//| |
//+------------------------------------------------------------------+
#property copyright ""
#property link ""
#property indicator_separate_window
#property indicator_buffers 2
#property indicator_color1 Red
#property indicator_color2 White
#property indicator_maximum 100
#property indicator_minimum -100
#property indicator_level1 50
#property indicator_level2 0
#property indicator_level3 -50
//---- input parameters
// MetaStock uses H/L (13) , 1st EMA(25) , 2nd EMA(2) , no signal line
// fmlabs does not recommend any settings
extern int Period_Q = 13; // HH LL
extern int Period_R = 25; // 1st EMA
extern int Period_S = 2; // 2nd EMA
extern int Signal = 5; // Signal EMA
extern int ShowBars = 1000;
//---- buffers
double SMI_Buffer[];
double Signal_Buffer[];
double SM_Buffer[];
double EMA_SM[];
double EMA2_SM[];
double EMA_HQ[];
double EMA2_HQ[];
double HQ_Buffer[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
//---- indicators
IndicatorBuffers(8);
SetIndexEmptyValue(0,0.0);
SetIndexStyle(0,DRAW_LINE);
SetIndexBuffer(0,Signal_Buffer);
SetIndexLabel(0,"Signal SMI");
SetIndexEmptyValue(1,0.0);
SetIndexStyle(1,DRAW_LINE);
SetIndexBuffer(1,SMI_Buffer);
SetIndexLabel(1,"SMI");
SetIndexEmptyValue(2,0.0);
SetIndexBuffer(2,SM_Buffer);
SetIndexStyle(2,DRAW_NONE);
SetIndexEmptyValue(3,0.0);
SetIndexBuffer(3,EMA_SM);
SetIndexStyle(3,DRAW_NONE);
SetIndexEmptyValue(4,0.0);
SetIndexBuffer(4,EMA2_SM);
SetIndexStyle(4,DRAW_NONE);
SetIndexEmptyValue(5,0.0);
SetIndexBuffer(5,EMA_HQ);
SetIndexStyle(5,DRAW_NONE);
SetIndexEmptyValue(6,0.0);
SetIndexBuffer(6,EMA2_HQ);
SetIndexStyle(6,DRAW_NONE);
SetIndexEmptyValue(7,0.0);
SetIndexBuffer(7,HQ_Buffer);
SetIndexStyle(7,DRAW_NONE);
IndicatorShortName("SMI_Correct("+Period_Q+","+Period_R+","+Period_S+","+Signal+")");
//----
return(0);
}
//+------------------------------------------------------------------+
//| Custor indicator deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//---- TODO: add your code here
//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int start()
{
int limit;
int i;
limit=ShowBars;
if (limit >= Bars - 1) limit = Bars - 1;
for (i=limit;i>=0;i--)
{ // found at http://www.fmlabs.com/reference/default.htm?url=SMI.htm
// highesthigh - lowestlow
SM_Buffer[i]=Close[i]-((High[iHighest(Symbol(),0,MODE_HIGH,Period_Q,i)]+Low[iLowest(Symbol(),0,MODE_LOW,Period_Q,i)])/2); // SM_Buffer = Close - -------------------------
// 2
HQ_Buffer[i]=High[iHighest(Symbol(),0,MODE_HIGH,Period_Q,i)]-Low[iLowest(Symbol(),0,MODE_LOW,Period_Q,i)]; // HQ_Buffer = highesthigh - lowestlow
}
for (i=limit-Period_R;i>=0;i--)
{
EMA_SM[i]=iMAOnArray(SM_Buffer,0,Period_R,0,MODE_EMA,i); // EMA_SM = EMA(SM_Buffer)
EMA_HQ[i]=iMAOnArray(HQ_Buffer,0,Period_R,0,MODE_EMA,i); // EMA_HQ = EMA(HQ_Buffer)
}
for (i=limit-Period_R-Period_S;i>=0;i--)
{
EMA2_SM[i]=iMAOnArray(EMA_SM,0,Period_S,0,MODE_EMA,i); // EMA2_SM = EMA(EMA(SM_Buffer))
EMA2_HQ[i]=iMAOnArray(EMA_HQ,0,Period_S,0,MODE_EMA,i); // EMA2_HQ = EMA(EMA(HQ_Buffer))
}
for (i=limit-Period_R-Period_S-Signal;i>=0;i--)
{ // EMA2_SM
SMI_Buffer[i]=100*(EMA2_SM[i]/(EMA2_HQ[i]/2)); // SMI = 100 x ( ------------- )
} // EMA2_HQ / 2
for (i=limit-Period_R-Period_S;i>=0;i--)
{
Signal_Buffer[i]=iMAOnArray(SMI_Buffer,0,Signal,0,MODE_EMA,i); // Signal_Buffer = EMA(SMI_Buffer)
}
//---- TODO: add your code here
//----
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
---