Vous manquez des opportunités de trading :
- Applications de trading gratuites
- Plus de 8 000 signaux à copier
- Actualités économiques pour explorer les marchés financiers
Inscription
Se connecter
Vous acceptez la politique du site Web et les conditions d'utilisation
Si vous n'avez pas de compte, veuillez vous inscrire
Veuillez décrire ce que vous essayez de faire.
Désolé pour la confusion.
J'ai besoin de définir 3'EventSetMillisecondTimer' comme ci-dessous (vous dites que cela ne fonctionne pas...). Existe-t-il une autre méthode, s'il vous plaît ?
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
La meilleure.
Le timer n'est réglé qu'une seule fois dans la fonction OnInit().
Si vous voulez réinitialiser, vous devez d'abord tuer l'ancienne minuterie, ce qui se produit généralement avec la fonction OnDeinit().
Comme je l'ai dit, vous pouvez aussi utiliser un compteur.
Si vous placez du code dans un timer de 10 millisecondes par exemple, le code sera exécuté toutes les 10 millisecondes.
Cela va très probablement geler votre terminal parce que c'est trop rapide.
//+------------------------------------------------------------------+
//| 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
}
}
//+------------------------------------------------------------------+
Notez que la minute n'est déclenchée qu'une seule fois, donc pas toutes les minutes.
Les 5 minutes ne se déclencheront également qu'une seule fois après les cinq premières minutes, donc pas au bout de 10 ou 15 minutes.
Si vous voulez par exemple déclencher toutes les minutes, vous devez ajouter du code pour 60 sec pour 120 sec pour 180 sec et ainsi de suite.
La marque des 15 minutes se déclenchera toutes les 15 minutes car elle met le compteur à zéro.
Quel mécanisme voulez-vous utiliser, quel code voulez-vous déclencher sur les intervalles minutés ?
Qu'est-ce que vous essayez d'obtenir ?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;
}
}
Bien vu, Marco.
Vous pourriez faire quelque chose comme ceci pour déclencher à chaque intervalle de temps
Marco vd Heijden:
Quel mécanisme voulez-vous utiliser, quel code voulez-vous déclencher sur les intervalles de temps ?
Qu'est-ce que vous essayez d'obtenir ?Encore une fois, excellent commentaire, merci beaucoup.
//---
...mon indicateur fonctionne ce qui était (/ est) ce que je voulais (/ veut).
L'indicateur fonctionne comme ceci :
Je dois décrire mon problème avec un exemple :
J'ouvre un graphique EURUSD et j'ai attaché mon indicateur au graphique, et il fonctionne parfaitement, comme je le souhaite, il déplace / montre les VLINEs vers l'avant (et même vers l'arrière), je peux changer le PERIOD du TIMEFRAME et les intervalles sont automatiquement adaptés à ce PERIOD (comme je le souhaite).
Où est le problème de mon indicateur ? // Peut-être que ce n'est pas un problème mais il faut un peu plus de temps 'non pertinent' pour mettre à jour.
Si je choisis 'EventSetMillisecondTimer( 10 );' et ensuite je change TIMEFRAME PERIODs à n'importe quel TIMEFRAME PERIODs et presque je ne vois pas (quand cela) charge de nouvelles VLINE's sur le graphique (ce que je veux).
Nousapprécions beaucoup et beaucoup plus vos commentaires - Marco & whroeder1
(NOTE : Je n'utilise pas "opérateur de commutation" - parce que votre commentaire #18 mieux que tout ce qui est je l'améliorer et de travailler sur elle - et il est très utile pour moi)
(L'anglais n'est pas ma langue maternelle)
Keith Watford:
Bien joué Marco.
Vous pourriez faire quelque chose comme ceci pour déclencher à chaque intervalle de temps
Bien joué aussi Keith:)
Vraiment, cela m'a beaucoup aidé, je vais l'utiliser dans mon prochain indicateur.
Je vous souhaite bonne chance.
Je ne sais pas ce qu'il en est pour les autres, mais je trouve votre mélange de polices, de couleurs, de gras et d'italique, etc. distrayant et ennuyeux. En fait, je n'ai pas pris la peine de lire ce message.
Encore une fois, excellent commentaire, merci beaucoup.
//---
...mon indicateur fonctionne ce qui était (/ est) ce que je voulais (/ veut).
L'indicateur fonctionne comme ceci :
Je dois décrire mon problème avec un exemple :
J'ouvre un graphique EURUSD et j'ai attaché mon indicateur au graphique, et il fonctionne parfaitement, comme je le souhaite, il déplace / montre les VLINEs vers l'avant (et même vers l'arrière), je peux changer le PERIOD du TIMEFRAME et les intervalles sont automatiquement adaptés à ce PERIOD (comme je le souhaite).
Où est le problème de mon indicateur ? // Peut-être que ce n'est pas un problème mais il faut un peu plus de temps 'non pertinent' pour mettre à jour.
Si je choisis 'EventSetMillisecondTimer( 10 );' et ensuite je change TIMEFRAME PERIODs à n'importe quel TIMEFRAME PERIODs et presque je ne vois pas (quand cela) charge de nouvelles VLINE's sur le graphique (ce que je veux).
Nousapprécions beaucoup et beaucoup plus vos commentaires - Marco & whroeder1
(NOTE : Je n'utilise pas "opérateur de commutation" - parce que votre commentaire #18 mieux que tout ce qui est je l'améliorer et de travailler sur elle - et il est très utile pour moi)
(L'anglais n'est pas ma langue maternelle)
S'il s'agit de changer de cadre temporel, le timer n'est pas une bonne option car il est détruit lors du changement de cadre.
Vous pouvez créer vos lignes dans la fonction OnInit(), et les mettre à jour dans les fonctions OnTick() ou OnTimer().
Voici un exemple :
//| 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
}
//+------------------------------------------------------------------+
De plus, si vous voulez mettre à jour les lignes chaque fois qu'une nouvelle bougie apparaît, vous pouvez combiner l'exemple de la page précédente avec le dernier pour obtenir ceci :
//+------------------------------------------------------------------+
//| 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
}
//+------------------------------------------------------------------+
Je ne sais pas ce qu'il en est pour les autres, mais je trouve votre mélange de polices, de couleurs, de gras et d'italique, etc. distrayant et ennuyeux. En fait, je ne me suis pas donné la peine de lire ce message.
Max Enrik:
Je ne sais pas ce qu'il en est pour les autres, mais je trouve votre mélange de polices, de couleurs, de gras et d'italique, etc. distrayant et ennuyeux. En fait, je n'ai pas pris la peine de lire ce message.