Indicators Used
1
Views
0
Downloads
0
Favorites
Angulo_de_MAs
/*+------------------------------------------------------------------+
| Angulo de MAs.mq5 |
| It calculates the slope of a moving average chart |
| Slope = Change in price / minute |
| Angle = Sexagesimal degrees |
| Copyright © 2013, José Miguel Soriano |
| Almería-Spain, josemiguel1812@gmail.com |
+------------------------------------------------------------------+
| Indicators JMA.mq5, LRMA.mq5, HMA.mq5 |
| Copyright © 2010, Nikolay Kositsin |
| farria@mail.redcom.ru |
| JMA - http://www.mql5.com/en/code/427 |
| LRMA - http://www.mql5.com/en/code/429 |
| HMA - http://www.mql5.com/en/code/549 |
+------------------------------------------------------------------+
| Place the SmoothAlgorithms.mqh, IndicatorsAlgorithms.mqh |
| and MovingAverages.mqhfiles (http://www.mql5.com/en/code/77)|
| to the directory: terminal_data_folder\\MQL5\Include |
+------------------------------------------------------------------|
*/
#include <MovingAverages.mqh>
#include <SmoothAlgorithms.mqh>
#include <IndicatorsAlgorithms.mqh>
#property indicator_separate_window
#property indicator_buffers 2
#property indicator_plots 1
#property indicator_type1 DRAW_LINE
#property indicator_color1 clrTurquoise
#property indicator_style1 STYLE_SOLID
#property indicator_width1 1
#property indicator_label1 "MaAng"
#property indicator_level1 0
#property indicator_level2 15
#property indicator_level3 -15
#property indicator_level4 30
#property indicator_level5 -30
enum mis_MA_METODOS {SMA,EMA,SMMA,LWMA,DEMA,TEMA,LRMA,HMA,FRAMA,VIDYA,AMA,JMA};
input mis_MA_METODOS MAmetodo = EMA; //Método MA
input int MAPeriodo = 21; //Period MA
input ENUM_APPLIED_PRICE MAPrecio = PRICE_TYPICAL; //Precio aplicado
input int velaSalto = 2; //Nº barras cálculo inclinación
input int JMAperiodSuav = 10;
input int JMAfase = 100;
input int AMAfast = 5;
input int AMAslow = 14;
input int VIDYAcmoPeriodo = 9;
input double factorVisual = 0.8; //Control de inclinación
input int maxBarras=-1; //Máximo nº barras a calcular
string simbTrab; //definir como parámetro de entrada para multidivisa
int puntMA=-1;
ENUM_TIMEFRAMES marcoTrab = PERIOD_CURRENT;
//--- buffers de indicador
double AngBuffer[],MABuffer[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
string etiqu="MAAng("+etiquetaMA(MAmetodo,MAPeriodo,MAPrecio, AMAfast, AMAslow)+"-"+IaS(velaSalto)+") ";
simbTrab=Symbol();
SetIndexBuffer(0,AngBuffer,INDICATOR_DATA);
SetIndexBuffer(1,MABuffer,INDICATOR_CALCULATIONS);
ArraySetAsSeries(AngBuffer,true);
ArraySetAsSeries(MABuffer,true);
PlotIndexSetString(0,PLOT_LABEL,etiqu);
IndicatorSetInteger(INDICATOR_DIGITS,digitosSimb(simbTrab)); //_Digits
IndicatorSetString(INDICATOR_SHORTNAME,etiqu);
ResetLastError();
switch(MAmetodo)
{
case SMA: puntMA= iMA(simbTrab,marcoTrab,MAPeriodo,0,MODE_SMA,MAPrecio); break;
case EMA: puntMA= iMA(simbTrab,marcoTrab,MAPeriodo,0,MODE_EMA,MAPrecio); break;
case SMMA: puntMA= iMA(simbTrab,marcoTrab,MAPeriodo,0,MODE_SMMA,MAPrecio); break;
case LWMA: puntMA= iMA(simbTrab,marcoTrab,MAPeriodo,0,MODE_LWMA,MAPrecio); break;
case AMA: puntMA= iAMA(simbTrab,marcoTrab,MAPeriodo,AMAfast,AMAslow,0,MAPrecio); break;
case DEMA: puntMA= iDEMA(simbTrab,marcoTrab,MAPeriodo,0,MAPrecio); break;
case FRAMA:puntMA= iFrAMA(simbTrab,marcoTrab,MAPeriodo,0,MAPrecio); break;
case TEMA: puntMA= iTEMA(simbTrab,marcoTrab,MAPeriodo,0,MAPrecio); break;
case VIDYA:puntMA= iVIDyA(simbTrab,marcoTrab,VIDYAcmoPeriodo,MAPeriodo,0,MAPrecio); break;
case LRMA: puntMA= iCustom(simbTrab,marcoTrab,"LRMA",MAPeriodo,MAPrecio); break;
case HMA: puntMA= iCustom(simbTrab,marcoTrab,"HMA",MAPeriodo,MAPrecio); break;
case JMA: puntMA= iCustom(simbTrab,marcoTrab,"JMA",JMAperiodSuav,JMAfase,MAPrecio);
}
if(puntMA==-1) Print("Datos de MA no cargados... Error: ",_LastError,"función: ",__FUNCTION__);
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int OnCalculate(const int rangoTotal,
const int preCalculado,
const int begin,
const double &price[]) // array de precios a calcular
{
int k,inicio,limite,nCopiados,nBuffer=0,
contBarras=preCalculado;
if(contBarras<0) return(-1);
else if(contBarras>0) contBarras--;
if(contBarras==0)inicio=0;
else inicio=contBarras;
limite=rangoTotal-contBarras-velaSalto;
if(maxBarras>0) limite=MathMin(limite,maxBarras);
nCopiados=CopyBuffer(puntMA,nBuffer,0,rangoTotal-inicio,MABuffer);
if(nCopiados>0)
{
limite=MathMin(limite,nCopiados);
for(k=inicio; k<limite; k++) AngBuffer[k]=anguloMA(MABuffer,k,marcoTrab,velaSalto,factorVisual,simbTrab);
}
return(rangoTotal);
}
//----------------------------------------- ÁNGULO DE MEDIA MOVIL ---------------------------------------------
double anguloMA(double &arrayValores[],int indVela,ENUM_TIMEFRAMES marcoTmp,int barraSalto=2,double factor_visual=0.80,string simb="")
{ //DEVUELVE EL ÁNGULO FORMADO POR LA LINEA DE UNA MEDIA MÓVIL, expresado en grados
double MAactual=0,MAprevia=0;
double incremento=0,tangente=0,angulo=0;
if(simb=="") simb=Symbol();
MAactual= arrayValores[indVela];
MAprevia= arrayValores[indVela+barraSalto];
incremento= (MAactual - MAprevia) / valorPunto(simb); //Points()
tangente= incremento / (barraSalto*PeriodSeconds(marcoTmp)/60); //tangente= incremento en puntos / minutos
angulo= MathArctan(tangente) / M_PI * 180 * factor_visual; //ángulo en grados sexagesimales
return(angulo);
}
//+------------------------------------- DEFINE ETIQUETA de MA --------------------------------------+
string etiquetaMA(mis_MA_METODOS metodo,int MAPeriodo,ENUM_APPLIED_PRICE MAPrecio,int AMArapida=5,int AMAlenta=14)
{
string etiqueta;
switch(metodo)
{
case SMA:
etiqueta="SMA("+IaS(MAPeriodo)+","+abrevPrecio(MAPrecio)+")";
break;
case EMA:
etiqueta="EMA("+IaS(MAPeriodo)+","+abrevPrecio(MAPrecio)+")";
break;
case SMMA:
etiqueta="SMMA("+IaS(MAPeriodo)+","+abrevPrecio(MAPrecio)+")";
break;
case LWMA:
etiqueta="LWMA("+IaS(MAPeriodo)+","+abrevPrecio(MAPrecio)+")";
break;
case AMA:
etiqueta="AMA("+IaS(MAPeriodo)+","+IaS(AMArapida)+","+IaS(AMAlenta)+","+abrevPrecio(MAPrecio)+")";
break;
case DEMA:
etiqueta="DEMA("+IaS(MAPeriodo)+","+abrevPrecio(MAPrecio)+")";
break;
case FRAMA:
etiqueta="FRAM("+IaS(MAPeriodo)+","+abrevPrecio(MAPrecio)+")";
break;
case TEMA:
etiqueta="TEMA("+IaS(MAPeriodo)+","+abrevPrecio(MAPrecio)+")";
break;
case VIDYA:
etiqueta="VIDYA("+IaS(MAPeriodo)+","+IaS(VIDYAcmoPeriodo)+","+abrevPrecio(MAPrecio)+")";
break;
case HMA:
etiqueta="HMA("+IaS(MAPeriodo)+","+abrevPrecio(MAPrecio)+")";
break;
case LRMA:
etiqueta="LRMA("+IaS(MAPeriodo)+","+abrevPrecio(MAPrecio)+")";
break;
case JMA:
etiqueta="JMA("+IaS(MAPeriodo)+","+abrevPrecio(MAPrecio)+")";
break;
}
return(etiqueta);
}
//+------------------------------ ABREVIA PRECIO ------------------------------------+
string abrevPrecio(ENUM_APPLIED_PRICE precio)
{
string resp="-";
switch(precio)
{
case PRICE_CLOSE: resp= "C"; break;
case PRICE_HIGH: resp= "H"; break;
case PRICE_LOW: resp= "L"; break;
case PRICE_MEDIAN: resp= "M"; break;
case PRICE_OPEN: resp= "O"; break;
case PRICE_TYPICAL: resp= "T"; break;
case PRICE_WEIGHTED:resp= "W";
}
return(resp);
}
//----------------------------------- VALOR DEL PUNTO en precio (Point())---------------------------------
double valorPunto(string simb="")
{
if(simb=="") simb=_Symbol;
double resp=SymbolInfoDouble(simb,SYMBOL_POINT);
return(resp);
}
//--------------------------------- DÍGITOS DEL SÍMBOLO ---------------------------------------
int digitosSimb(string simb)
{
int numDig=SymbolInfoInteger(simb,SYMBOL_DIGITS);
return(numDig);
}
//+------------------------------------ ENTERO A CADENA -----------------------------------------+
string IaS(int valor)
{
string resp;
resp=IntegerToString(valor);
return(resp);
}
//+------------------------------------------------------------------+
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
---