Ti stai perdendo delle opportunità di trading:
- App di trading gratuite
- Oltre 8.000 segnali per il copy trading
- Notizie economiche per esplorare i mercati finanziari
Registrazione
Accedi
Accetti la politica del sito e le condizioni d’uso
Se non hai un account, registrati
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( 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.
//+------------------------------------------------------------------+
//| 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?Ancora una volta eccellente commento, un grande grazie amico.
//---
...il mio indicatore funziona che era (/ è) che volevo (/ voglio).
L'indicatore funziona così:
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)
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.
Ancora una volta eccellente commento, grande grazie amico.
//---
...il mio indicatore funziona che era (/ è) che volevo (/ voglio).
L'indicatore funziona così:
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)
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
}
//+------------------------------------------------------------------+
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:
//+------------------------------------------------------------------+
//| 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
}
//+------------------------------------------------------------------+
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.
Max Enrik:
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.