Está perdiendo oportunidades comerciales:
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Registro
Entrada
Usted acepta la política del sitio web y las condiciones de uso
Si no tiene cuenta de usuario, regístrese
Hola, estoyintentando convertir un indicador de mql4 a mql5. Básicamente necesito una notificación sonora en la IMF cuando aparece una barra roja. ¿Cómo puedo adjuntar este código de sonido ahora al nuevo mfi?
Adjunto un ejemplo de la antigua versión de trabajo:
Dime la forma correcta, esto es un cálculo de Heiken Ashi
Es un recorte de la norma
{
haOpen=(ExtOpenBuffer0[i-1]+ExtCloseBuffer0[i-1])/2; // <<<
haClose=(Open[i]+High[i]+Low[i]+Close[i])/4;
haHigh=MathMax(High[i],MathMax(haOpen,haClose));
haLow=MathMin(Low[i],MathMin(haOpen,haClose));
La pregunta que se plantea es la siguiente: si Open debería buscarse por la barra anterior, ¿por qué se busca por la siguiente barra del código?
Probablemente sea correcto así, o estoy entendiendo algo mal:
Dime la forma correcta, esto es un cálculo de Heiken Ashi
Es un recorte de la norma
{
haOpen=(ExtOpenBuffer0[i-1]+ExtCloseBuffer0[i-1])/2; // <<<
haClose=(Open[i]+High[i]+Low[i]+Close[i])/4;
haHigh=MathMax(High[i],MathMax(haOpen,haClose));
haLow=MathMin(Low[i],MathMin(haOpen,haClose));
La pregunta que se plantea es la siguiente: si Open debería buscarse por la barra anterior, ¿por qué se busca por la siguiente barra del código?
¿Esto debe ser correcto, o estoy entendiendo algo mal?
Dime la forma correcta, esto es un cálculo de Heiken Ashi
Es un recorte de la norma
{
haOpen=(ExtOpenBuffer0[i-1]+ExtCloseBuffer0[i-1])/2; // <<<
haClose=(Open[i]+High[i]+Low[i]+Close[i])/4;
haHigh=MathMax(High[i],MathMax(haOpen,haClose));
haLow=MathMin(Low[i],MathMin(haOpen,haClose));
La pregunta que se plantea es la siguiente: si Open debería buscarse por la barra anterior, ¿por qué se busca por la siguiente barra del código?
Probablemente sea la forma correcta, o estoy entendiendo algo mal:
Para ver exactamente qué índice tiene la barra más a la derecha y la más a la izquierda en el gráfico, utilice este sencillo método:
En cualquier indicador, en el MetaEditor, ponga un punto de interrupción en la primera operación dentro de OnCakculate() (paso 1):
Inicie la depuración de los datos históricos. Tan pronto como empiece a depurar en su punto de ruptura, la depuración se detendrá. A continuación, añada dos expresiones a la observación: "tiempo[rates_total-1]" y "tiempo[0]" (pasos 2 y 3). Ahora podemos ver fácilmente que en esta situación (el array time[] tiene la dirección de indexación por defecto, no se ha aplicado ArrayAsSeries), el elemento time[rates_total-1] será la barra más a la derecha del gráfico (paso 4).
Espero que este método sencillo y claro le ayude a comprobar rápidamente la dirección de la indexación en los indicadores.
En mql5 la dirección de la indexación de las barras se hace por defecto. Por lo tanto, [i-1] será la primera barra desde la derecha.
A grandes rasgos lo entiendo, para no olvidarme del uso de ArraySetAsSeries.
La pregunta es que tanto en el código mql4 como en el mql5 se aplica el mismo cálculo "i-1", ¿por qué la resta si la fórmula dice barra anterior y no barra futura?
Para ver exactamente qué índice tiene la barra más a la derecha y a la izquierda del gráfico, utilice este sencillo truco:
En cualquier indicador, en el MetaEditor, ponga un punto de interrupción en la primera operación dentro de OnCakculate() (paso 1):
Inicie la depuración de los datos históricos. Tan pronto como empiece a depurar en su punto de ruptura, la depuración se detendrá. A continuación, añada dos expresiones a la observación: "tiempo[rates_total-1]" y "tiempo[0]" (pasos 2 y 3). Ahora podemos ver fácilmente que en esta situación (el array time[] tiene la dirección de indexación por defecto, no se ha aplicado ArrayAsSeries), el elemento time[rates_total-1] será la barra más a la derecha del gráfico (paso 4).
Espero que este método sencillo y claro ayude a comprobar rápidamente la dirección de la indexación en los indicadores.
Gracias, no lo sabía.
¿Tiene alguna sugerencia sobre la corrección del cálculo?
Necesito hacer una alerta para el indicador CCI ARROWS.
Necesito que se señale inmediatamente después de que aparezca la flecha.
MT5
¡¡¡Hola a todos!!! Empecé a modificar el indicador en MT5, pero no puedo entender la función iTime, no puedo conseguir que funcione, puede alguien dopilizar el indicador a una condición de trabajo?????
El indicador lee el archivo, que se encuentra en la carpeta MQL5\Files\\\Ndevolución-dvoid\N.
Después de descargarlo, cámbiale el nombre a .csv
Gracias de antemano.
Buenos días a todos, no soy programador, pero uno de mis amigos dice que en el código del indicador Índice de Facilitación del Mercado de Bill Williams (BW MFI) los cálculos no se hacen estrictamente según la fórmula clásica: BW MFI = (ALTO - BAJO) / VOLUMEN Y además se utilizan algunas correcciones de datos adicionales. De hecho, se trata de un error y, en consecuencia, el indicador muestra datos incorrectos¡!
Por favor, indique cómo solucionar este error en el indicador (eliminar la corrección de datos adicionales) y recibir
indicador que funciona estrictamente según la fórmula: BW MFI = (ALTO - BAJO) / VOLUMEN ?????
//+------------------------------------------------------------------+
//| MarketFacilitationIndex.mq5 ||
//| Copyright 2009, MetaQuotes Software Corp.
//| http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "2009, MetaQuotes Software Corp.
#enlace de propiedad "http://www.mql5.com"
//--- ajustes del indicador
#property indicador_separar_ventana
#property indicator_buffers 2
#property indicator_plots 1
#property indicator_type1 DRAW_COLOR_HISTOGRAM
#property indicator_color1 Lima,MarrónSilla,Azul,Rosa
#property indicator_width1 2
//--- parámetro de entrada
input ENUM_APPLIED_VOLUME InpVolumeType=VOLUME_TICK; //volúmenes
//---- buffers
doble ExtMFIBuffer[];
doble ExtColorBuffer[];
//+------------------------------------------------------------------+
//| Función de inicialización de indicadores personalizada |
//+------------------------------------------------------------------+
void OnInit()
{
//---- indicadores
SetIndexBuffer(0,ExtMFIBuffer,INDICATOR_DATA);
SetIndexBuffer(1,ExtColorBuffer,INDICATOR_COLOR_INDEX);
//--- nombre para DataWindow
IndicatorSetString(INDICATOR_SHORTNAME, "BWMFI");
//--- establecer la precisión
IndicatorSetInteger(INDICATOR_DIGITS,_Digits);
//----
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void CalcularMFI(const int inicio,const int tasas_total,
const double &high[],
const double &low[],
const long &volume[])
{
int i=inicio;
bool mfi_up=true,vol_up=true;
//--- calcular los primeros valores de mfi_up y vol_up
si(i>0)
{
int n=i;
while(n>0)
{
if(ExtMFIBuffer[n]>ExtMFIBuffer[n-1]) { mfi_up=true; break; }
if(ExtMFIBuffer[n]<ExtMFIBuffer[n-1]) { mfi_up=false; break; }
//--- si los valores de mfi son iguales continuar
n--;
}
n=i;
while(n>0)
{
if(volumen[n]>volumen[n-1]) { vol_up=true; break; }
if(volumen[n]<volumen[n-1]) { vol_up=false; break; }
//--- si los volúmenes reales son iguales continuar
n--;
}
}
//---
while(i<total de tarifas && !IsStopped())
{
if(volumen[i]==0)
{
if(i>0) ExtMFIBuffer[i]=ExtMFIBuffer[i-1];
si no ExtMFIBuffer[i]=0;
}
si no ExtMFIBuffer[i]=(alto[i]-bajo[i])/_punto/volumen[i];
//--- calcular los cambios
si(i>0)
{
if(ExtMFIBuffer[i]>ExtMFIBuffer[i-1]) mfi_up=true;
if(ExtMFIBuffer[i]<ExtMFIBuffer[i-1]) mfi_up=false;
if(volumen[i]>volumen[i-1]) vol_up=true;
if(volumen[i]<volumen[i-1]) vol_up=false;
}
//--- establecer colores
if(mfi_up && vol_up) ExtColorBuffer[i]=0.0;
if(!mfi_up && !vol_up) ExtColorBuffer[i]=1.0;
if(mfi_up && !vol_up) ExtColorBuffer[i]=2.0;
if(!mfi_up && vol_up) ExtColorBuffer[i]=3.0;
i++;
}
}
//+------------------------------------------------------------------+
//| Función de iteración de indicadores personalizada |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
const int prev_calculado,
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[])
{
//---
int inicio=0;
//---
if(inicio<prev_calculado) inicio=prev_calculado-1;
//--- calcular con volúmenes de ticks o reales
if(InpVolumeType==VOLUME_TICK)
CalcularMFI(inicio,tasas_total,alta,baja,volumen_tick);
si no
CalcularMFI(inicio,tasas_total,alta,baja,volumen);
//--- normalizar el último valor de mfi
if(rates_total>1)
{
datetime ctm=TimeTradeServer(),lasttm=time[rates_total-1],nexttm=lasttm+datetime(PeriodSeconds());
if(ctm<nexttm && ctm>=lasttm && nexttm!=lasttm)
{
double corrección_koef=double(1+ctm-lasttm)/double(nexttm-lasttm);
ExtMFIBuffer[rates_total-1]*=corrección_koef;
}
}
//---
return(rates_total);
}
//+------------------------------------------------------------------+
Por favor, dígame qué tipo de código es y cómo hacer esto en un indicador de MT5?
/Este es un indicador basado en el volumen. Asegúrese de utilizar la entrada de volumen adecuada.
Por favor, dígame qué tipo de código es y cómo hacer esto en un indicador de MT5?
/Este es un indicador basado en el volumen. Asegúrese de utilizar la entrada de volumen adecuada.
BW MFI Squat bar , 3 buffer ( si la memoria no me falla)