Indicatore Domande varie - pagina 5

 
Marco vd Heijden:
Per favore descrivi cosa stai cercando di fare.

Scusa per la confusione.

Ho bisogno di impostare 3'EventSetMillisecondTimer' come sotto (hai detto che non funziona...). C'è un modo alternativo disponibile, per favore?

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

Meglio.

 

Il timer è impostato solo una volta nella funzione OnInit().

Se vuoi reinizializzare devi prima uccidere il vecchio timer, questo di solito avviene nella funzione OnDeinit().

Come ho detto, in alternativa potreste usare un contatore.

Se mettete del codice per esempio in un timer di 10 millisecondi, allora il codice sarà eseguito ogni 10 millisecondi.

Questo molto probabilmente bloccherà il vostro terminale perché è troppo veloce.

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
     }
  }
//+------------------------------------------------------------------+

Notate che il minuto viene attivato solo una volta, quindi non ogni minuto.

Anche i 5 minuti si attiveranno solo una volta dopo i primi cinque minuti, quindi non al decimo e non al quindicesimo minuto.

Se volete per esempio far scattare ogni minuto dovete aggiungere il codice per 60 sec, per 120 sec, per 180 sec e così via.

Il segno dei 15 minuti si attiverà ogni 15 minuti perché imposta il contatore a zero.


Che meccanismo vuoi usare, quale codice vuoi far scattare sugli intervalli di tempo?

Cosa stai cercando di ottenere?
 

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;
         }
  }

Buona questa Marco.

Si potrebbe fare qualcosa del genere per innescare ad ogni intervallo di tempo

 

Marco vd Heijden:

Che meccanismo vuoi usare, quale codice vuoi innescare sugli intervalli di tempo?

Cosa stai cercando di ottenere?
Grazie per il grande commento, che un commento spiega molto più chiaramente circa l'operatore 'switch', e gli intervalli di tempo.

Ancora una volta eccellente commento, un grande grazie amico.

//---

Ora, ho bisogno di darvi informazioni sul mio indicatore.
Perché forse non ho descritto la mia preoccupazione, (ma il tuo ultimo commento mi ha aiutato sempre di più)...

...il mio indicatore funziona che era (/ è) che volevo (/ voglio).

L'indicatore funziona così:

automaticamente sposta / mostra in avanti la 'VLINE'(che voglio)
mi mostra le 'VLINE' passate di una settimana(quale voglio)
nessun crossover Linee del periodo (quale voglio)
aggiorna continuamente (con intervalli) solo una volta in ogni prossimo PERIODO_**'s (che voglio)
e sempre di più...
ancora una volta GRAZIE SPECIALI a Marco & whroeder1 (non solo mi ha aiutato e mi ha anche insegnato molto)

Ho bisogno di descrivere la mia preoccupazione con un esempio:

Ho aperto il grafico EURUSD e attaccato il mio indicatore al grafico, e funziona perfettamente che è come voglio, si muove / mostra in avanti (anche passato) VLINE, posso cambiare TIMEFRAME PERIOD e automaticamente gli intervalli adattati che PERIODs (che è io voglio).

Dov'è il mio problema di indicatore? // forse non è un problema ma ci vuole un po' più di tempo 'irrilevante' per aggiornare.

Se scelgo 'EventSetMillisecondTimer( 10 );' e poi cambio TIMEFRAME PERIODs a qualsiasi TIMEFRAME PERIODs e quasi non vedo (quando questo) carica nuove VLINE al grafico (che è quello che voglio)

In questo momento se cambio EURUSD in 'altri simboli (come GBPUSD, e così via)' il mio indicatore non caricherà la totalità delle VLINE. Questo è solo un problema (/ per me).

Altrimenti: Se scelgo 'EventSetMillisecondTimer( 1250 );' non vedo alcun problema di caricamento. Funziona perfettamente.
Ma qui c'è unproblema (/ per me) ci vuole un po' più di tempo 'irrilevante' - quando cambio TIMEFRAME PERIODs.

Quindi se mi capite così chiaramente, per favore prendete tempo per commentare (e aiutatemi come posso risolvere questo problema) o se non mi capite così chiaramente non perdete il vostro tempo, per favore.

Molto e molto di più apprezzo i vostri commenti - Marco & whroeder1


(NOTA: non uso 'switch operator' - perché il tuo commento #18 meglio di tutto ciò che è lo aggiorno e ci lavoro - ed è molto utile per me)

(L'inglese non è la mia lingua madre)

 

Keith Watford:

Buona questa Marco.

Si potrebbe fare qualcosa del genere per innescare ad ogni intervallo di tempo

Anche bello Keith:)

Davvero che mi aiutano molto, lo userò nel mio prossimo indicatore.

Tutto il meglio.

 

Non so gli altri, ma trovo il tuo mix di caratteri, colori, grassetto e corsivo ecc. distraente e fastidioso. Infatti non potrei essere disturbato a leggere questo post.

Max Enrik:
Grazie per il grande commento, che un quel commento spiega molto più chiaramente circa l'operatore 'switch', e gli intervalli di tempo.

Ancora una volta eccellente commento, grande grazie amico.

//---

Ora, ho bisogno di darvi informazioni sul mio indicatore.
Perché forse non ho descritto la mia preoccupazione, (ma il tuo ultimo commento mi ha aiutato sempre di più)...

...il mio indicatore funziona che era (/ è) che volevo (/ voglio).

L'indicatore funziona così:

automaticamente sposta / mostra in avanti la 'VLINE'(che voglio)
mi mostra le 'VLINE' passate di una settimana(quale voglio)
nessun crossover Linee del periodo (quale voglio)
aggiorna continuamente (con intervalli) solo una volta in ogni prossimo PERIODO_**'s (che voglio)
e sempre di più...
ancora una volta GRAZIE SPECIALI a Marco & whroeder1 (non solo mi ha aiutato e mi ha anche insegnato molto)

Ho bisogno di descrivere la mia preoccupazione con un esempio:

Ho aperto il grafico EURUSD e attaccato il mio indicatore al grafico, e funziona perfettamente che è come voglio, si muove / mostra in avanti (anche passato) VLINE, posso cambiare TIMEFRAME PERIOD e automaticamente intervalli adattati che PERIODs (che è io voglio).

Dov'è il mio problema di indicatore? // forse non è un problema ma ci vuole un po' più di tempo 'irrilevante' per aggiornare.

Se scelgo 'EventSetMillisecondTimer( 10 );' e poi cambio TIMEFRAME PERIODs a qualsiasi TIMEFRAME PERIODs e quasi non vedo (quando questo) carica nuove VLINE al grafico (che è quello che voglio)

In questo momento se cambio EURUSD in 'altri simboli (come GBPUSD, e così via)' il mio indicatore non caricherà la totalità delle VLINE. Questo è solo un problema (/ per me).

Altrimenti: Se scelgo 'EventSetMillisecondTimer( 1250 );' non vedo alcun problema di caricamento. Funziona perfettamente.
Ma qui c'è unproblema (/ per me) ci vuole un po' più di tempo 'irrilevante' - quando cambio TIMEFRAME PERIODs.

Quindi se mi capite così chiaramente, per favore prendete tempo per commentare (e aiutatemi come posso risolvere questo problema) o se non mi capite così chiaramente non perdete il vostro tempo, per favore.

Molto e molto di più apprezzo i vostri commenti - Marco & whroeder1


(NOTA: non uso 'switch operator' - perché il tuo commento #18 meglio di tutto ciò che è lo aggiorno e ci lavoro - ed è molto utile per me)

(L'inglese non è la mia lingua madre)

 

Beh, se si tratta di passare da un timeframe all'altro, allora il timer non è una buona opzione perché il timer viene distrutto quando si cambia frame.

Potete creare le vostre linee nella funzione OnInit(), e aggiornarle nelle funzioni OnTick() o OnTimer().

Ecco un esempio:

//+------------------------------------------------------------------+
//| 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
  }
//+------------------------------------------------------------------+
Notate anche la funzione ObjectsDeleteAll() in OnDeint() che si assicurerà che tutto venga rimosso prima di essere creato di nuovo nel nuovo frame.
 

Inoltre, se volete aggiornare le linee ogni volta che si presenta una nuova candela, potete combinare l'esempio della pagina precedente con l'ultimo per ottenere questo:

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 ci sono altri problemi, per favore mostrate del codice.
 
Keith Watford:

Non so gli altri, ma io trovo il tuo mix di caratteri, colori, grassetto e corsivo ecc. distraente e fastidioso. Infatti non ho potuto essere disturbato a leggere questo post.

Mi è stato detto di non sprecare il vostro tempo.
 

Max Enrik:

Keith Watford:

Non so gli altri, ma io trovo il tuo mix di caratteri, colori, grassetto e corsivo ecc. distraente e fastidioso. Infatti non potrei essere disturbato a leggere questo post.


Mi è stato detto di non perdere tempo.
Perché hai appena citato il mio post senza alcun commento?