
Você está perdendo oportunidades de negociação:
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Registro
Login
Você concorda com a política do site e com os termos de uso
Se você não tem uma conta, por favor registre-se
Boa tarde eu personalizei um indicador existente, porém ao adicionar ao MT5 o indicador nao é exibido na janela.
//+------------------------------------------------------------------+
//| MR.mq5 |
//| Alexandre Jùnior |
//| http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Alexandre Júnior"
#property link "http://www.mql5.com"
#property version "1.00"
#property description "Média Rápida"
#include <MovingAverages.mqh>
#property indicator_chart_window
#property indicator_buffers 2
#property indicator_plots 1
//--- plot ExtMRBuffer
#property indicator_label1 "MR"
#property indicator_type1 DRAW_LINE
#property indicator_color1 Yellow
#property indicator_style1 STYLE_SOLID
#property indicator_width1 2
//--- default applied price
#property indicator_applied_price PRICE_CLOSE
//--- input parameters
input int InpPeriodMR=8; // MR period
input int InpShiftMR=0; // MR shift
//--- indicator buffer
double ExtMRBuffer[];
double ExtMRBuffer2[];
double ExtFastSC;
int ExtPeriodMR;
int InpMRPeriod;
int ExtMRPeriod;
//+------------------------------------------------------------------+
//| MR initialization function |
//+------------------------------------------------------------------+
void OnInit()
{
//--- check for input values
if(InpPeriodMR<=0)
{
ExtPeriodMR=17;
PrintFormat("Input parameter InpPeriodMR has incorrect value (%d). Indicator will use value %d for calculations.",
InpPeriodMR,ExtPeriodMR);
}
else
ExtPeriodMR=InpPeriodMR;
//--- indicator buffers mapping
SetIndexBuffer(0,ExtMRBuffer,INDICATOR_DATA);
//--- set accuracy
IndicatorSetInteger(INDICATOR_DIGITS,_Digits+1);
//--- sets first bar from what index will be drawn
PlotIndexSetInteger(0,PLOT_DRAW_BEGIN,ExtPeriodMR);
//--- set index shift
PlotIndexSetInteger(0,PLOT_SHIFT,InpShiftMR);
//--- set shortname and change label
string short_name=StringFormat("MR(%d)",ExtPeriodMR);
IndicatorSetString(INDICATOR_SHORTNAME,short_name);
PlotIndexSetString(0,PLOT_LABEL,short_name);
}
//+------------------------------------------------------------------+
//| AMA iteration function |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
const int prev_calculated,
const int begin,
const double &price[])
{
int i;
//--- check for rates count
if(rates_total<ExtPeriodMR+begin)
return(0);
//--- draw begin may be corrected
if(begin!=0)
PlotIndexSetInteger(0,PLOT_DRAW_BEGIN,ExtPeriodMR+begin);
//--- detect position
int pos=prev_calculated-1;
//--- first calculations
if(pos<ExtPeriodMR+begin)
{
pos=ExtPeriodMR+begin;
for(i=0; i<pos-1; i++)
ExtMRBuffer[i]=0.0;
ExtMRBuffer[pos-1]=price[pos-1];
}
//--- main cycle
for(i=pos; i<rates_total && !IsStopped(); i++)
{
//--- calculate MR
if(i==InpMRPeriod-1)
ExtMRBuffer[i]=SimpleMA(i,InpMRPeriod,price);
else
ExtMRBuffer[i]=ExponentialMA(i,InpMRPeriod,ExtMRBuffer[i-1],price);
//--- Calculate StdDev
ExtMRBuffer2[i]=StdDevFunc(price,ExtMRBuffer,i);
}
//--- return value of prev_calculated for next call
return(rates_total);
}
//+------------------------------------------------------------------+
//| Calculate DESV value |
//+------------------------------------------------------------------+
double StdDevFunc(const double &price[],const double &ma_price[],const int position)
{
double dev=0.0;
for(int i=0; i<ExtMRPeriod; i++)
dev+=MathPow(price[position-i]-ma_price[position],2.0);
dev=MathSqrt(dev/ExtMRPeriod);
return(dev);
}
//+------------------------------------------------------------------+