Salut les traders ! Aujourd'hui, parlons d'un sujet qui intéresse beaucoup d'entre nous :
Comment détecter la présence d'une nouvelle bougie ?
C'est assez simple, surtout si vous souhaitez détecter une nouvelle bougie dans le timeframe actuel.
void start(){ static datetime tmp; if (tmp != Time[0]) { tmp = Time[0]; // ajoutez votre code ici } }
Mais qu'en est-il des événements sur d'autres timeframes ? Ce n'est pas trop compliqué, mais il y a quelques restrictions :
MT4 ne supporte pas l'événement onBar, mais vous pouvez mettre les heures de bougie dans un tableau et vérifier ces heures à chaque tick. Si l'heure correspond, vous pouvez exécuter l'événement de nouvelle bougie.
Par exemple, si vous exécutez un backtest sur un timeframe M5, vous pouvez attraper les événements M6, M7, jusqu'à D1.
Pourquoi ne pouvez-vous détecter que des tendances ascendantes ? La réponse réside dans la question suivante : comment générer des données de tick avec MetaTrader ? A1, A2, A3,...
Jusqu'au timeframe D1, c'est plus difficile car la semaine commence à par exemple : dimanche 20h45 (selon le broker) et le début du mois peut commencer au milieu de la semaine... etc.
Je pense que ces informations ne sont pas trop pertinentes, donc je ne les publie pas...
Il y a un sujet à ce propos, mais je pense que beaucoup de gens ne lisent pas les articles et les forums, alors j'ai décidé de publier ce code.
Quelques explications :
Dans la fonction init, vous remplissez le tableau des heures avec les heures de départ :
curIndex = utils.periodToPeriodIndex(Period()); times[curIndex] = Time[0]; for(int i=curIndex+1; i<MAX; i++) times[i] = times[curIndex] - MathMod(times[curIndex], utils.periodIndexToPeriod(i) * 60);
Et dans la fonction start, vous vérifiez si suffisamment de temps s'est écoulé, puis vous exécutez l'événement :
if (times[curIndex] != Time[0]) { times[curIndex] = Time[0]; onBar(Period()); for(int i=curIndex+1; i<MAX; i++) { int period = utils.periodIndexToPeriod(i), seconds = period * 60, time0 = times[curIndex] - MathMod(times[curIndex], seconds); if (times[i] != time0) { times[i] = time0; onBar(period); } } }
Écrivez votre code dans :
void onTick() {
}
et
void onBar(int period) { }
C'est tout les amis.
Update 1.1 : Merci à WHRoeder pour son code clair
Articles connexes
- Générer des Signaux de Trading avec MQL5 Wizard : Étoiles du Matin/du Soir et RSI
- Utiliser MQL5 Wizard pour Créer un Expert Advisor Basé sur les Modèles de Chandeliers Englobants et MFI
- Générez des Signaux de Trading avec MQL5 Wizard : Dark Cloud Cover et Piercing Line
- Développez un Expert Advisor avec MQL5 : Signaux de Trading 3 Corbeaux Noirs / 3 Soldats Blancs + RSI
- AOCCI : Un Expert pour MetaTrader 5