Indicadores Multi Timeframe - página 1204

 
greenpar :

Gracias una vez más por su ayuda. He incorporado los cambios que has indicado pero sigo teniendo problemas/errores (ver archivo adjunto). Sería estupendo que me orientaran un poco más.

Gracias.

He subido un programa fijo y una muestra completa.
Archivos adjuntos:
 
Naguisa Unada:
He subido un programa fijo y una muestra completa.

Gracias una vez más por su ayuda, he introducido los cambios como se sugiere (véase el archivo adjunto y el código de abajo). Todavía estoy recibiendo numerosos errores al compilar (véase la imagen adjunta de errores de compilación), sospecho que tiene que ver con las líneas resaltadas en el código de abajo.

Por favor, tenga en cuenta que estoy buscando para incorporar otros marcos de tiempo, pares de divisas, y también otros indicadores eventualmente (como ADX), dentro de este archivo indicador.

Cualquier ayuda adicional sería muy apreciada.

#property description   "Indicator alerts when candle size is larger than CandlePoint value for specified period"
#property strict

#property indicator_chart_window
#property indicator_buffers 0
#property indicator_plots 0


//+------------------------------------------------------------------+
//| Declaring Constants                                         |
//+------------------------------------------------------------------+
#define  RESET 0

//+------------------------------------------------------------------+
//| Enumeration for the indication of operation                                         |
//+------------------------------------------------------------------+


//+------------------------------------------------------------------+
//| Input parameters of the indicator                                           |
//+------------------------------------------------------------------+
//--- Candle point size
input uint CandlePointM1 = 5;                   // Minimum candle points for Period M1
input uint CandlePointM5 = 5;                   // Minimum candle points for Period M5
int timeFrame[] = {PERIOD_M1, PERIOD_M5, PERIOD_H1};
string currencyPairs[] = {"AUDCAD", "AUDNZD", "AUDJPY", "AUDUSD"}

//+------------------------------------------------------------------+
//| Custom indicator initialisation function                                            |
//+------------------------------------------------------------------+
int OnInit()
{
return(INIT_SUCCEEDED);
}

//+------------------------------------------------------------------+
//| Deinitialisation                                            |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
}

//+------------------------------------------------------------------+
//| Custom 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[])


//+------------------------------------------------------------------+
//| Candle size indicator                                               |
//+------------------------------------------------------------------+
{
int range;
static datetime alertBar[] = {0, 0, 0}; // used for one alert/bar
datetime candleTime[3];

for(int i=0; i<3; i++)
        {
        for (int j=0 ;j<3 ;j++)
                {
                double candleLow, candleHigh;
                candleLow = iLow(currencyPairs[i],timeFrame[j],0);
                candleHigh = iHigh(currencyPairs[i],timeFrame[j],0);
                range = int((candleHigh-candleLow)/_Point);
                candleTime[j] = iTime(currencyPairs[i],timeFrame[j],0);

if (alertBar[j] != candleTime[j])
        {
        if (timeFrame[j] == PERIOD_M1 && range>int(CandlePointM1))
                {
                        Alert(currencyPairs[i], "PERIOD_M1", "candle >", CandlePointM1, "points");
                        alertBar[j] = candleTime[j];
                }
                if (timeFrame[j] == PERIOD_M5 && range>int(CandlePointM5))
                        {
                        Alert(currencyPairs[i], "PERIOD_M5", "candle >", CandlePointM5, "points");
                        alertBar[j] = candleTime[j];
                        }
                }
        }
}


Archivos adjuntos:
 
greenpar :

Gracias una vez más por su ayuda, he introducido los cambios como se sugiere (véase el archivo adjunto y el código de abajo). Todavía estoy recibiendo numerosos errores al compilar (véase la imagen adjunta de errores de compilación), sospecho que tiene que ver con las líneas resaltadas en el código de abajo.

Por favor, tenga en cuenta que estoy buscando para incorporar otros marcos de tiempo, pares de divisas, y también otros indicadores eventualmente (como ADX), dentro de este archivo indicador.

Cualquier ayuda adicional sería muy apreciada.


1. Al final de la línea faltaba ;.

2. String currencyPairs [] = {"AUDCAD", "AUDNZD", "AUDJPY", "AUDUSD"};

2. Faltaban las siguientes líneas

Retorno (rates_total);
}

3. He colocado mal la dimensión del array. Se ha modificado de la siguiente manera y se ha trasladado al área global.

datetime alert_bar [3] [3];
datetime candleTime [3] [3];

Archivos adjuntos:
 
Naguisa Unada:

1. Al final de la línea faltaba ;.

String currencyPairs [] = {"AUDCAD", "AUDNZD", "AUDJPY", "AUDUSD"};

2. Faltan las siguientes líneas.

Devuelve (rates_total);
}

3. He colocado mal la dimensión del array. Se ha modificado de la siguiente manera y se ha movido al área global.

datetime alert_bar [3] [3];
datetime candleTime [3] [3];


Muchas gracias una vez más. Ahora está alertando a través de todos los marcos de tiempo y pares de divisas enumerados.

Sin embargo, ya no está alertando una vez por barra, está alertando por cada incremento de puntos de vela por encima del tamaño mínimo de puntos de vela. Las líneas 78, 84 y 90 en 'Sample.mq4' que adjuntaste en tu mensaje anterior no aseguran que sólo se alerte una vez por vela. Intenté cambiar los valores dentro de '[]' pero esto obviamente no solucionó el problema. ¿Cómo se arregla esto?

Como siempre, cualquier ayuda adicional será muy apreciada. Gracias.

 
greenpar :

Sin embargo, ya no alerta una vez por barra, sino que alerta por cada aumento de puntos de vela por encima del tamaño mínimo de puntos de vela. Las líneas 78, 84 y 90 de 'Sample.mq4' que adjuntaste en tu mensaje anterior no aseguran que sólo se alerte una vez por vela. Intenté cambiar los valores dentro de '[]' pero esto obviamente no solucionó el problema. ¿Cómo se arregla esto?

Claro que sí. Debo escribir las siguientes líneas en "OnInit".

 //ArrayResize(candleTime, CPNO); 
 //ArrayResize(alert_bar,  CPNO); 
 //ArrayInitialize(alert_bar, 0); 
int OnInit ()
{
         //--- indicator buffers mapping 
        TFNO = ArraySize (timeFrame);
        CPNO = ArraySize (currencyPairs);
        
         ArrayResize (candleTime, CPNO);
         ArrayResize (alert_bar,  CPNO);
         ArrayInitialize (alert_bar, 0 );
        
         if ( StringLen ( Symbol ()) > 6 )
        {
                sufix = StringSubstr ( Symbol (), 6 , 0 );
                 for ( int i = 0 ; i < CPNO; i++)
                        currencyPairs[i] += sufix;
        }
         //--- 
         return ( INIT_SUCCEEDED );
}

Los números en [] se ajustan con "ArrayResize" arriba. Incluso si el número de pares de divisas aumenta, se ajustará automáticamente aquí, pero si quiere añadir otro marco de tiempo tiene que modificar el programa directamente. Esto es porque es la especificación de MQL4.

 
Naguisa Unada:

Claro que sí. Debería escribir las siguientes líneas en "OnInit".

Los números en [ ] se ajustan con "ArrayResize" arriba. Incluso si el número de pares de divisas aumenta, se ajustará automáticamente aquí, pero si quieres añadir otro marco de tiempo tienes que modificar el programa directamente. Esto es porque es la especificación de MQL4.


Gracias una vez más. He añadido el código.

La alerta sigue alertando por cada aumento de puntos de vela por encima del tamaño mínimo de puntos de vela - incluso después de borrar el indicador del gráfico, recompilar, salir de MT, etc. ¿Cómo puedo arreglar esto?

Como siempre, cualquier ayuda adicional será muy apreciada. Gracias.

 
greenpar :

La alerta sigue alertando por cada aumento de puntos de vela por encima del tamaño mínimo de puntos de vela - incluso después de borrar el indicador del gráfico, recompilar, salir de MT, etc. ¿Cómo puedo arreglar esto?

En mi PC funciona normalmente sin ningún problema. Creo que algo está mal, pero no sé lo que es.

 
Naguisa Unada:

En mi PC funciona normalmente sin ningún problema. Creo que algo está mal, pero no sé lo que es.


Estoy ejecutando MT4 build 1090. No estoy seguro de cuál es el problema. ¿Tal vez alguien más puede ayudar?

Gracias

 

puede alguien modificar este indicador, cuando el stoch se cruza las flechas se muestran en la segunda vela pero necesito que la flecha se muestre en la vela actual, inmediatamente cada vez que el stoch se cruza


gracias

Archivos adjuntos:
 
fxprogramer:

alguien puede modificar este indicador, cuando los stoch se cruzan las flechas se muestran en la segunda vela pero necesito que la flecha se muestre en la vela actual, inmediatamente cada vez que los stoch se cruzan

//for(i=1; i<=limit; i++) 
  for(i=0; i<=limit; i++) 

Es muy fácil. Corregir i = 1 a i = 0 en la línea 77.


Razón de la queja: