Toute question des nouveaux arrivants sur MQL4 et MQL5, aide et discussion sur les algorithmes et les codes. - page 618
Vous manquez des opportunités de trading :
- Applications de trading gratuites
- Plus de 8 000 signaux à copier
- Actualités économiques pour explorer les marchés financiers
Inscription
Se connecter
Vous acceptez la politique du site Web et les conditions d'utilisation
Si vous n'avez pas de compte, veuillez vous inscrire
Je vous ai dit directement que vous ne devriez pas enseigner aux autres quand vous n'avez aucune idée vous-même.
L'aide doit être "qualifiée", pas "de la rue" !
Décrivez à nouveau le problème, ce qui est nécessaire.
Décrivez à nouveau la tâche, exactement ce qui est nécessaire.
Je suis intéressé par la possibilité de transférer des données dans MT4/MT5 entre différents modules.
Par exemple :
Comment transférer les données d'un indicateur à un autre ?
Comment transférer les données d'un indicateur vers un script ?
Comment transférer les données de l'indicateur vers le Conseiller Expert? etc... ... et ainsi de suite.
Le simple fait d'ajouter les données transférées à un fichier séparé, puis de lire ces données à partir du fichier dans d'autres modules, est une façon évidente et courante de les transférer.
Mais dans ce cas, il y a un problème de synchronisation des données transférées/lues.
Intuitivement, je suppose que le terminal MT4/MT5 doit disposer d'une certaine zone de mémoire tampon partagée et qu'il doit exister des procédures qui régissent l'échange de données dans cette zone.
Mais je n'ai rien trouvé de tel dans la description.
Je suis intéressé par la procédure de transfert MT4/MT5 entre différents modules.
Par exemple :
Comment transférer les données d'un indicateur à un autre ?
Comment transférer les données d'un indicateur vers un script ?
Comment transférer les données de l'indicateur vers le Conseiller Expert ? etc... ... et ainsi de suite.
Le simple fait d'ajouter les données transférées à un fichier séparé, puis de lire ces données à partir du fichier dans d'autres modules, est une façon évidente et courante de les transférer.
Mais dans ce cas, il y a un problème de synchronisation des données transférées/lues.
Intuitivement, je suppose que le terminal MT4/MT5 doit disposer d'une certaine zone de mémoire tampon partagée et qu'il doit exister des procédures qui régissent l'échange de données dans cette zone.
Mais je n'ai rien trouvé de tel dans la description.
Eh bien, le transfert de données peut être effectué par le biais d'un fichier ou d'une variable globale du terminal.
Si c'est une variable globale :
C'est le moyen le plus simple d'échanger entre tous les programmes d'un même terminal.
Eh bien, le transfert de données comme écrit précédemment peut être via un fichier, ou une variable globale du terminal.
Si c'est une variable globale :
C'est le moyen le plus simple d'échanger entre tous les programmes d'un même terminal.
Ok. Écrivons dans l'indicateur une expression :
GlobalVariableSet("Sname", 123.25) ; Cet événement se produit, par exemple, onTick().
Mais les scripts ne fonctionnent pas avec les tableaux de données et n'ont pas d'événement OnTick(). Comment le script sait que l'événement OnTick() s'est produit et qu'il doit appliquer la procédure pour obtenir de nouvelles données.
GlobalVariableGet("Sname") ;
Vous pouvez utiliser l'événement OnTimer() au lieu de OnTick(). Mais le script a son propre OnTimer(), alors que l'indicateur a le sien, donc ils ne sont pas liés l'un à l'autre.
Voici le problème :
Comment s'assurer que les événementsGlobalVariableSet("Sname", 123.25) ; et GlobalVariableGet("Sname") ; sont synchrones?
Ou existe-t-il une procédure qui contrôle le changement de la valeur "Sname" ? Comme OnChange.
C'est-à-dire, comment le script sait-il que l'indicateur a changé la valeur de "Sname", et que cette valeur est devenue 125,35 ?
Où est le pont entreGlobalVariableSet("Sname", 123.25) ; et GlobalVariableGet("Sname") ; ?
Ils sont dans des programmes différents.
OK. Écrivons une expression dans l'indicateur :
GlobalVariableSet("Sname", 123.25) ; Cet événement se produit, par exemple, lorsque OnTick().
Mais les scripts ne fonctionnent pas avec les tableaux de données, et ils ne disposent pas de l'événement OnTick(). Comment le script sait que l'événement OnTick() s'est produit et qu'il doit appliquer la procédure pour obtenir de nouvelles données.
GlobalVariableGet("Sname") ;
Vous pouvez utiliser l'événement OnTimer() au lieu de OnTick(). Mais le script a son propre OnTimer(), tandis que l'indicateur a le sien et ils ne sont pas liés.
Voici le problème :
Comment s'assurer que les événementsGlobalVariableSet("Sname", 123.25) ; et GlobalVariableGet("Sname") ; sont synchrones?
Ou existe-t-il une procédure qui contrôle le changement de la valeur "Sname" ? Comme OnChange.
C'est-à-dire, comment le script sait-il que l'indicateur a changé la valeur de "Sname", et que cette valeur est devenue 125,35 ?
Où est le pont entreGlobalVariableSet("Sname", 123.25) ; et GlobalVariableGet("Sname") ; ?
Ils sont dans des programmes différents.
Le lien de connexion est un disque dur d'ordinateur. Record Je pense que le problème n'est pas, et vous pouvez l'obtenir dans tous les cas, même dans le script, il ne diffère pas de la façon dont vous obtenez la valeur actuelle ASK et BID
P.S. Je joins un indicateur et un script par exemple, dans l'indicateur on enregistre les volumes en tick
Indicateur
Script
Le lien de connexion est le disque dur de l'ordinateur. Je pense que ce ne sera pas un problème de l'écrire, mais vous pouvez l'obtenir à partir de n'importe quel événement, même dans un script, ce n'est pas différent de la façon dont vous obtenez les valeurs ASK et BID actuelles.
Cool !
Et comment le faire ?
Donnez-moi un exemple.
Par exemple, comment simuler un tel cas.
L'indicateur reçoit des données, calcule la variance des données et prépare les coordonnées du point d'ellipse pour le script (4 variables globales Q1,Q2,T1,T2 à passer au script).
Maintenant l'indicateur doit donner une commande au script qui dessine l'ellipse en utilisant ces variables globales.
Comment l'indicateur peut-il le faire ?
Le lien de connexion est le disque dur de l'ordinateur. Je pense que ce ne sera pas un problème à enregistrer, mais vous pouvez l'obtenir à partir de n'importe quel événement, même dans le script, il ne diffère pas de la façon dont vous obtenez les valeurs actuelles de ASK et BID.
P.S. Je joins un indicateur et un script par exemple, dans l'indicateur on enregistre les volumes en tick
Indicateur
Script
Dans votre exemple, le script ne fonctionne qu'une seule fois - au démarrage, c'est-à-dire lorsque l'événement OnStart() se produit.
Et puis comment ?
Où est la synchronisation ?
Comment faire pour que le script fonctionne de manière synchrone avec l'indicateur ?
Par exemple, comment activer le script lorsque les volumes dépassent une certaine valeur ?
Ainsi, dans votre exemple, le script ne fonctionne qu'une seule fois - au démarrage, c'est-à-dire lorsque l'événement OnStart() se produit.
Et puis comment ?
Où est la synchronisation ?
Comment faire pour que le script fonctionne de manière synchrone avec l'indicateur ?
Par exemple, comment activer le script lorsque les volumes dépassent une certaine valeur ?
C'est à vous de décider comment travailler avec le script. Ne serait-il pas plus facile de créer un conseiller expert plutôt qu'un script ?
Un indicateur qui donne des valeurs :
Un exemple simple de script en boucle :
P.S. J'ai corrigé le code.
C'est à vous de décider comment travailler avec le script. Ne serait-il pas plus facile pour vous de créer une EA plutôt qu'un script ?
Un indicateur qui donne des valeurs :
Un exemple simple de script en boucle :
J'ai compris que dans MQL il n'y a pas de possibilité de synchroniser différents modules.
Ok. Alors voici une question. Et si je place le bouton sur le champ et que j'envoie le script à ce bouton ?
Cette possibilité existe-t-elle dans MQL ou n'existe-t-elle pas non plus ?
Après tout, le script doit être lancé d'une manière ou d'une autre !
Je comprends que dans MQL il n'y a pas de possibilité de synchroniser différents modules.
Ok. Alors voici une question. Et si je place le bouton sur le champ et que je place le script sur ce bouton.
Existe-t-il une telle possibilité dans MQL ? Ou bien cette possibilité n'existe-t-elle pas non plus ?
Le script doit être lancé d'une manière ou d'une autre !
Lesujet est ancien, mais on peut toujours le lire, ou peut-être que quelqu'un suggérera quelque chose de nouveau. Je n'exécute pas de scripts, et ne travaille pas du tout avec eux)