Erreurs, bugs, questions - page 1564

 
Anton Zverev:

Vasiliy a indiqué que sur FORTS (pas dans le testeur), le mécanisme fonctionne par abonnement et BookEvent. Il n'est donc pas nécessaire de lier l'EA à un quelconque graphique.

BookEvent n'est pas encore implémenté dans le testeur
 
Slawa:

Pourquoi faire un communiqué à un indicateur ?

Laissez-le envoyer un événement graphique à l'expert testé à chaque nouveau tic-tac.

Créer un indicateur à chaque tick et le publier ensuite - c'est un gaspillage de ressources.

Je ne suis pas très doué pour m'exprimer, donc vous ne comprenez pas. Cliquez ici pour plus de détails https://www.mql5.com/ru/code/280

Et combien de ressources cette solution consomme-t-elle pour mettre en œuvre une chose aussi simple !

Мультивалютный обработчик событий OnTick(string symbol)
Мультивалютный обработчик событий OnTick(string symbol)
  • votes : 27
  • 2011.02.01
  • Konstantin Gruzdev
  • www.mql5.com
Упрощенная реализация полноценного мультивалютного режима в MetaTrader 5. Нет необходимости вникать в то, как это работает. Минимум простых настроек. Максимум удобства для пользователей. Работает в тестере.
 
Slawa:
BookEvent n'a pas encore été implémenté dans le testeur
Alors, à quoi sert-il dans le testeur s'il ne fonctionne même pas sur le marché des changes ? Vasiliy a fait ce que je pense être une suggestion judicieuse ci-dessus.
 
Slawa:

Et ne pas tourner en boucle pendant une seconde, mais pendant un peu moins d'une heure. Avec vérification obligatoire de IsStopped()

Le sommeil, d'ailleurs, est obligatoire. Sinon, vous allez accrocher le testeur. Et les ressources du système seront ravagées pendant le fonctionnement normal du conseiller expert.

Ne testez même pas votre variante

2016.04.26 19:39:05     Core 1  2016.04.25 00:16:48   infinite Sleep loop detected while testing
2016.04.26 19:39:05     Core 1  EURUSD : 2016.04.25 00:00 - 2016.04.26 00:00  1439 minute bars absent in total while real ticks present
2016.04.26 19:39:05     Core 1  EURUSD : real ticks begin from 2016.01.04 00:00:00
2016.04.26 19:39:05     Core 1    SleepPause=10
2016.04.26 19:39:05     Core 1    TimerInterval=1000

Code

sinput uint TimerInterval = 1000; // Через сколько секунд вызывать OnTimer
sinput uint SleepPause = 10;      // На сколько милисекунд делать Sleep
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnInit()
  {
   EventSetTimer(TimerInterval);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnTimer()
  {
   const uint Amount=TimerInterval*1000/SleepPause;

   for(uint i=0;(i<Amount) && (!IsStopped()); i++)
      Sleep(SleepPause);
  }
//+------------------------------------------------------------------+
 
Anton Zverev:

Pas même pour tester votre option

Code

Et qu'est-ce que vous testiez ici ?
 
Slawa:
Et qu'est-ce que vous testiez ici ?
J'exécute ce code dans le testeur. J'obtiens un blocage avec uneboucle Sleep infinie détectéependant le test.
 
Anton Zverev:
Je lance ce code dans le testeur. J'ai des blocages avec uneboucle Sleep infinie détectée pendant le test.

On l'a souvent dit : "Lisez la documentation".

N'avez-vous pas dit, "J'ai lu toute la documentation. Plusieurs fois" ?

Avez-vous lu ceci? Il semble que vous n'ayez pas...

Si l'heure actuelle dans le testeur dépasse la fin de la période de test lorsque la fonction Sleep() est exécutée, vous obtiendrez une erreur "une boucle infinie dans Sleep". Si une telle erreur se produit, les résultats des tests ne sont pas écartés, tous les calculs sont effectués dans leur intégralité (montant des transactions, drawdown, etc.) et les résultats sont transmis au terminal.

 
Slawa:

Avez-vous lu ceci?

Je l'ai fait et je l'ai lu très attentivement. Le fait est que si Sleep est utilisé dans OnTimer, le programmeur ne peut pas déterminer quand il quitte l'intervalle de test. IsStopped (je l'ai mis dans le code en une fois à cause de la lecture de la documentation) ne fonctionne pas au moment de la sortie. A qui la faute ?
 
Slawa:

Pour ce qui est des tics manquants dans la boucle de OnTimer, il faut des preuves reproductibles. Vous les avez ?

Vous l'avez écrit dans la documentation!

Chez le testeur, les appels Sleep() ne retardent pas le processus de test. En appelant Sleep(), les ticks générés sont "joués" dans le délai spécifié, ce qui permet de déclencher des ordres en attente, des stops, etc. Après avoir appelé Sleep(), le temps modélisé dans le testeur est augmenté de l'intervalle spécifié dans le paramètre de la fonction Sleep.

Ainsi, le conseiller expert ne peut pas être appelé à chacun de ces ticks. La preuve est-elle acceptée ?

 
Anton Zverev:

Vous avez écrit à ce sujet dans la documentation!

Il n'y a aucun moyen de faire en sorte que l'EA appelle sur chacun de ces tics. La preuve est-elle acceptée ?

Vous êtes sérieux ?

Lorsque le tick est joué, il est chaud, et vous pouvez l'appeler immédiatement en utilisant la requête SymbolInfoTick. J'ai tout de suite écrit sur cette possibilité. Si vous voulez, vous pouvez faire Sleep(1) au lieu de Sleep(10).