Author: Raul Canessa
0 Views
0 Downloads
0 Favorites
MassIndex
ÿþ//+------------------------------------------------------------------+

//|                                                    MassIndex.mq4 |

//|                                           Raul Canessa Castañeda |

//|                                https://www.tecnicasdetrading.com |

//+------------------------------------------------------------------+

#property copyright "Raul Canessa"

#property link      "https://www.tecnicasdetrading.com"

#property version   "1.03"

#property strict

#property indicator_separate_window

#property description "Indicador Mass Index creado con fines ilustrativos. "

                      "Si tienen interés en automatizar sus estrategias "

                      "o crear un indicador técnico personalizado pueden contactarnos al correo rcanessa@gmail.com. "

                      

                      "Más información en www.tecnicasdetrading.com"

//+------------------------------------------------------------------+

//| Función de inicialización del indicador Mass Index               |

//+------------------------------------------------------------------+

#property indicator_buffers 1           //Número de buffers del indicador 4

#property indicator_level1 27           //Nivel 1 del indicador

#property indicator_level2 26.5         //Nivel 2 del indicador

#property indicator_levelcolor Red



extern int Period_MA1=9;            //Periodo de la MA 1

extern int Period_MA2=9;            //Periodo de la MA 2

extern int Sum_Per=25;             //Periodo cálculo de Mass Index

extern int Num_Barras=3000;        //Número de barras usadas en el cálculo



//Buffers del indicador

double Dif_Precio[];                 //Diferencia entre máximo y mínimo de cada periodo

double MA_Simple[];                  //Media móvil exponencial inicial

double MA_Doble[];                  //Media móvil exponencial doble

double EMA_Ratio[];                  //Cálculo del EMA_Ratio

double Mass_Index[];                 //Indicador Mass_Index



int OnInit()

  {

  //Buffers del indicador

   IndicatorBuffers(5);

   SetIndexBuffer(0,Mass_Index);        // Asignación de array a buffer 0

   SetIndexStyle (0,DRAW_LINE,STYLE_SOLID,2,clrGreen);// Estílo de línea del indicador

   SetIndexBuffer(1,Dif_Precio);         // Asignación de array a buffer 1

   SetIndexEmptyValue(1,0.0);           // Asignación de valores 0 al estilo del Buffer

   SetIndexBuffer(2,MA_Simple);        // Asignación de array a buffer 2

   SetIndexEmptyValue(2,0.0);      // Asignación de valores 0 al estilo del Buffer

   SetIndexBuffer(3,MA_Doble);         // Asignación de array a buffer 3

   SetIndexEmptyValue(3,0.0);         // Asignación de valores 0 al estilo del Buffer

   SetIndexBuffer(4,EMA_Ratio);        // Asignación de array a buffer 4

   SetIndexEmptyValue(4,0.0);     // Asignación de valores 0 al estilo del Buffer

   

   //Nombre indicador

   string nombre;

   nombre = "Mass Index(" + Period_MA1 + "," + Period_MA2 + "," + Sum_Per + ")";

   IndicatorShortName(nombre);

   

   return(INIT_SUCCEEDED);

  }

//+------------------------------------------------------------------+

//| Custom indicator iteration function                              |

//+------------------------------------------------------------------+

int OnCalculate(const int rates_total,

                const int prev_calculated,

                const datetime &time[],

                const double &open[],

                const double &high[],

                const double &low[],

                const double &close[],

                const long &tick_volume[],

                const long &volume[],

                const int &spread[])

  {

  //Variables de cálculo

   int i;                                       //Indice de barras

   int cant_bar;                                //Variable de conteo de barras

   int j=0;                                       //Variable para el cálculo del Mass Index

  //Conteo de barras

   cant_bar=IndicatorCounted();                //Cantidad  de barras contadas

   i=Bars-cant_bar-1;                          //Indice para el conteo de barras

   if(i>Num_Barras)

    i=Num_Barras;

   

   if(i>0)

    j=i-Period_MA1-Period_MA2-Sum_Per+3;

    

   if(i==0)

    j=0;  

  //Cálculo del indicador

   while(i>=0)  

   { 

    Dif_Precio[i]=High[i]-Low[i];                             //Cálculo del diferencial entre el máximo y mínimo de cada periodo

    MA_Simple[i]=iMAOnArray(Dif_Precio,0,Period_MA1,0,MODE_EMA,i); //Media móvil EMA inicial

    MA_Doble[i]=iMAOnArray(MA_Simple,0,Period_MA2,0,MODE_EMA,i);       //Cálculo de EMA doble

    EMA_Ratio[i]=MA_Simple[i]/MA_Doble[i];                            //Cálculo del EMA Ratio

    i--;

   } 

   while(j>=0) 

    {

     Mass_Index[j]=iMAOnArray(EMA_Ratio,0,Sum_Per,0,MODE_SMA,j)*Sum_Per;     // Cálculo del indicador Mass Index

     j--;

    }

   

   return(rates_total);

  }

 

//+------------------------------------------------------------------+



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