Mon EA a une stratégie de prix ouverts uniquement et je voulais m'en tenir à cela pour gagner du temps pendant le backtesting (évidemment).
La solution que j'ai imaginée est la suivante :
utilisez la paire la plus active pendant la période de trading principale de votre EA comme 'driver' (le graphique qui produit les ticks).
Dans chaque onTick(), vérifiez si votre pilote a entré une nouvelle barre.
s'il n'y a pas de nouvelle barre, attendez un peu plus longtemps
S'il y a une nouvelle barre, distribuez le message OnTick() à vos traders individuels (chaque trader est responsable d'une paire de devises).
dans le trader, vérifiez si le dernier temps de la paire de devises du trader est égal au "nouveau temps de barre" du driver
si oui, vous pouvez continuer normalement
si non, vous devez traiter le prix de clôture de la barre actuelle comme le prix d'ouverture que vous recherchez et si vous recherchez des informations sur les barres précédentes, tenez compte de cette situation "décalée d'une unité".
Je vais couper et coller les sections importantes du code de mon EA ci-dessous. J'espère que cela vous sera utile !
A la vôtre !
// this is from the Trader base class// manage a new tick and predetermines whether a new bar hast startedvirtualvoid onTick() {
MqlRates rates[1];
// check the rates of the tick stream we're attached to (_Symbol!!!)if (CopyRates(_Symbol, _period, 0, 1, rates) != 1) {
Print("CopyRates of ", _Symbol, " failed");
return;
}
if (_newBar = (rates[0].time != _currBarTime)) {
_prevBarTime = _currBarTime; // remember the previous bar time
_currBarTime = rates[0].time; // remember the current bar time
}
}
// this is the actual trader for a specific currency pair// checks whether a new trade (closing or opening) is to be performedvoid checkForTrade(void) {
MqlRates rates[3];
if (CopyRates(_symbol, _period, 0, 3, rates) != 3) {
Print("CopyRates of ", _symbol, " failed");
return;
}
bool inSameBar = (rates[2].time == _currBarTime); // _currBarTime determined in OnTick()!double sBuf[3]; // signal buffer! 2: current bar, 1: previous bar, 0: current - 2 if (CopyBuffer(_ind, SIGNAL3, 0, 3, sBuf) != 3) {
Print("copy signal from indicator failed, no data");
return;
}
// first close exiting ordersdouble v0 = inSameBar ? sBuf[0] : sBuf[1]; // determine the actual 'previous' bardouble v1 = inSameBar ? sBuf[1] : sBuf[2]; // determine the actual 'current' barif (_volume > 0) {
if (crossesZeroDownwards(v0, v1)) { // cross down?
setReqVolume(0); // close this order
tradeCloses = true;
}
} elseif (_volume < 0) {
if (crossesZeroUpwards(v0, v1)) { // cross up?
setReqVolume(0); // close this order
tradeCloses = true;
}
}
...
Je viens moi-même de rencontrer ce problème. Vous l'avez deviné, j'essaie de passer de JForex à MQL5 ! Je commence à regretter de ne pas m'être donné la peine de le faire, même si je suppose que l'extension du délai aide :)
Il semble que MetaQuotes ne l'ait toujours pas corrigé.
MT5 forex ne semble pas supporter DOM.
isNewBar ne m'aide pas.
Cet état de fait semble ridicule.
Quelqu'un sait-il si quelque chose a changé dans MT5 concernant ce problème ?
Quelqu'un connaît-il une solution qui fonctionne pour une stratégie multidevises qui s'attend à recevoir des ticks ?
Je viens moi-même de rencontrer ce problème. Vous l'avez deviné, j'essaie de passer de JForex à MQL5 ! Je commence à regretter de ne pas m'être donné la peine de le faire, même si je suppose que l'extension du délai aide :)
Il semble que MetaQuotes ne l'ait toujours pas corrigé.
MT5 forex ne semble pas supporter DOM.
isNewBar ne m'aide pas.
Cet état de fait semble ridicule.
Quelqu'un sait-il si quelque chose a changé dans MT5 concernant ce problème ?
Quelqu'un connaît-il une solution qui fonctionne pour une stratégie multidevises qui s'attend à recevoir des ticks ?
Je vous remercie de votre frustration,
Jim
Essayez d'utiliser OnTimer() avec un timer de 1 seconde au lieu de OnTick().
enivid: Essayez d'utiliser OnTimer() avec une minuterie de 1 seconde au lieu de OnTick().
TradingGurus:
Cependant, l'exécution de backtests multidevises contre différentes paires produit toujours des résultats légèrement différents.
Jim, j'utilise la solution OnTimer avec 1 seconde dans mon EA de portefeuille de concours. Si votre stratégie repose sur chaque tick, alors oui, vous obtiendrez des résultats différents en utilisant OnTimer par rapport à OnTick sur une seule devise puisque plus d'un tick par seconde est possible. J'ai constaté que la différence est généralement la plus importante lorsque le tick "manquant" crée un nouveau haut ou bas de barre. Vous pouvez vérifier le haut/bas de la barre précédente et le haut/bas de la barre actuelle pour tout changement et insérer ceux-ci en tant que "tick manquant" lorsqu'ils se produisent, à moins bien sûr que le tick actuel ait créé le nouveau haut/bas de la barre.
N'oubliez pas non plus que le testeur de stratégie MetaTrader ne simule que des données en tick. En fonction de la sensibilité de votre stratégie aux mouvements des tick, cette simulation peut avoir un impact significatif sur le back-testing par rapport au forward testing.
Si votre stratégie repose sur chaque tick, alors oui, vous obtiendrez des résultats différents en utilisant OnTimer et OnTick sur une seule devise puisque plus d'un tick par seconde est possible.
- Patrick
Ce n'est pas tout à fait ce que je voulais dire. Notre EA de concours (qui n'est encore qu'un potentiel !) négocie les 12 paires. En utilisant uniquement OnTimer(), j'obtiens des résultats de backtest différents si je sélectionne GBP/USD dans le testeur de stratégie plutôt que EUR/USD par exemple.
Je ne connais que trop bien les limites de MT4 lors des backtests utilisant des ticks simulés. Malheureusement, il semble que MT5 ne soit pas beaucoup mieux !
Nous étions extrêmement désireux de faire fonctionner tout cela avec des ticks pour des raisons historiques, mais nous avons abandonné. Nous n'arrivons pas à rendre les choses cohérentes.
Nous avons mordu à la balle et travaillons maintenant avec des barres d'une minute avec l'aide de OnTimer() et isNewBar().
Les choses commencent enfin à avoir un sens, et en plus, il reste encore 4 heures avant la date limite du championnat :)
Nous avons finalement soumis notre EA avec environ 5 minutes d'avance sur la date limite.
Un backtest à son actif, et aucune optimisation.
N'ayant jamais fait cela auparavant, quelqu'un peut-il me dire s'il a encore une chance d'être approuvé ?
Si oui, serons-nous autorisés à modifier les paramètres d'entrée au cours de la semaine prochaine, ou non ?
Jim
Bonne chance Jim !
Si votre EA a été backtesté correctement dans la période 2010.01.01 jusqu'à 2010.08.01 sans aucune erreur(erreurs de transaction, etc.) et avec un profit, alors vous serez probablement approuvé, à condition que vos informations personnelles soient également correctes. Cependant, vous ne pourrez plus rien modifier à partir de ce moment, y compris les réglages (paramètres d'entrée).
Si vous n'avez pas de compte, veuillez vous inscrire
Autorisez l'utilisation de cookies pour vous connecter au site Web MQL5.com.
Veuillez activer les paramètres nécessaires dans votre navigateur, sinon vous ne pourrez pas vous connecter.
Vous êtes connecté. L'authentification à deux facteurs a été désactivée. Configurez-la à nouveau et scannez un nouveau code QR, ou continuez avec l'authentification à deux facteurs désactivée.
J'ai voulu le publier à l'époque, mais la page d'accueil était horrible :
Salut les gars et les filles,
J'ai également rencontré ce problème il y a quelque temps et nous en avons discuté ici : https://www.mql5.com/en/forum/1642
Mon EA a une stratégie de prix ouverts uniquement et je voulais m'en tenir à cela pour gagner du temps pendant le backtesting (évidemment).
La solution que j'ai imaginée est la suivante :
Je vais couper et coller les sections importantes du code de mon EA ci-dessous. J'espère que cela vous sera utile !
A la vôtre !
Je viens moi-même de rencontrer ce problème. Vous l'avez deviné, j'essaie de passer de JForex à MQL5 ! Je commence à regretter de ne pas m'être donné la peine de le faire, même si je suppose que l'extension du délai aide :)
Il semble que MetaQuotes ne l'ait toujours pas corrigé.
MT5 forex ne semble pas supporter DOM.
isNewBar ne m'aide pas.
Cet état de fait semble ridicule.
Quelqu'un sait-il si quelque chose a changé dans MT5 concernant ce problème ?
Quelqu'un connaît-il une solution qui fonctionne pour une stratégie multidevises qui s'attend à recevoir des ticks ?
Je vous remercie de votre frustration,
Jim
Je viens moi-même de rencontrer ce problème. Vous l'avez deviné, j'essaie de passer de JForex à MQL5 ! Je commence à regretter de ne pas m'être donné la peine de le faire, même si je suppose que l'extension du délai aide :)
Il semble que MetaQuotes ne l'ait toujours pas corrigé.
MT5 forex ne semble pas supporter DOM.
isNewBar ne m'aide pas.
Cet état de fait semble ridicule.
Quelqu'un sait-il si quelque chose a changé dans MT5 concernant ce problème ?
Quelqu'un connaît-il une solution qui fonctionne pour une stratégie multidevises qui s'attend à recevoir des ticks ?
Je vous remercie de votre frustration,
Jim
Salut enivid,
Essayez d'utiliser OnTimer() avec une minuterie de 1 seconde au lieu de OnTick().
Merci pour la suggestion. Votre solution fonctionne bien mieux que toutes les autres que j'ai essayées, certainement pour nos besoins.
Cependant, l'exécution de backtests multidevises contre différentes paires produit toujours des résultats légèrement différents.
Cela n'inspire pas une grande confiance !
Je vais aller brûler beaucoup plus d'huile de minuit maintenant !
Merci,
Jim
Essayez d'utiliser OnTimer() avec une minuterie de 1 seconde au lieu de OnTick().
TradingGurus:
Cependant, l'exécution de backtests multidevises contre différentes paires produit toujours des résultats légèrement différents.
Jim, j'utilise la solution OnTimer avec 1 seconde dans mon EA de portefeuille de concours. Si votre stratégie repose sur chaque tick, alors oui, vous obtiendrez des résultats différents en utilisant OnTimer par rapport à OnTick sur une seule devise puisque plus d'un tick par seconde est possible. J'ai constaté que la différence est généralement la plus importante lorsque le tick "manquant" crée un nouveau haut ou bas de barre. Vous pouvez vérifier le haut/bas de la barre précédente et le haut/bas de la barre actuelle pour tout changement et insérer ceux-ci en tant que "tick manquant" lorsqu'ils se produisent, à moins bien sûr que le tick actuel ait créé le nouveau haut/bas de la barre.
N'oubliez pas non plus que le testeur de stratégie MetaTrader ne simule que des données en tick. En fonction de la sensibilité de votre stratégie aux mouvements des tick, cette simulation peut avoir un impact significatif sur le back-testing par rapport au forward testing.
- Patrick
Si votre stratégie repose sur chaque tick, alors oui, vous obtiendrez des résultats différents en utilisant OnTimer et OnTick sur une seule devise puisque plus d'un tick par seconde est possible.
- Patrick
Ce n'est pas tout à fait ce que je voulais dire. Notre EA de concours (qui n'est encore qu'un potentiel !) négocie les 12 paires. En utilisant uniquement OnTimer(), j'obtiens des résultats de backtest différents si je sélectionne GBP/USD dans le testeur de stratégie plutôt que EUR/USD par exemple.
Je ne connais que trop bien les limites de MT4 lors des backtests utilisant des ticks simulés. Malheureusement, il semble que MT5 ne soit pas beaucoup mieux !
Jim
Nous étions extrêmement désireux de faire fonctionner tout cela avec des ticks pour des raisons historiques, mais nous avons abandonné. Nous n'arrivons pas à rendre les choses cohérentes.
Nous avons mordu à la balle et travaillons maintenant avec des barres d'une minute avec l'aide de OnTimer() et isNewBar().
Les choses commencent enfin à avoir un sens, et en plus, il reste encore 4 heures avant la date limite du championnat :)
JimNous avons finalement soumis notre EA avec environ 5 minutes d'avance sur la date limite.
Un backtest à son actif, et aucune optimisation.
N'ayant jamais fait cela auparavant, quelqu'un peut-il me dire s'il a encore une chance d'être approuvé ?
Si oui, serons-nous autorisés à modifier les paramètres d'entrée au cours de la semaine prochaine, ou non ?
Jim
Nous avons finalement soumis notre EA avec environ 5 minutes d'avance sur la date limite.
Un backtest à son actif, et aucune optimisation.
N'ayant jamais fait cela auparavant, quelqu'un peut-il me dire s'il a encore une chance d'être approuvé ?
Si oui, serons-nous autorisés à modifier les paramètres d'entrée au cours de la semaine prochaine, ou non ?
Jim
Bonne chance Jim !
Si votre EA a été backtesté correctement dans la période 2010.01.01 jusqu'à 2010.08.01 sans aucune erreur(erreurs de transaction, etc.) et avec un profit, alors vous serez probablement approuvé, à condition que vos informations personnelles soient également correctes. Cependant, vous ne pourrez plus rien modifier à partir de ce moment, y compris les réglages (paramètres d'entrée).
J'espère voir votre robot en action !
- Patrick