No has entendido nada. El post que se está refiriendo a era acerca de cómo obtener la señal de un EA, es obvio que no se puede tener por sólo conseguir el último 2 valores de las velas, se necesita la tercera.
NO es posible tener una señal temprana porque para detectar una divergencia necesitas un pico/trófico y para eso necesitas una vela adicional que CIERRE. Así que cuando la vela 0 acaba de abrir, eso significa que la vela 1 está cerca, y permite confirmar el pico/trough en la vela 2. Si alguien quiere modificar el indicador para usar un pico/trough no confirmado para tener una señal temprana, uno puede hacerlo, pero no ayudaré a eso porque es una mala idea ya que obtendrá muchas señales malas.
Lo que se podría hacer es DIBUJAR la señal en la vela 1 o incluso en la vela 0, pero eso no cambiaría nada, y decidí dibujar la señal en la vela que realmente muestra el pico / valle.
He cambiado el código y tienes razón. Usted consigue falsos movimientos antes de la divergencia real. Gracias por su tiempo en esto.
No has entendido nada. El post que se está refiriendo a era acerca de cómo obtener la señal de un EA, es obvio que no se puede tener por sólo conseguir el último 2 valores de las velas, se necesita la tercera.
NO es posible tener una señal temprana porque para detectar una divergencia necesitas un pico/trófico y para eso necesitas una vela adicional que CIERRE. Así que cuando la vela 0 acaba de abrir, eso significa que la vela 1 está cerca, y permite confirmar el pico/trough en la vela 2. Si alguien quiere modificar el indicador para usar un pico/trough no confirmado para tener una señal temprana, uno puede hacerlo, pero no ayudaré a eso porque es una mala idea ya que obtendrá muchas señales malas.
Lo que se podría hacer es DIBUJAR la señal en la vela 1 o incluso en la vela 0, pero eso no cambiaría nada, y decidí dibujar la señal en la vela que realmente muestra el pico / valle.
es posible que se perdió un punto también.
En el caso de los gráficos renko, la barra actual (en su mayoría) ya está cerrada, por lo que necesitaría una vela menos. ¿O me estoy perdiendo algo?
Hola Alain, muy buen indicador, funciona bien incluso sin ajustar la configuración. Es bueno que tiene las alertas, pero la única cosa que falta para mí es la capacidad de enviar notificaciones push a mi teléfono. El mismo mensaje que aparece en la alerta emergente para que lo envíe a mi teléfono. ¿Podéis añadirle esta función? Sería muy amable de su parte.
La señal se da al cierre de una vela, 1 vela en el pasado (2 si cuentas vela abierta y no 3). Es normal y es como tiene que funcionar. Divergencia se basa en la investigación de extremum (superior/inferior). Si usted tiene una manera de detectar un extremo en la vela actual, le sugiero que aprender a programar y nos proporcionan, de forma gratuita, esta gran innovación.
Hola Alain. Muy buen indicador. Hace señales correctas.
BTW en parte "//--- divergencia bajista se encuentra" se suponía que era "divergenceStyle" en lugar de "STYLE_SOLID" .
Indicador totaly no redibujar. Para mi propósito decidí hacer una pequeña modificación para hacer la última barra del indicador redibujable así como la señal de divergencia.
Mostrará la señal de divergencia en la barra anterior, señal redibujable con seguridad. Será útil en timeframes rápidos para usar la señal justo antes de cerrar una barra.
He hecho cambios:
- quite toda la parte "//--- indicator updated only on new candle except total redraw"
- "start=prev_calculated-2;" fue cambiado a "start=prev_calculated-1;"
- En la parte "//--- bucle principal de cálculos" "for(int shift=start; shift<rates_total-2; shift++)" se cambió por "for(int shift=start; shift<rates_total-1; shift++)"
La señal de divergencia ahora aparece en la barra anterior, pero se congela en el momento de la aparición y no seguir la línea del indicador en esta barra.
He cambiado esta parte y lo he solucionado. Tal vez se podría hacer mejor y más simple, pero funciona. Las flechas se adelantaron 1 barra. Las líneas sin flechas son señales no confirmadas.
//--- indicador actualizado solo en nueva vela excepto redibujo total// static datetime lastCandleTime=0;// if(lastCandleTime==time[rates_total-1])// return(tarifas_total);// si no// lastCandleTime=tiempo[rates_total-1];//--- se modificó el primer cálculo o el número de compasesint start;
if(prev_calculated<=0)
{
start=slowEMA;
ArrayInitialize(bullishDivergence,EMPTY_VALUE); // los buffers de divergencia deben ser inicializadosArrayInitialize(bearishDivergence,EMPTY_VALUE);
}
else
{
start=prev_calculated-1;
bullishDivergence[rates_total-1]=EMPTY_VALUE;
bearishDivergence[rates_total-1]=EMPTY_VALUE;
}
//--- datos (macd buffers) cuenta a copiar int toCopy=rates_total-prev_calculated+(prev_calculated<=0 ? 0 : 1);
//--- no todos los datos pueden ser calculadosint calculated=BarsCalculated(macdHandle);
if(calculated<rates_total)
{
Print("Not all data of macdHandle is calculated (",calculated,"bars ). Error",GetLastError());
return(0);
}
//--- obtener el buffer principal MACDif(IsStopped()) return(0); //Comprobación de la bandera de paradaif(CopyBuffer(macdHandle,MAIN_LINE,0,toCopy,macdBuffer)<=0)
{
Print("Getting MACD Main is failed! Error : ",GetLastError());
return(0);
}
//--- obtener señal MACD bufferif(IsStopped()) return(0); //Comprobación de la bandera de paradaif(CopyBuffer(macdHandle,SIGNAL_LINE,0,toCopy,signalBuffer)<=0)
{
Print("Getting MACD Signal is failed! Error : ",GetLastError());
return(0);
}
//--- bucle principal de cálculosfor(int shift=start; shift<rates_total; shift++)
{
int currentExtremum,lastExtremum;
bool isBullishDivergence,isBearishDivergence;
string divergenceMsg;
ENUM_LINE_STYLE divergenceStyle=0;
//--- Atrapar Divergencia Alcista
isBullishDivergence=false;
if(macdBuffer[shift-1]<=macdBuffer[shift-2] &&
macdBuffer[shift-1]<macdBuffer[shift-3] &&
macdBuffer[shift-1]<macdBuffer[shift])
//--- si el macd principal actual es un mínimo (inferior a 2 anterior y 1 siguiente)
{
currentExtremum=shift;
lastExtremum=GetIndicatorLastTrough(shift);
//--- if(macdBuffer[currentExtremum-1]>macdBuffer[lastExtremum] &&
low[currentExtremum-1]<low[lastExtremum])
{
isBullishDivergence=true;
divergenceMsg="Classical bullish divergence on: ";
divergenceStyle=STYLE_SOLID;
}
//--- if(macdBuffer[currentExtremum-1]<macdBuffer[lastExtremum] &&
low[currentExtremum-1]>low[lastExtremum])
{
isBullishDivergence=true;
divergenceMsg="Reverse bullish divergence on: ";
divergenceStyle=STYLE_DOT;
}
//--- Se encuentra una divergencia alcistaif(isBullishDivergence)
{
bullishDivergence[currentExtremum]=macdBuffer[currentExtremum]-ARROWS_DISPLACEMENT;
//---if(drawPriceTrendLines==true)
DrawTrendLine(TRENDLINE_MAIN,time[currentExtremum-1],time[lastExtremum],low[currentExtremum-1],low[lastExtremum],Green,divergenceStyle);
//---if(drawIndicatorTrendLines==true)
DrawTrendLine(TRENDLINE_INDICATOR,time[currentExtremum-1],time[lastExtremum],macdBuffer[currentExtremum-1],macdBuffer[lastExtremum],Green,divergenceStyle);
//---if(displayAlert==true && shift>=rates_total-3 && time[currentExtremum-1]!=lastAlertTime)
DisplayAlert(divergenceMsg,time[currentExtremum-1]);
}
}
//--- Captura Divergencia Bajista
isBearishDivergence=false;
if(macdBuffer[shift-1]>=macdBuffer[shift-2] &&
macdBuffer[shift-1]>macdBuffer[shift-3] &&
macdBuffer[shift-1]>macdBuffer[shift])
//--- si el macd principal actual es un máximo (mayor que 2 anteriores y 1 siguiente)
{
currentExtremum=shift;
lastExtremum=GetIndicatorLastPeak(shift);
//--- if(macdBuffer[currentExtremum-1]<macdBuffer[lastExtremum] &&
high[currentExtremum-1]>high[lastExtremum])
{
isBearishDivergence=true;
divergenceMsg="Classical bearish divergence on: ";
divergenceStyle=STYLE_SOLID;
}
if(macdBuffer[currentExtremum-1]>macdBuffer[lastExtremum] &&
high[currentExtremum-1]<high[lastExtremum])
{
isBearishDivergence=true;
divergenceMsg="Reverse bearish divergence on: ";
divergenceStyle=STYLE_DOT;
}
//--- Se encuentra divergencia bajistaif(isBearishDivergence)
{
bearishDivergence[currentExtremum]=macdBuffer[currentExtremum]+ARROWS_DISPLACEMENT;
//---if(drawPriceTrendLines==true)
DrawTrendLine(TRENDLINE_MAIN,time[currentExtremum-1],time[lastExtremum],high[currentExtremum-1],high[lastExtremum],Red,divergenceStyle);
//---if(drawIndicatorTrendLines==true)
DrawTrendLine(TRENDLINE_INDICATOR,time[currentExtremum-1],time[lastExtremum],macdBuffer[currentExtremum-1],macdBuffer[lastExtremum],Red,divergenceStyle);
//---if(displayAlert==true && shift>=rates_total-3 && time[currentExtremum-1]!=lastAlertTime)
DisplayAlert(divergenceMsg,time[currentExtremum-1]);
}
}
}
//--- valor de retorno de prev_calculado para la siguiente llamadareturn(rates_total);
}
//+------------------------------------------------------------------+//| Buscar última depresión|//+------------------------------------------------------------------+int GetIndicatorLastTrough(int shift)
{
for(int i=shift-6; i>=2; i--)
{
if(signalBuffer[i] <= signalBuffer[i-1] && signalBuffer[i] <= signalBuffer[i-2] &&
signalBuffer[i] <= signalBuffer[i+1] && signalBuffer[i] <= signalBuffer[i+2])
{
for(int j=i; j>=2; j--)
{
if(macdBuffer[j] <= macdBuffer[j-1] && macdBuffer[j] < macdBuffer[j-2] &&
macdBuffer[j] <= macdBuffer[j+1] && macdBuffer[j] < macdBuffer[j+2])
return(j);
}
}
}
return(0);
}
//+------------------------------------------------------------------+//| Buscar último pico|//+------------------------------------------------------------------+int GetIndicatorLastPeak(int shift)
{
for(int i=shift-6; i>=2; i--)
{
if(signalBuffer[i] >= signalBuffer[i-1] && signalBuffer[i] >= signalBuffer[i-2] &&
signalBuffer[i] >= signalBuffer[i+1] && signalBuffer[i] >= signalBuffer[i+2])
{
for(int j=i; j>=2; j--)
{
if(macdBuffer[j] >= macdBuffer[j-1] && macdBuffer[j] > macdBuffer[j-2] &&
macdBuffer[j] >= macdBuffer[j+1] && macdBuffer[j] > macdBuffer[j+2])
return(j);
}
}
}
return(0);
}
//+------------------------------------------------------------------+//| ENUM_TRENDLINE_TYPE utilizado por DrawTrendLine ||//+------------------------------------------------------------------+
cuando divergencia línea cero por debajo también formación de precios HL fondo ( precio si no se hace de nuevo LL) histograma cualquier otro 5 30 60 240 tf 3 tf firmado a fructífero
No has entendido nada. El post que se está refiriendo a era acerca de cómo obtener la señal de un EA, es obvio que no se puede tener por sólo conseguir el último 2 valores de las velas, se necesita la tercera.
NO es posible tener una señal temprana porque para detectar una divergencia necesitas un pico/trófico y para eso necesitas una vela adicional que CIERRE. Así que cuando la vela 0 acaba de abrir, eso significa que la vela 1 está cerca, y permite confirmar el pico/trough en la vela 2. Si alguien quiere modificar el indicador para usar un pico/trough no confirmado para tener una señal temprana, uno puede hacerlo, pero no ayudaré a eso porque es una mala idea ya que obtendrá muchas señales malas.
Lo que se podría hacer es DIBUJAR la señal en la vela 1 o incluso en la vela 0, pero eso no cambiaría nada, y decidí dibujar la señal en la vela que realmente muestra el pico / valle.
No has entendido nada. El post que se está refiriendo a era acerca de cómo obtener la señal de un EA, es obvio que no se puede tener por sólo conseguir el último 2 valores de las velas, se necesita la tercera.
NO es posible tener una señal temprana porque para detectar una divergencia necesitas un pico/trófico y para eso necesitas una vela adicional que CIERRE. Así que cuando la vela 0 acaba de abrir, eso significa que la vela 1 está cerca, y permite confirmar el pico/trough en la vela 2. Si alguien quiere modificar el indicador para usar un pico/trough no confirmado para tener una señal temprana, uno puede hacerlo, pero no ayudaré a eso porque es una mala idea ya que obtendrá muchas señales malas.
Lo que se podría hacer es DIBUJAR la señal en la vela 1 o incluso en la vela 0, pero eso no cambiaría nada, y decidí dibujar la señal en la vela que realmente muestra el pico / valle.
es posible que se perdió un punto también.
En el caso de los gráficos renko, la barra actual (en su mayoría) ya está cerrada, por lo que necesitaría una vela menos. ¿O me estoy perdiendo algo?
Foro sobre trading, sistemas automatizados de trading y prueba de estrategias de trading
macd divegence
ENEZA PETER MKIRAMWENI, 2021.09.12 12:26
hola ayudenme con este indicador muestra alerta despues de tres barras quiero mostrar alerta inmediatamente despues de 1 barra
Foro sobre trading, sistemas automatizados de trading y prueba de estrategias de trading
Indicadores: Divergencia MACD
Alain Verleyen, 2013.11.05 19:14
Muy amigable.
La señal se da al cierre de una vela, 1 vela en el pasado (2 si cuentas vela abierta y no 3). Es normal y es como tiene que funcionar. Divergencia se basa en la investigación de extremum (superior/inferior). Si usted tiene una manera de detectar un extremo en la vela actual, le sugiero que aprender a programar y nos proporcionan, de forma gratuita, esta gran innovación.
Gracias por su aportación.
He cambiado esta parte y lo he solucionado. Tal vez se podría hacer mejor y más simple, pero funciona. Las flechas se adelantaron 1 barra. Las líneas sin flechas son señales no confirmadas.
cuando divergencia línea cero por debajo también formación de precios HL fondo ( precio si no se hace de nuevo LL) histograma cualquier otro 5 30 60 240 tf 3 tf firmado a fructífero
Hola Alain,
Muchas gracias por este gran indicador.
Estoy tratando de utilizar los valores de la ventana de datos de este indicador dentro de un EA (por favor, vea el archivo adjunto).
Utilizo la misma lógica para los cuatro índices, pero sólo puedo obtener los valores correctos para los dos últimos (Principal y Señal).
Para los dos primeros veo siempre un número fijo
cuando, para el ejemplo adjunto, uno debe tener un valor correcto y el otro debe ser 0 / en blanco
¿sabéis por qué tengo este problema?
Gracias