Toute question des nouveaux arrivants sur MQL4 et MQL5, aide et discussion sur les algorithmes et les codes. - page 1011
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
Quelle est la meilleure façon d'écrire l'algorithme ?
Tâche :
Un conseiller expert fonctionne sur différents graphiques.
J'ai besoin d'un fichier séparé contenant des informations minute par minute sur le compte, le solde, les fonds propres, etc.
Il s'avère maintenant que tous les conseillers experts écrivent toutes les informations dans un seul fichier. Par conséquent, nous avons beaucoup d'entrées inutiles.
Quelle est la solution originale possible, pour qu'un seul robot fasse des enregistrements dans le fichier (et, s'il était supprimé, l'autre robot commencerait à faire des enregistrements, etc.)
Créez un objet graphique dans OnInit() avec le nom de l'EA, ou tout autre objet. Peut-être que l'EA crée déjà un objet, vous pouvez l'utiliser, par exemple "MonEA" :ObjectCreate(0,"MonEA",OBJ_...,...))
Dans OnTick(), lorsque nous écrivons dans le fichier, nous devons vérifier le premier ID de graphique avec cette étiquette = cela signifie que c'est le premier conseiller expert installé dans le terminal, nous ne sommes pas intéressés par le reste.
Nous devons utiliser le dépassement :
Nous obtenons le premier graphique/symbole avec un conseiller expert installé dessus
Puis nous le comparons avec le premier Expert Advisor avant de l'écrire dans un fichier :
Ce n'est pas une construction facile, mais c'est mieux que d'écrire dans une variable globale.
Prenez la MA standard, changez le type de données du tampon, compilez et vérifiez dans la fenêtre de données du terminal (Ctrl+D).
ChartID() est écrit dans les variables globales du terminal avec une erreur. Quelle est cette absurdité ?
Essayez ce code :
Le résultat de l'exécution de ce code
Créez un objet graphique dans OnInit() avec le nom de l'EA ou tout autre objet, peut-être que l'EA crée déjà un objet, alors vous pouvez l'utiliser, supposons "MyEA" : ObjectCreate(0,"MyEA",OBJ_...,...))
Dans OnTick() où l'on écrit dans le fichier, nous devons vérifier le premier ID de graphique avec cette étiquette = cela signifie que c'est le premier conseiller expert installé dans le terminal, nous ne sommes pas intéressés par le reste.
Nous devons utiliser le dépassement :
Nous obtenons le premier graphique/symbole avec un conseiller expert installé dessus
Puis nous le comparons avec le premier Expert Advisor avant de l'écrire dans un fichier :
Ce n'est pas une construction facile, mais c'est mieux que d'écrire dans la variable globale
Oui, bonne idée.
Merci.
Question, que se passe-t-il si l'EA a été supprimé (par exemple à cause d'une erreur), mais que l'objet est resté. Que faire, si le graphique est complètement fermé, nous devons réaffecter l'EA "principal" ?
Oui, c'est une bonne idée.
Merci.
Question ensuite : Que se passe-t-il si l'EA a été supprimé (par exemple à cause d'une erreur), mais que l'objet est resté. Que faire si le graphique est fermé dans son intégralité, nous devons d'une manière ou d'une autre réaffecter le conseiller expert "principal" ?
Il n'y a qu'un seul cas d'erreur - si le conseiller expert a été supprimé accidentellement et que l'objet a été laissé, mais dans ma mémoire, je ne me souviens pas d'une telle erreur dans MT4. Dans tous les autres cas, le conseiller expert en chef sera réaffecté.
P.S. Essayez de vérifier que la fonction OnDeInit() sera émise en cas d'erreur dans le conseiller expert et s'effacera du graphique. Vous pouvez probablement le vérifier facilement en créant une variable, en comptant les ticks et en la divisant par 10/0 au 11ème tick.
Dans OnDeInit() définir Print et voir la cause de la désinitialisation, et si elle se produit, alors par cette cause/numéro supprimer l'objet "MyEA" du graphique
Vous pouvez écrire sur le résultat, car je n'ai pas le temps de le vérifier moi-même.
Créez un objet graphique dans OnInit() avec le nom de l'EA ou tout autre objet, peut-être que l'EA crée déjà un objet, alors vous pouvez l'utiliser, supposons "MyEA" : ObjectCreate(0,"MyEA",OBJ_...,...))
Dans OnTick() où l'on écrit dans le fichier, nous devons vérifier le premier ID de graphique avec cette étiquette = cela signifie que c'est le premier conseiller expert installé dans le terminal, nous ne sommes pas intéressés par le reste.
Nous devons utiliser le dépassement :
Nous obtenons le premier graphique/symbole avec un conseiller expert installé dessus
Puis nous le comparons avec le premier Expert Advisor avant de l'écrire dans un fichier :
Ce n'est pas une construction facile, mais c'est mieux que d'écrire dans une variable globale.
Je pense que vous vous trompez. Les GV ne sont pas écrits sur le disque à chaque fois. Sinon, il n'y aurait pas besoin de forcer GV sur le disque.
Et en plus de ça, parcourir tous les graphiques à la recherche de l'EA et de l'objet... Vitaly, c'est une déception...Je pense que vous vous trompez. Les GV ne sont pas écrits sur le disque à chaque fois. Sinon, nous n'aurions pas besoin de la fonction d'écriture forcée de GV sur le disque.
Oui plus de parcourir tous les graphiques à la recherche d'EA et d'objet.... Vitaly, c'est une vraie déception...Oui, ils le sont :GlobalVariableSet("GV",ID) ;
profils -> gvariables.dat
On peut aussi les écrire comme suit :GlobalVariableSet("GV",ID) ;
profils -> gvariables.dat
Lorsque vous le créez, peut-être, mais lorsque vous l'écrasez avant de désactiver l'application qui y écrit, vous devez vérifier. Je suis trop paresseux. Pourtant, de manière purement théorique, si elle devait être écrite sur le disque à chaque fois, la fonction ci-dessus serait un hochet.
Vous ne pouvez pas faire ça.
Recherchez un programme Windows qui synchronise les données dans des dossiers. Et configurez-le de manière à ce que l'Expert Advisor soit copié automatiquement sur un nouveau terminal.
D'après ce que j'ai compris, il existe de tels programmes, mais ils ne fonctionnent qu'avec des fichiers, mais si c'est un document texte, il ne copie pas le contenu et ne remplace pas les fichiers, peut-être que je n'ai pas trouvé un programme normal. C'est dommage que les développeurs n'aient pas envisagé l'option permettant de spécifier le chemin à partir duquel télécharger le fichier du conseiller expert ou du robot, je pensais pouvoir spécifier le chemin comme cela se fait habituellement, mais comme vous l'avez souligné ci-dessus, c'est impossible.
D'après ce que j'ai compris, il existe de tels programmes, mais ils ne fonctionnent qu'avec des fichiers, mais si c'est un document texte, il ne copie pas le contenu et ne remplace pas les fichiers, peut-être n'ai-je pas trouvé un programme normal. Je pense qu'il est dommage que les développeurs n'aient pas pris en compte la possibilité de définir le chemin d'accès au robot ou au fichier expert. Je pensais qu'il serait possible de définir le chemin d'accès comme cela se fait habituellement, mais comme vous l'avez déjà mentionné, ce n'est pas possible.
Notez dans ce post les mots "Tous les terminaux ont des dossiers partagés".
Ce n'est pas possible. Forum sur le trading, les systèmes de trading automatisés et le test des stratégies de trading.
Que dois-je faire si je veux utiliser un produit du marché ?
Sergey Tabolin, 2019.11.23 08:17
Vous pensez sérieusement que je ne sais pas comment et où installer ? )))
Tous les terminaux ont des dossiers communs
J'ai téléchargé un indicateur gratuit sur le marché. Il se lie au matériel.
Pourquoi cela fonctionne-t-il sur un matériel, mais pas sur l'autre ?
Conclusion évidente - il se lie, du moins pas seulement au matériel...
Cherchez des informations sur la façon de procéder et c'est parti... C'est ce qu'on appelle la liaison par dossier.