Indicador Perguntas Diversas - página 5

 
Marco vd Heijden:
Por favor, descreva o que você está tentando fazer.

Desculpe a confusão.

Preciso definir 3'EventSetMillisecondTimer' como abaixo (você disse que não funciona...). Há alguma forma alternativa disponível, por favor?

EventSetMillisecondTimer( 10   ); // 1st will read in 10   | if won't read try next
EventSetMillisecondTimer( 250  ); // 2nd will read in 250  | if won't read try next
EventSetMillisecondTimer( 1250 ); // 3rd will read in 1250 | if read then stop reading till next PERIOD_M5

Melhor.

 

O temporizador é definido apenas uma vez na função OnInit().

Se você quiser reinicializar você tem que matar o timer antigo primeiro, isto geralmente acontece na função OnDeinit().

Como eu disse, em alternativa, você poderia usar um contador.

Se você colocar o código, por exemplo, um timer de 10 milissegundos, então o código será executado a cada 10 milissegundos.

Isto provavelmente congelará seu terminal porque ele é muito rápido.

int counter;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- create timer
   EventSetTimer(1);// 1 second

//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//--- destroy timer
   EventKillTimer();

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---

  }
//+------------------------------------------------------------------+
//| Timer function                                                   |
//+------------------------------------------------------------------+
void OnTimer()
  {
//--- increment counter
   counter++;
//--- comment status on the chart
   Comment(IntegerToString(counter));  
//--- switch timer  
   switch(counter)
     {
      case 60:
         Alert(" 1 Minute ");
         // Do Something...
         break;
      case 300:
         Alert(" 5 Minutes ");
         // Do Something...
         break;
      case 900:
         Alert(" 15 Minutes ");
         // Do Something...
         counter=0;// Reset counter on highest value.
         break;
     }
// end switch timer    
   if(counter>900)
     {
      counter=0;// Safety Mechanism
     }
  }
//+------------------------------------------------------------------+

Note que o minuto é acionado apenas uma vez, portanto, não a cada minuto.

Os 5 minutos também serão acionados apenas uma vez após os primeiros 5 minutos, portanto não aos 10 e não aos 15 minutos.

Se você quiser, por exemplo, acionar a cada minuto, você tem que adicionar o código por 60 segundos por 120 segundos por 180 segundos e etc.

A marca de 15 minutos acionará a cada 15 minutos, pois coloca o contador em zero.


Que mecanismo você quer usar, que código você quer acionar nos intervalos de tempo?

O que você está tentando alcançar?
 

void OnTimer()
  {
   static int counter=0;
   static int next1m=60;
   static int next5m=300;
   static int next15m=900;
//--- increment counter
   counter++;
//--- comment status on the chart
   Comment(IntegerToString(counter));  
//--- timer
   if(counter==next1m)
         {
         Alert(" 1 Minute ");
         // Do Something...
         next1m+=60;
         }
   if(counter==next5m)
         {
         Alert(" 5 Minutes ");
         // Do Something...
         next5m+=300;
         }
   if(counter==next15m)
         {
         Alert(" 15 Minutes ");
         // Do Something...
         counter=0;// Reset counter on highest value.
         next1m=60;
         next5m=300;
         }
  }

Bom, Marco.

Você poderia fazer algo como isto para acionar a cada intervalo de tempo

 

Marco vd Heijden:

Que mecanismo você quer usar, que código você quer acionar nos intervalos de tempo?

O que você está tentando alcançar?
Obrigado pelo grande comentário, que explica muito mais claramente sobre o operador 'switch', e os intervalos de tempo.

Mais uma vez, excelente comentário, muito obrigado homem.

//---

Agora, preciso lhe dar informações sobre meu indicador.
Porque talvez eu não tenha descrito sobre minha preocupação (mas seu último comentário me ajudou cada vez mais)...

...meu indicador funciona que era (/ é) o que eu queria (/ quer).

O indicador funciona assim:

automaticamente avança / mostra para frente 'VLINE' (qual eu quero)
me mostra a semana passada 'VLINE's(qual eu quero)
sem linhas de período cruzadas (qual delas eu quero)
continuamente atualizar (com intervalos) apenas uma vez em cada um dos próximos PERÍODOS_**'s (qual eu quero)
e mais e mais...
mais uma vez OBRIGAÇÕES ESPECIAIS ao Marco & Whroeder1 (não só me ajudou e também me ensinou muito)

Preciso descrever minha preocupação com o exemplo:

Abro o gráfico EURUSD e anexei meu indicador ao gráfico, e funciona perfeito que é como eu quero, move-se / mostra para frente (mesmo passado) VLINHA's, posso mudar o PERÍODO DE TEMPO-QUADRO e automaticamente adaptei os intervalos que PERÍODOS (que é o que eu quero).

Onde está o meu problema de indicador? // talvez não seja um problema, mas leva um pouco mais de tempo 'irrelevante' para ser atualizado.

Se eu escolher 'EventSetMillisecondTimer( 10 )'; e então eu mudo os PERÍODOS DE TEMPORADA para qualquer PERÍODO DE TEMPORADA e quase não vejo (quando isso) carrega novos VLINHAS para o gráfico (qual eu quero)

Neste momento, se eu mudar EURUSD para "outros símbolos (como GBPUSD, e assim por diante)" meu indicador não carregará cheio de VLINE's. Isso é apenas um problema (/ para mim).

Caso contrário: Se eu escolher 'EventSetMillisecondTimer( 1250 )'; não vejo nenhum problema com cargas. Funciona perfeitamente.
Mas aqui está umproblema (/ para mim) que leva um pouco mais de tempo 'irrelevante ' - quando eu mudo o PERÍODO DO TEMPO-QUADRO.

Portanto, se você me entende tão claramente, por favor, tome um tempo para comentar (e me ajude como posso resolver este problema) ou se você não me entende tão claramente, não perca seu tempo, por favor.

Muito e muito mais aprecie seus comentários - Marco & whroeder1


(NOTA: Eu não uso 'switch operator' - porque seu comentário #18 é melhor do que tudo o que é que eu atualizo e trabalho nele - e é muito útil para mim)

(o inglês não é minha língua nativa)

 

Keith Watford:

Bom, Marco.

Você poderia fazer algo como isto para acionar a cada intervalo de tempo

Também muito bom Keith:)

Realmente isso me ajuda muito, vou usá-lo em meu próximo indicador.

Tudo de bom.

 

Não conheço ninguém, mas acho sua mistura de fonte, cores, negrito e itálico, etc., distraindo e irritando. Na verdade, eu não poderia me incomodar em ler este post.

Max Enrik:
Obrigado pelo grande comentário, que explica muito mais claramente sobre o operador "switch", e os intervalos de tempo.

Mais uma vez, excelente comentário, muito obrigado homem.

//---

Agora, preciso lhe dar informações sobre meu indicador.
Porque talvez eu não tenha descrito sobre minha preocupação (mas seu último comentário me ajudou cada vez mais)...

...meu indicador funciona que era (/ é) o que eu queria (/ quer).

O indicador funciona assim:

automaticamente avança / mostra para frente 'VLINE' (qual eu quero)
me mostra a semana passada 'VLINE's(qual eu quero)
sem linhas de período cruzadas (qual delas eu quero)
continuamente atualizar (com intervalos) apenas uma vez em cada um dos próximos PERÍODOS_**'s (qual eu quero)
e mais e mais...
mais uma vez OBRIGAÇÕES ESPECIAIS ao Marco & Whroeder1 (não só me ajudou e também me ensinou muito)

Preciso descrever minha preocupação com o exemplo:

Abro o gráfico EURUSD e anexei meu indicador ao gráfico, e funciona perfeito que é como eu quero, move-se / mostra para frente (mesmo passado) VLINHA's, posso mudar o PERÍODO DE TEMPO-QUADRO e automaticamente adaptei os intervalos que PERÍODOS (que é o que eu quero).

Onde está o meu problema de indicador? // talvez não seja um problema, mas leva um pouco mais de tempo 'irrelevante' para ser atualizado.

Se eu escolher 'EventSetMillisecondTimer( 10 )'; e então eu mudo os PERÍODOS DE TEMPORADA para qualquer PERÍODO DE TEMPORADA e quase não vejo (quando isso) carrega novos VLINHAS para o gráfico (qual eu quero)

Neste momento, se eu mudar EURUSD para "outros símbolos (como GBPUSD, e assim por diante)" meu indicador não carregará cheio de VLINE's. Isso é apenas um problema (/ para mim).

Caso contrário: Se eu escolher 'EventSetMillisecondTimer( 1250 )'; não vejo nenhum problema com cargas. Funciona perfeitamente.
Mas aqui está umproblema (/ para mim) que leva um pouco mais de tempo 'irrelevante ' - quando eu mudo o PERÍODO DO TEMPO-QUADRO.

Portanto, se você me entende tão claramente, por favor, tome um tempo para comentar (e me ajude como posso resolver este problema) ou se você não me entende tão claramente, não perca seu tempo, por favor.

Muito e muito mais aprecie seus comentários - Marco & whroeder1


(NOTA: Eu não uso 'switch operator' - porque seu comentário #18 é melhor do que tudo o que é que eu atualizo e trabalho nele - e é muito útil para mim)

(o inglês não é minha língua nativa)

 

Bem, se se tratar de prazos de troca, então o temporizador não é uma boa opção porque o temporizador é destruído ao mudar de estrutura.

Você pode criar suas linhas na função OnInit(), e atualizá-las nas funções OnTick() ou OnTimer().

Aqui está um exemplo:

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- create timer
   EventSetTimer(60);
//--- playsound
   PlaySound("alert2.wav");  
//--- create moving timeline
   ObjectCreate(0,"Time",OBJ_VLINE,0,TimeCurrent(),0);  
//--- detect period
   switch(Period())
     {
      case PERIOD_M1:
        MessageBox("Switched to 1 Minute Frame");
        //Do Something...
        ObjectCreate(0,"1-Minute",OBJ_VLINE,0,Time[0],0);
         break;
      case PERIOD_M5:
        MessageBox("Switched to 5 Minutes Frame");
        //Do Something...
        ObjectCreate(0,"5-Minutes",OBJ_VLINE,0,Time[0],0);
         break;
      case PERIOD_M15:
        MessageBox("Switched to 15 Minutes Frame");
        //Do Something...
        ObjectCreate(0,"15-Minutes",OBJ_VLINE,0,Time[0],0);
         break;
      case PERIOD_M30:
        MessageBox("Switched to 30 Minutes Frame");
        //Do Something...
        ObjectCreate(0,"30-Minutes",OBJ_VLINE,0,Time[0],0);
         break;
      case PERIOD_H1:
        MessageBox("Switched to 1 Hour Frame");
        //Do Something...
        ObjectCreate(0,"1-Hour",OBJ_VLINE,0,Time[0],0);
         break;
      case PERIOD_H4:
        MessageBox("Switched to 4 Hour Frame");
        //Do Something...
        ObjectCreate(0,"4-Hour",OBJ_VLINE,0,Time[0],0);
         break;
      case PERIOD_D1:
        MessageBox("Switched to Daily Frame");
        //Do Something...
        ObjectCreate(0,"Daily",OBJ_VLINE,0,Time[0],0);
         break;
      case PERIOD_W1:
        MessageBox("Switched to Weekly Frame");
        //Do Something...
        ObjectCreate(0,"Weekly",OBJ_VLINE,0,Time[0],0);
         break;
      case PERIOD_MN1:
        MessageBox("Switched to Monthly Frame");
        //Do Something...
        ObjectCreate(0,"Monthly",OBJ_VLINE,0,Time[0],0);
         break;
     }
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//--- destroy timer
   EventKillTimer();
//--- delete objects
   ObjectsDeleteAll(0,0,-1);
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   ObjectMove(0,"Time",0,TimeCurrent(),0);// Update timeline
  }
//+------------------------------------------------------------------+
//| Timer function                                                   |
//+------------------------------------------------------------------+
void OnTimer()
  {
//---
   ObjectMove(0,"Time",0,TimeCurrent(),0);// Update timeline
  }
//+------------------------------------------------------------------+
Observe também a função ObjectsDeleteAll() na função OnDeint(), isto garantirá que tudo seja removido antes de ser criado novamente em seu novo frame.
 

E além disso, se você quiser atualizar as linhas sempre que surgir uma vela nova, você pode combinar o exemplo da página anterior com o último a lhe dar isto:

datetime M1,M5,M15,M30,H1,H4,D1,W1,MN1;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- create timer
   EventSetTimer(60);
//--- playsound
   PlaySound("alert2.wav");
//--- load open times
   M1=iTime(Symbol(),PERIOD_M1,0);
   M5=iTime(Symbol(),PERIOD_M5,0);
   M15=iTime(Symbol(),PERIOD_M15,0);
   M30=iTime(Symbol(),PERIOD_M30,0);
   H1=iTime(Symbol(),PERIOD_H1,0);
   H4=iTime(Symbol(),PERIOD_H4,0);
   D1=iTime(Symbol(),PERIOD_D1,0);
   W1=iTime(Symbol(),PERIOD_W1,0);
   MN1=iTime(Symbol(),PERIOD_MN1,0);  
//--- create moving timeline
   ObjectCreate(0,"Time",OBJ_VLINE,0,TimeCurrent(),0);  
//--- detect period
   switch(Period())
     {
      case PERIOD_M1:
        MessageBox("Switched to 1 Minute Frame");
        //Do Something...
        ObjectCreate(0,"1-Minute",OBJ_VLINE,0,Time[0],0);
        M1=Time[0];// store current time
         break;
      case PERIOD_M5:
        MessageBox("Switched to 5 Minutes Frame");
        //Do Something...
        ObjectCreate(0,"5-Minutes",OBJ_VLINE,0,Time[0],0);
        M5=Time[0];// store current time
         break;
      case PERIOD_M15:
        MessageBox("Switched to 15 Minutes Frame");
        //Do Something...
        ObjectCreate(0,"15-Minutes",OBJ_VLINE,0,Time[0],0);
        M15=Time[0];// store current time
         break;
      case PERIOD_M30:
        MessageBox("Switched to 30 Minutes Frame");
        //Do Something...
        ObjectCreate(0,"30-Minutes",OBJ_VLINE,0,Time[0],0);
        M30=Time[0];// store current time
         break;
      case PERIOD_H1:
        MessageBox("Switched to 1 Hour Frame");
        //Do Something...
        ObjectCreate(0,"1-Hour",OBJ_VLINE,0,Time[0],0);
        H1=Time[0];// store current time
         break;
      case PERIOD_H4:
        MessageBox("Switched to 4 Hour Frame");
        //Do Something...
        ObjectCreate(0,"4-Hour",OBJ_VLINE,0,Time[0],0);
        H4=Time[0];// store current time
         break;
      case PERIOD_D1:
        MessageBox("Switched to Daily Frame");
        //Do Something...
        ObjectCreate(0,"Daily",OBJ_VLINE,0,Time[0],0);
        D1=Time[0];// store current time
         break;
      case PERIOD_W1:
        MessageBox("Switched to Weekly Frame");
        //Do Something...
        ObjectCreate(0,"Weekly",OBJ_VLINE,0,Time[0],0);
        W1=Time[0];// store current time
         break;
      case PERIOD_MN1:
        MessageBox("Switched to Monthly Frame");
        //Do Something...
        ObjectCreate(0,"Monthly",OBJ_VLINE,0,Time[0],0);
        MN1=Time[0];// store current time
         break;
     }
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//--- destroy timer
   EventKillTimer();
//--- delete objects
   ObjectsDeleteAll(0,0,-1);
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//--- update timeline
   ObjectMove(0,"Time",0,TimeCurrent(),0);
//--- check for new candles
   if(M1!=iTime(Symbol(),PERIOD_M1,0))
    {
     Alert("New candle on M1");
     ObjectMove(0,"1-Minute",0,iTime(Symbol(),PERIOD_M1,0),0); // Move line
     M1=iTime(Symbol(),PERIOD_M1,0);// Overwrite old with new value
    }  
   if(M5!=iTime(Symbol(),PERIOD_M5,0))
    {
     Alert("New candle on M5");
     M1=iTime(Symbol(),PERIOD_M5,0);// Overwrite old with new value
    }      
   if(M15!=iTime(Symbol(),PERIOD_M15,0))
    {
     Alert("New candle on M15");
     M15=iTime(Symbol(),PERIOD_M15,0);// Overwrite old with new value
    }
   if(M30!=iTime(Symbol(),PERIOD_M30,0))
    {
     Alert("New candle on M30");
     M30=iTime(Symbol(),PERIOD_M30,0);// Overwrite old with new value
    }
    // and so on to MN1...        
  }
//+------------------------------------------------------------------+
//| Timer function                                                   |
//+------------------------------------------------------------------+
void OnTimer()
  {
//---
   ObjectMove(0,"Time",0,TimeCurrent(),0);// Update timeline
  }
//+------------------------------------------------------------------+
Se houver mais algum problema, por favor mostre algum código.
 
Keith Watford:

Não conheço ninguém, mas acho sua mistura de fonte, cores, negrito e itálico, etc., distraindo e irritando. Na verdade, eu não poderia me incomodar em ler este post.

Disseram-me: não perca seu tempo.
 

Max Enrik:

Keith Watford:

Não conheço ninguém, mas acho sua mistura de fonte, cores, negrito e itálico, etc., distraindo e irritando. Na verdade, eu não poderia me incomodar em ler este post.


Disseram-me: não perca seu tempo.
Por que você acabou de citar meu post sem nenhum comentário?