Horloge temps réel MQL4 (seconde par seconde) - page 4

 

Bien, mais ce n'est pas une solution en temps réel, car nous ne pouvons pas contrôler le temps de réponse pour les événements nontick.
Dans le cas de "sleep()", nous le pouvons.

 

Donc, si nous combinons le tic par tic et les prix périmés avec le sommeil, nous pouvons avoir une horloge en temps réel :)

 

Comme je l'ai dit, si cette solution est implémentée dans un EA, il n'y a plus besoin de TimeCurrent() et la boucle est contrôlée par Sleep(Interval-Runtime) (en ms).

La plupart du code reste le même, redraw() ne sera plus nécessaire. De plus, si vous avez besoin d'augmenter la vitesse du code, vous pouvez utiliser des tableaux avec un point zéro de rotation pour vous débarrasser de la boucle de décalage.

AFAIK cette solution (ou une solution similaire) est la meilleure qui puisse être réalisée en MQL pur dans un indicateur. Il existe sûrement une meilleure solution lorsque vous utilisez une DLL et exportez les calculs dans un programme externe.

 
spidermagos:

Donc, si nous combinons le tic par tic et les prix périmés avec le sommeil, nous pouvons avoir une horloge en temps réel :)

Oui, mais le Sleep n'est pas possible dans les Indicateurs, c'est votre problème depuis le début de ce fil.
 
zzuegg:
Oui, mais Sleep n'est pas possible dans les indicateurs, c'est votre problème depuis le début de ce fil de discussion.

Est-ce qu'un EA peut appeler un indicateur ?
 
Oui, mais seulement par le biais d'icustom, ce qui ne résoudra pas votre problème.
 
Vous pouvez attacher un script au graphique qui envoie un faux tick toutes les secondes au graphique. C'est ce que je fais habituellement pour mettre à jour les indicateurs multi-paires et les EAs à intervalles réguliers.
 
7bit:
Vous pouvez attacher un script au graphique qui envoie un faux tick toutes les secondes au graphique. C'est ce que je fais habituellement pour mettre à jour les indicateurs multi-paires et les EAs à intervalles réguliers.
Vous avez besoin d'une dll pour cela ou c'est possible sans ?
 
zzuegg:
Vous avez besoin d'une dll pour cela ou c'est possible sans ?

C'est juste une poignée de lignes dans mql4 (bien sûr vous avez besoin d'appels de DLL autorisés pour appeler l'API de Windows, mais vous n'avez pas besoin d'installer quoi que ce soit) :

/**
* MT4/experts/scripts/ticks.mq4
* send a fake tick every 1000ms to the chart and
* all its indicators and EA until this script is removed.
*/

#property copyright "© Bernd Kreuss"

#import "user32.dll"
   int PostMessageA(int hWnd, int Msg, int wParam, int lParam);
   int RegisterWindowMessageA(string lpString);
#import

int start(){
   int hwnd = WindowHandle(Symbol(), Period());
   int msg = RegisterWindowMessageA("MetaTrader4_Internal_Message");
   while(!IsStopped()){
      PostMessageA(hwnd, msg, 2, 1);
      Sleep(1000);
   }
}

J'ai ce script dans mes favoris et quand j'ai besoin de ticks, je le fais simplement glisser sur le graphique.


J'ai aussi une variante de ce script sans la boucle qui n'envoie qu'un tick puis sort et j'ai lié ce script (one_tick.mq4) au raccourci clavier ALT+T et maintenant je peux envoyer un tick au graphique actif en appuyant simplement sur ALT-T. J'en ai besoin pour certains de mes EAs stat-arb lors de mes expérimentations pendant le week-end afin d'appliquer start() pour déclencher leurs calculs et le traçage de leurs graphiques (je peux déplacer les lignes sur le graphique pour changer l'intervalle et ensuite j'ai besoin d'un nouveau tick pour mettre à jour leurs calculs).

 

Merci pour le partage.