Emulation des ticks d'un EA/indicateur - page 2

 
Meat:

Votre code, tout d'abord, ne se contente pas d'émuler un tick, mais force une mise à jour du graphique avec le chargement de l'historique correspondant à chaque tick. Est-ce que vous regardez parfois le fichier journal ? Regardez-le à votre guise et voyez ce qui s'y passe. Et estimez ce qui sera là dans un jour ou deux. Sans parler de la charge sur votre système et votre canal Internet.

Si, au lieu de mettre à jour le graphique dans votre code, nous émulons le tick, cela entraînera des boucles (c'est-à-dire que l'indicateur démarrera sans s'arrêter) et, par conséquent, le terminal se bloquera.

Pourquoi dois-je mettre à jour sans charger l'historique ? Le rafraîchissement forcé du graphique est une émulation de tics.

Voici le journal après 2500 ticks :

00:51:32 Check_UpdateChart EURUSD,M1 : chargé avec succès
00:52:48 Check_UpdateChart EURUSD,M1 : uninit reason 1
00:52:48 Check_UpdateChart EURUSD,M1 : supprimé

Rien n'est suspendu. L'émulation est faite pour que l'indicateur tourne en boucle. En d'autres termes, il se déclenche lui-même.
 
Zhunko:

Pourquoi faut-il mettre à jour sans charger l'historique ? Forcer le graphique à se mettre à jour est une émulation de tics.

Voici le journal après 2500 ticks :

00:51:32 Check_UpdateChart EURUSD,M1 : chargé avec succès
00:52:48 Check_UpdateChart EURUSD,M1 : uninit reason 1
00:52:48 Check_UpdateChart EURUSD,M1 : supprimé

Rien n'est suspendu. L'émulation est faite pour que l'indicateur tourne en boucle. C'est-à-dire qu'elle se met en marche toute seule.


Je pensais l'avoir écrit clairement : "log log". Alors pourquoi me montrez-vous le journal des experts ? Apparemment, j'avais raison, vous ne regardez jamais là. Je ne serais pas surpris que la moitié de votre disque dur soit remplie de ces journaux :)

La mise à jour de l'historique et l'émulation des ticks sont deux choses différentes. Les ticks entrants du serveur ne mettent pas à jour l'historique (c'est-à-dire les barres précédentes). Si c'était le cas, le terminal gaspillerait beaucoup de trafic et de ressources.

Par conséquent, la raison pour laquelle vous devez le mettre à jour à chaque tick n'est pas claire, ce qui remet IndicatorCounted() à zéro, et nécessite donc de vérifier l'historique complet à chaque tick. C'est beaucoup de ressources qui sont gaspillées.

 
Meat:

Les ticks entrants du serveur ne mettent pas à jour l'historique (c'est-à-dire les barres précédentes), sinon le terminal consommerait beaucoup de trafic et de ressources.

Que faire, si par exemple 1 barre = 2 ticks ))))) ? Dans mon cas, les tiques mettent à jour l'historique ?
 
IgorM:

placé après

Je l'ai eu dans le journal :

23:39:01 test EURUSD,H1 : chargé avec succès
23:39:01 test EURUSD,H1 : PostMsgAddr =1977398342
23:39:01 test EURUSD,H1 : initialisé
23:39:01 test EURUSD,H1 : cycle terminé....

Ouais, ce n'est pas clair ce qui se passe... Essayez ceci alors : Dans la section d'importation #import"user32.dll" ajouter une fonction :

CallWindowProcA(int lpPrevWndFunc[], int hWnd, int Msg, int wParam, int lParam);

Et à la fin de la fonction SetMyTimer, ajoutez une ligne : CallWindowProcA(code,0,0,0,0,0) ;

Et avec un indicateur parallèle, vérifiez si un tick est généré à ce moment.

 
solar:
Que faire si j'ai par exemple 1 barre = 2 ticks ))))) Dans mon cas, les tics mettent à jour l'historique ?
Bien sûr, le bar actuel est toujours mis à jour, mais nous parlions de l'histoire en général.
 
Meat:


Je l'ai écrit clairement : "le journal". Apparemment, j'avais raison, vous n'y regardez jamais - je ne suis pas surpris si la moitié de votre disque dur est déjà remplie de ces journaux :)

Et ne confondez pas les concepts. Lamise à jour de l'historique et l'émulation des tics sont des choses différentes. Les ticks entrants du serveur ne mettent pas à jour l'historique (c'est-à-dire les barres précédentes), sinon le terminal consommerait d'énormes quantités de trafic et de ressources.

Par conséquent, la raison pour laquelle vous devez le mettre à jour à chaque tick n'est pas claire, ce qui remet IndicatorCounted() à zéro, et nécessite donc de vérifier l'historique complet à chaque tick. C'est beaucoup de ressources qui sont gaspillées.

Le journal est vide aussi, mais pour une autre raison. J'utilise le nettoyeur de console après l'échange de l'historique. J'ai mon propre journal.

Le journal MT4 ne me dérange pas du tout. Metacquotes a déclaré à plusieurs reprises que l'exploitation forestière est la dernière chose à faire. Ce n'est pas une priorité. Il ne consomme pas de ressources. Il faut juste qu'il soit nettoyé à temps, c'est tout.

Quant à IndicatorCounted()... Je ne l'utilise pas. Mes indicateurs sont des boîtes vides pour extraire des informations du conseiller expert. Je pense qu'il est dommageable d'utiliser des indicateurs dans MT4. Les fils de l'interface sont lents et ils fonctionnent 3 fois plus lentement que les conseillers experts.

Le surlignage est bien sûr correct, mais vaut-il la peine de se donner tant de mal pour la séparation ?

Voici le journal de bord des 415 mises à jour :

03:00:44 Indicateur personnalisé Check_UpdateChart EURUSD,M1 : chargé correctement.
03:00:46 HistoryCenter : synchroniser 'EURUSD1
03:00:46 HistoryCenter : 2 barres importées dans 'EURUSD1'.
03:00:47 HistoryCenter : synchroniser 'EURUSD1'.
03:00:47 HistoryCenter : 2 barres importées dans 'EURUSD1'.
03:00:47 HistoryCenter : synchroniser 'EURUSD1'.
03:00:47 HistoryCenter : 2 barres importées dans 'EURUSD1'.
03:00:48 HistoryCenter : synchronisation de l'EURUSD1
03:00:48 HistoryCenter : 2 barres importées dans 'EURUSD1'.
03:00:48 HistoryCenter : synchronisation de l'EURUSD1
03:00:49 HistoryCenter : 2 barres importées dans 'EURUSD1'.
03:00:49 HistoryCenter : synchroniser 'EURUSD1'.
03:00:49 HistoryCenter : 2 barres importées dans 'EURUSD1'.
03:00:50 HistoryCenter : synchroniser 'EURUSD1'.
03:00:50 HistoryCenter : 2 barres importées dans 'EURUSD1'.
03:00:51 HistoryCenter : synchronisation de l'EURUSD1
03:00:51 HistoryCenter : 2 barres importées dans 'EURUSD1'.
03:00:51 HistoryCenter : synchronisation de l'EURUSD1
03:00:52 HistoryCenter : 2 barres importées dans 'EURUSD1'.
03:00:52 HistoryCenter : synchronisation de l'EURUSD1
03:00:55 HistoryCenter : 2 barres importées dans 'EURUSD1'.
03:00:55 HistoryCenter : synchronisation de l'EURUSD1
03:00:55 HistoryCenter : 2 barres importées dans 'EURUSD1'.
03:00:55 HistoryCenter : synchronisation de l'EURUSD1
03:00:55 HistoryCenter : 2 barres importées dans 'EURUSD1'.
03:00:55 HistoryCenter : synchronisation de l'EURUSD1
03:00:56 HistoryCenter : 2 barres importées dans 'EURUSD1'.
03:00:56 HistoryCenter : synchronisation de l'EURUSD1
03:00:57 Indicateur personnalisé Check_UpdateChart EURUSD,M1 : supprimé
03:00:59 HistoryCenter : 2 barres importées dans 'EURUSD1'.
03:01:01 MetaTrader build 438 arrêté

Cela ne me semble pas important pour tester les performances de l'indicateur pendant le week-end. La bûche peut être nettoyée manuellement après le travail.

Mais il est plus facile d'insérer une ligne de code à la fin de start() que d'insérer votre code. Il ne sert à rien de compliquer les choses.

 

J'ai XP - cela semble fonctionner - puis cela fait planter le terminal .....

Que ce soit dans le code de l'indicateur - ou dans le code de l'EA - ou tout seul - le résultat est le même - le terminal se plante après environ 15 - 50 secondes ...

Donc vous avez un problème...

mais ce n'est pas une mauvaise idée...

 

Existe-t-il un moyen de le rendre similaire pour un indicateur ?

En pointant simplement le curseur sur le moment où je veux voir la lecture de l'indicateur (à ce moment-là) ?

 

Zhunko, eh bien, si tout est non-standard (votre propre journal, votre propre implémentation des indicateurs, etc.), alors pourquoi lancez-vous toute cette conversation ? En fait, nous discutons du travail spécifiquement avec MT4, et non de nos propres développements.

Dans mon premier message, j'ai spécifiquement indiqué que mon code sera utile si la tâche consiste à se passer de liens externes, c'est-à-dire à mettre en œuvre un conseiller expert/indicateur autonome qui n'utilise que des bibliothèques système. Et si vous utilisez vos propres développements, alors il ne vous est pas applicable.

Et en général, je ne comprends pas pourquoi je dois "nettoyer manuellement le journal après le travail", s'il est plus simple de ne pas l'encombrer. Après tout, d'après ce que j'ai compris, vous implémentez vos développements en DLL. Alors qu'est-ce qui vous empêche d'y installer le même minuteur, comme je l'ai suggéré ici. Mais pour une raison quelconque, vous préférez toutes sortes de danses avec tambourin et le nettoyage du journal. Mon code vous dérange, alors que vous êtes trop paresseux pour nettoyer le journal tous les jours :)

 
elmucon:

J'ai XP - cela semble fonctionner - puis cela fait planter le terminal .....

Que ce soit dans le code de l'indicateur - ou dans le code de l'EA - ou tout seul - le résultat est le même - le terminal se plante après environ 15 - 50 secondes ...

Donc vous avez un problème...

mais ce n'est pas une mauvaise idée...


Oui, c'est peut-être un peu exagéré. Je ne suis pas un expert en assembleur, alors ne me jugez pas trop sévèrement :) Je vais essayer de comprendre quel est le problème.