Indicadores de múltiplos períodos de tempo - página 1204

 
greenpar :

Mais uma vez obrigado por sua ajuda. Incorporei as mudanças que você delineou, mas ainda estou tendo problemas/erros (ver arquivo anexo). Seria ótimo se eu pudesse obter alguma orientação adicional.

Obrigado.

Eu carrego um programa fixo e uma amostra completa.
Arquivos anexados:
 
Naguisa Unada:
Faço o upload de um programa fixo e de uma amostra completa.

Obrigado mais uma vez por sua ajuda, eu fiz as mudanças conforme sugerido (veja arquivo anexo e código abaixo). Ainda estou recebendo inúmeros erros ao compilar (ver imagem anexa de erros de compilação), suspeito que tenha a ver com linhas destacadas no código abaixo.

Tenha em mente que estou procurando incorporar outros prazos, pares de moedas, e também outros indicadores eventualmente (como ADX), dentro deste arquivo de indicadores.

Qualquer outra ajuda seria muito 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];
                        }
                }
        }
}


Arquivos anexados:
 
greenpar :

Obrigado mais uma vez por sua ajuda, eu fiz as mudanças conforme sugerido (veja arquivo anexo e código abaixo). Ainda estou recebendo inúmeros erros ao compilar (ver imagem anexa de erros de compilação), suspeito que tenha a ver com linhas destacadas no código abaixo.

Tenha em mente que estou procurando incorporar outros prazos, pares de moedas, e também outros indicadores eventualmente (como ADX), dentro deste arquivo de indicadores.

Qualquer outra ajuda seria muito apreciada.


1. No final da linha ;was faltando.

Moeda de cordaPairs [] = {"AUDCAD", "AUDNZD", "AUDJPY", "AUDUSD"};

2. Faltavam as seguintes linhas.

Retorno (tarifas_total);
}

3. 3. Coloquei mal a dimensão da matriz. Ela foi modificada da seguinte forma e movida para a área global.

datetime alert_bar [3] [3] [3];
data-time candleTime [3] [3] [3];

Arquivos anexados:
 
Naguisa Unada:

1. No final da linha ;was em falta.

Moeda de cordaPairs [] = {"AUDCAD", "AUDNZD", "AUDJPY", "AUDUSD"};

2. Faltavam as seguintes linhas.

Retorno (tarifas_total);
}

3. 3. Coloquei mal a dimensão da matriz. Ela foi modificada da seguinte forma e movida para a área global.

datetime alert_bar [3] [3] [3];
data-time candleTime [3] [3] [3];


Muito obrigado, mais uma vez. Agora está alertando em todos os prazos e pares de moedas listados.

Entretanto, ele não está mais alertando uma vez por barra, está alertando para cada aumento de ponto de vela acima do tamanho mínimo de pontos de vela. As linhas 78, 84 e 90 em 'Sample.mq4' que você anexou à sua mensagem anterior não estão garantindo que ela só alerta uma vez por vela. Eu tentei mudar os valores dentro do '[]', mas isto obviamente não resolveu o problema. Como se corrige isto?

Como sempre, qualquer ajuda adicional seria muito apreciada. Obrigado.

 
greenpar :

Entretanto, ele não está mais alertando uma vez por barra, ele está alertando para cada aumento de pontos de vela acima do tamanho mínimo dos pontos de vela. As linhas 78, 84 e 90 em "Sample.mq4" que você anexou à sua mensagem anterior não estão garantindo que ela só alerta uma vez por vela. Eu tentei mudar os valores dentro do '[]', mas isto obviamente não resolveu o problema. Como se corrige isto?

Claro que sim. Eu deveria escrever as seguintes linhas em "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 );
}

Os números em [ ] são ajustados com "ArrayResize" acima. Mesmo que o número de pares de moedas aumente, ele será ajustado automaticamente aqui, mas se você quiser adicionar outro período de tempo, você tem que modificar o programa diretamente. Isto é porque é a especificação da MQL4.

 
Naguisa Unada:

Claro que sim. Eu deveria escrever as seguintes linhas em "OnInit".

Os números em [ ] são ajustados com "ArrayResize" acima. Mesmo que o número de pares de moedas aumente, ele será ajustado automaticamente aqui, mas se você quiser adicionar outro intervalo de tempo, você tem que modificar o programa diretamente. Isto é porque é a especificação da MQL4.


Mais uma vez, obrigado. Eu acrescentei o código.

O alerta ainda está alertando para cada aumento de pontos de vela acima do tamanho mínimo de pontos de vela - mesmo depois de apagar o indicador do gráfico, recompilar, sair do MT etc. Como posso corrigir isso?

Como sempre, qualquer ajuda adicional seria muito apreciada. Obrigado.

 
greenpar :

O alerta ainda está alertando para cada aumento de pontos de vela acima do tamanho mínimo de pontos de vela - mesmo depois de apagar o indicador do gráfico, recompilar, abandonar a MT etc. Como posso corrigir isso?

Em meu PC funciona normalmente sem problemas. Acho que algo está errado, mas não sei o que é.

 
Naguisa Unada:

Em meu PC funciona normalmente sem problemas. Acho que algo está errado, mas não sei o que é.


Estou executando o MT4 build 1090. Não tenho certeza de qual é o problema. Talvez outra pessoa possa ajudar?

Obrigado.

 

alguém pode modificar este indicador, quando a estocagem se cruza as setas aparecem na segunda vela, mas eu preciso que a seta apareça na vela atual, imediatamente toda vez que a estocagem se cruza


thanx

Arquivos anexados:
 
fxprogramer:

alguém pode modificar este indicador, quando a estocagem se cruza as setas aparecem na segunda vela, mas eu preciso que a seta apareça na vela atual, imediatamente toda vez que a estocagem se cruza

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

É muito fácil. Corrigir i = 1 para i = 0 na linha 77.