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

 
7bit:

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) :

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).


7 Je n'ai jamais utilisé d'importations de dll donc pouvez-vous s'il vous plaît expliquer ce qui suit.

+ Faut-il inclure les fichiers dll dans le dossier du client Meta Trader?

+ Comment pouvons-nous activer cet EA depuis le client MT ?

Veuillez nous donner quelques exemples d'importations de DLL dans Meta Trader.

 
spidermagos:


7 Je n'ai jamais utilisé d'importations de dll alors pouvez-vous m'expliquer ce qui suit.

+ Faut-il inclure les fichiers dll dans le dossier du client Meta Trader ?

+ Comment pouvons-nous activer cette EA depuis le client MT ?

Veuillez nous donner quelques exemples d'importation de DLL dans Meta Trader.

Je suis désolé de vous informer qu'il vous sera totalement impossible d'en faire un usage quelconque (ou même de comprendre à quoi il pourrait servir) à moins que vous n'appreniez à lire un texte de plus de 140 caractères.

Pour commencer, vous pourriez essayer d'extraire le sens du texte que vous venez de citer dans votre dernier message. Vous découvrirez alors que je l'ai décrit comme un script et non comme un EA, de plus vous découvrirez à votre grande surprise que j'ai écrit qu'il n'est pas nécessaire d'installer de dlls et vous pourriez même être capable de trouver les parties du texte où j'ai expliqué comment il est censé être utilisé.

 
7bit:

Je suis désolé de vous informer qu'il vous sera totalement impossible d'en faire le moindre usage (ou même de comprendre à quoi il pourrait servir) à moins que vous n'appreniez à lire un texte de plus de 140 caractères.

Pour commencer, vous pourriez essayer d'extraire le sens du texte que vous venez de citer dans votre dernier message. Vous constaterez alors que je l'ai décrit comme un script et non comme un EA, de plus vous constaterez à votre grande surprise que j'ai écrit qu'il n'y a pas besoin d'installer de dlls et vous pourrez peut-être même trouver les parties du texte où j'ai expliqué comment il est censé être utilisé.

J'admire votre arrogance, vos compétences en anglais et probablement votre exemple de codage.

Mais résoudre un problème sans fournir de solution, c'est juste éviter la question.

7 bit au lieu de remettre en question mes capacités et techniques de lecture, pourquoi n'écrivez vous pas le programme entier et prouvez vous. au lieu de philosopher !

Savez-vous comment faire une horloge en temps réel seconde par seconde ou pas ? c'est la question ? cette horloge devrait être dans le graphique ?

 

vous pouvez simplement additionner 2 et 2.

Utilisez le code de 7bit pour générer de faux ticks en combinaison avec le code que j'ai posté et vous avez tout ce dont vous avez besoin.

et au fait, 7bit semble être l'un des meilleurs programmeurs qui participent à ce forum...

//z

 

spidermagos:

J'admire votre arrogance

Merci.


spidermagos:

pourquoi n'écrivez-vous pas tout le programme et faites vos preuves. au lieu de philosopher !

Le script est complet et fonctionne de manière autonome, exactement selon les spécifications que j'ai données.

Je l'ai posté comme une suggestion pour résoudre le problème des indicateurs qui ne sont pas autorisés à utiliser des appels bloquants comme sleep() et qu'il n'existe pas non plus d'autre moyen de générer des événements de minuterie à partir de l'indicateur lui-même. Ce sous-problème exact de l'ensemble du problème de l'horloge a été mentionné immédiatement avant dans ce fil et je n'ai abordé que cela et rien d'autre. Il peut être traité comme un problème complètement indépendant en soi et mon script est une solution générique (et complètement indépendante) pour lui et peut également être appliqué dans de nombreux scénarios similaires, et j'ai même donné un exemple pour un cas d'utilisation différent.

Si tu veux écrire du code, tu dois apprendre à décomposer un problème et tu dois aussi être capable de reconnaître immédiatement une solution et aussi une solution partielle quand tu tombes dessus.

 
//< This is EA : Compile and run in folder "/experts" >
 
 
int start()
{
static int iClockPeriod = 1000 ;
 
static int iTimeStamp          ;
static int iRunTime            ;
 
while  ( ! IsStopped () )
       {
           iTimeStamp = GetTickCount ()                             ;
           Comment    ( TimeToStr ( TimeLocal () , TIME_SECONDS ) ) ;
           iRunTime   = GetTickCount () - iTimeStamp                ;
           Sleep      ( iClockPeriod    - iRunTime                ) ;
       }
}
//</This is EA : Compile and run in folder "/experts" > 

//< This is Indicator : Compile and run in folder "/experts/indicators" >
#property  indicator_chart_window
 
int start()
{
static int iClockPeriod = 1000 ;
 
static int iTimeStamp          ;
  
  
if     ( ( GetTickCount () - iTimeStamp ) < iClockPeriod )   return ;
       {
           iTimeStamp = GetTickCount ()                             ;
           Comment    ( TimeToStr ( TimeLocal () , TIME_SECONDS ) ) ;
  
 
       }
}
//</This is Indicator : Compile and run in folder "/experts/indicators" > 

Exécutez ces programmes dans différents graphiques.

 
Ais:

Exécutez ces programmes dans différents graphiques.


Ais ; 7bit a raison, cela ne fonctionnera pas ! la fonction de démarrage est tick par tick.

des importations de dll sont nécessaires pour résoudre ce problème. ...

i.e. appeler des scripts à partir d'indicateurs

 
7bit:

Merci.


Le script est complet et fonctionne de manière autonome, exactement selon les spécifications que j'ai données.

Je l'ai posté comme une suggestion pour résoudre le problème des indicateurs qui ne sont pas autorisés à utiliser des appels bloquants comme sleep() et qu'il n'existe pas non plus d'autre moyen de générer des événements de minuterie à partir de l'indicateur lui-même. Ce sous-problème exact de l'ensemble du problème de l'horloge a été mentionné immédiatement avant dans ce fil et je n'ai abordé que cela et rien d'autre. Il peut être traité comme un problème complètement indépendant en soi et mon script est une solution générique (et complètement indépendante) pour lui et peut également être appliqué dans de nombreux scénarios similaires, et j'ai même donné un exemple pour un cas d'utilisation différent.

Si vous voulez écrire du code, vous devez apprendre la décomposition du problème et vous devez aussi être capable de reconnaître immédiatement une solution et aussi une solution partielle quand vous tombez dessus.



7bit - comment appeler un script à partir d'un indicateur ?

Pouvez-vous donner un exemple ?

 
spidermagos:

Je crois savoir que la fonction Start() fonctionne tic-tac par tic-tac.

Existe-t-il un moyen d'utiliser les données en temps réel de l'horloge de l'ordinateur et de les mettre à jour toutes les secondes ? Pas tic par tic mais toutes les secondes ?

Si oui, veuillez m'aider.

Merci

Bonjour, vous pouvez utiliser une application séparée d'envoi de tics au lieu d'un script (il y en a plusieurs gratuits ; google "mt4 tick sender") et faire en sorte qu'elle génère des tics toutes les 200ms environ....Ensuite, assurez-vous que l'horloge de votre PC est synchronisée fréquemment et utilisez TimeLocal() + hour_difference_between_yourtimezone_and_servertimezone * 3600 au lieu de TimeCurrent() car avec les ticks générés, vous forcez "seulement" l'exécution de Start(), TimeCurrent() ne se mettra PAS à jour à moins que le tick ne provienne de votre broker.De cette façon, vous obtiendrez l'heure de votre courtier seconde par seconde. Cela fonctionne à la fois pour les indicateurs et les EA. Le fait amusant est qu'il y a quelques courtiers dont les serveurs ne sont pas synchronisés, ils ont un décalage de plusieurs secondes mais seulement l'horodatage, malheureusement pas le prix, des bougies différentes, M1 complètement différent parfois quand il y a un momentum, lol.
 

Tout d'abord, mettez la logique que vous avez au départ dans une fonction.

Ensuite, créez une boucle while dans le init() avec un sleep et appelez la fonction à partir de là. N'oubliez pas que sleep est exprimé en millisecondes.

Cela vous permettra de contrôler le timing au lieu d'attendre un changement de prix.

Cela fonctionne parfaitement si la logique de votre programme est correcte. Le seul problème est que vous ne pouvez pas l'exécuter dans le backtester. Faites vos tests en utilisant d'abord la fonction Start() puis passez à la fonction init().

Raison: