Besoin d'aide de la part des développeurs et programmeurs MT4 - page 3

 
Un expert fixé est un mauvais ton.
 
Integer:

2. A mi-chemin de la nouvelle fiche. Auparavant, la fenêtre des propriétés de l'Expert Advisor en boucle ne s'ouvrait pas. Maintenant, c'est le cas, et il serait bon qu'il y ait maintenant une réaction aux changements de paramètres. Ou bien, la fenêtre des propriétés pourrait être fermée pour éviter toute confusion pour l'utilisateur.

Exactement ! C'est ce que j'essaie de dire, mais personne ne l'entend.

Le "service desk" a refusé, car je pense qu'ils ne comprenaient pas du tout la situation. Voici un extrait du message de demande :

Pourquoi diriez-vous à un programmeur ce qu'il peut ou ne peut pas faire ? La diffusion s'est déroulée sans erreur. L'exécution se déroule sans erreur. L'utilisateur voit "A=5" dans l'onglet des paramètres d'entrée, et le système donne "A=1" au conseiller expert. L'utilisation de la boucle start() ou while() est une question de goût. La boucle n'est pas infinie, comme vous le prétendez. Si vous avez regardé attentivement le texte de l'Expert Advisor, ce n'est pas while(true), mais while(!IsStopped()&&IsConnected()&&IsExpertEnabled()). Dans les versions précédentes de MT4, l'utilisateur ne pouvait pas modifier les valeurs des paramètres d'entrée pendant l'exécution de la fonction Sleep(). Dans la nouvelle construction, cette barrière n'existe plus. Donc, soit vous retournez l'interdiction de changer les paramètres d'entrée dans cette situation, soit vous vous assurez qu'ils changent non pas sur l'onglet"INPUTS" seulement, mais sur le compteur. C'est tout.


Nombre entier:

1. Lorsque j'ai installé le terminal MetaTrader4, dans la fenêtre d'installation il y a une invitation au forum, ce forum et pas un autre.

Mes excuses. Mais j'ai remarqué que la frontière entre MT4 et MT5 disparaît progressivement. Et c'est à partir de mon profil sur "www.mql5.com" que j'ai postulé à "servicedesk" (pour la première et dernière fois, j'espère). J'ai rempli un formulaire qui vous montre clairement la possibilité de choisir la version du terminal - j'ai choisi "MT4".

Voici un autre extrait d'un ordre déjà fermé (je ne sais pas s'ils lisent l'ordre après l'avoir fermé eux-mêmes à la hâte ?) (bien sûr, c'est drôle, mais je ne peux que penser à un proverbe sur l'attrapage des puces).

Dans ce cas, pourquoi l'utilisateur voit-il clairement ses nouvelles valeurs ? Bien que l'EA puisse fonctionner pleinement, ces nouvelles valeurs sont une fiction, et l'EA n'y a pas accès. La fonction RefreshRates() permet à l'EA d'obtenir les cotations actuelles dans N'IMPORTE QUEL cycle. Pourquoi ne pas fournir une fonction similaire pour obtenir les valeurs actualisées des paramètres d'entrée ou ajouter cette fonctionnalité à la fonction existante RefreshRates() ?

Le fait d'appuyer deux fois sur le bouton "AutoTrading" (pour désactiver et réactiver les EA) interrompt le cycle, après quoi les nouvelles valeurs deviennent disponibles, mais seulement après un tick (nouvelle cotation) sur le SYMBOLE GRAPHIQUE. Et nous ne savons pas quand elle arrivera, et il n'est pas interdit au conseiller expert de traiter également d'autres symboles, et l'utilisateur n'a pas besoin de cette perte de temps. Donc on a quelque chose comme "retour vers le futur". Un nouveau MT4 a été publié. Il est plus moderne, plus rapide. Ils disent qu'il ralentit très bien l'écran, en attendant les cotations d'UN symbole, alors que les cotations des autres symboles battent leur plein. C'est pourquoi je dis maintenant à mes clients : modifiez les paramètres, appuyez deux fois sur le bouton "Expert Advisors" pour les activer et les désactiver, et attendez au bord de la mer - un jour, il y aura un "tic-tac".

Je n'ai jamais demandé d'aide avant et j'espère ne pas le faire à l'avenir. Tôt ou tard, je trouverai un moyen de contourner le "crochet" de toute façon. Cela a toujours été le cas, depuis que MT4 et bien sûr son"testeur de stratégie" existent, ce dont je préfère ne pas parler maintenant. Mais bien sûr, toute inexactitude en temps réel est très grave, surtout pour un utilisateur qui met son argent en jeu, parfois pour des sommes assez importantes. Comme je ne vois pas d'autre moyen efficace de contourner ce bogue, je me suis tourné vers le service d'assistance et, pour être honnête, je doutais un peu qu'ils refusent même de le corriger. Eh bien...

C'est déjà bien assez que tout doive être fait "malgré" plutôt que "grâce à".

 
Integer:
Wex, utilise un minuteur, tu peux te passer de boucles maintenant.

Vous avez raison, bien sûr, les nouveaux EAs peuvent être programmés très différemment. Mais il existe de nombreux EAs déjà bien programmés. Et les clients ne comprennent pas pourquoi la chose pour laquelle ils ont payé de l'argent cesse soudainement de fonctionner correctement.

C'est-à-dire qu'il existe une tendance très désagréable d'incompatibilité de principe des EAs (Expert Advisors ou scripts, voire indicateurs) déjà développés avec les nouvelles versions de MT4.

Et par principe, je n'ai jamais utilisé d'éléments non standard en programmation. Mon EA est basé uniquement sur les caractéristiques et les fonctions de MQL4 BOMB. J'étais déjà submergé par de nombreux indicateurs et EA (principalement des indicateurs complexes ou des indicateurs dits "multidevises"), qui soit ne fonctionnent pas du tout sur les nouvelles versions de MT4, soit semblent fonctionner correctement, mais des situations comme celle de mon exemple apparaissent. (Quant aux erreurs de traduction, j'ai remarqué, par exemple, des variables avec le nom "nouveau" - je comprends - en raison de l'élargissement de la liste des mots réservés).

 

On est trop paresseux pour lire la documentation. Les autres montrent qu'ils sont très intelligents... Ouf !

Attrapez le code :)

Je ne sais toujours pas quel est votre problème.

//+------------------------------------------------------------------+
//|                                                      ProjectName |
//|                                      Copyright 2012, CompanyName |
//|                                       http://www.companyname.net |
//+------------------------------------------------------------------+
#property copyright     "Grizzly_v :)"
#property link          "http://www.mql5.com"
//+------------------------------------------------------------------+
extern int      A1=      1;
extern int      A2=      2;
int      C1,C2;
//+------------------------------------------------------------------+
int OnInit(){
   C1=A1;
   C2=A2;
   return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
void OnDeinit(const int reason){
   Comment("");
}
//+------------------------------------------------------------------+
void OnTick(){
   string   t;

   t=TimeToStr(TimeCurrent(),TIME_MINUTES|TIME_SECONDS);
   Comment(t+"\nA1="+A1+"   A2="+A2+"\nC1="+C1+"   C2="+C2);
}
//+------------------------------------------------------------------+
 
grizzly_v:

On est trop paresseux pour lire la documentation. Les autres montrent qu'ils sont très intelligents... Ouf !

Attrapez le code :)

Je ne sais toujours pas quel est votre problème.

Le problème est que le Conseiller Expert est en boucle, donc l'événement OnTick ne se produit pas dans celui-ci et il ne voit pas les paramètres modifiés.
 

Eh bien, c'est tout alors. Le même cycle, mais à travers les nouvelles fonctions.

  extern int      A1=      1;
  extern int      A2=      2;
         int      C1,C2;
//+------------------------------------------------------------------+
int OnInit(){
   C1=A1;
   C2=A2;
   EventSetMillisecondTimer(100);
   return(0);
}
//+------------------------------------------------------------------+
void OnDeinit(const int reason){
   EventKillTimer();
}
//+------------------------------------------------------------------+
void OnTimer(){
   string   t;
   RefreshRates();
   t=TimeToStr(TimeCurrent(),TIME_MINUTES|TIME_SECONDS);
   Comment(t+"\nA1="+A1+"   A2="+A2+"\nC1="+C1+"   C2="+C2);
}
//+------------------------------------------------------------------+
 
stringo:

1. Jetez un coup d'œil au profil de Wex. Il s'agit d'un développeur professionnel de MQL4. Jouer les idiots. Ou de troll. Je ne sais pas pourquoi.

2. Nous devons y réfléchir. Vous ne pouvez pas interrompre de force la boucle lors de l'arrivée de nouveaux paramètres. Quelque chose comme la fonction IsNewParameter qui devrait être appelée par le programmeur lui-même dans la boucle sans fin.

1. J'ai aussi remarqué la bizarrerie...

2. Ce serait très bien.

 
stringo:

1. Jetez un coup d'œil au profil de Wex. Il s'agit d'un développeur professionnel de MQL4. Jouer les idiots. Ou de troll. La raison n'est pas claire.

2. C'est ici que nous devons réfléchir. Nous ne pouvons pas interrompre de force la boucle à l'arrivée de nouveaux paramètres. Quelque chose comme la fonction IsNewParameter qui devrait être appelée par le programmeur lui-même dans la boucle sans fin.

Stringo.

La variable ne semble pas entrer dans une telle boucle éternelle. La méthode init ne fonctionne pas lorsque les valeurs sont modifiées. Et les variables externes sont transmises uniquement par init. Les fonctions OnTick et OnTimer peuvent désormais être utilisées dans les conseillers experts,

OnChartEvent. Autant que je me souvienne, la fonction de démarrage dans Expert Advisor était déclenchée à un nouveau tick.

Extrait de la documentation :

Le programme ne reçoit des événements que de la carte sur laquelle il est lancé. Tous les événements sont traités un par un dans l'ordre où ils sont reçus. S'il y a déjà un événement NewTick dans la file d'attente ou si cet événement est en cours de traitement, un nouvel événement NewTick n'est pas placé dans la file d'attente du programme mql4. De même, si la file d'attente du programme mql4 contient déjà l'événement ChartEvent ou si un tel événement est en cours de traitement, un nouvel événement de ce type ne sera pas mis en file d'attente. Les événements Timer sont traités selon le même schéma - s'il existe ou s'il y a déjà un événement Timer dans la file d'attente, alors un nouvel événement Timer n'est pas placé dans la file d'attente.

Ainsi, puisque la fonction de démarrage tourne en boucle à l'infini, lorsqu'un nouvel événement se produit, la fonction ne démarre pas et les variables qu'elle contient ne sont pas mises à jour.

Il n'y a qu'une seule solution, utiliser les nouvelles fonctions du langage et ne pas s'embêter avec les anciennes fonctions.

События клиентского терминала - Документация на MQL4
  • docs.mql4.com
События клиентского терминала - Документация на MQL4
 
artmedia70:

1. J'ai aussi remarqué cette bizarrerie...

Et dans l'œil de quelqu'un d'autre, on peut toujours voir même une paille. Et plus il y a de bûches dans l'œil, plus la paille est petite et discernable.

Dans toute entreprise, c'est le résultat, et non le processus, qui compte. Le résultat est le suivant : le noir est présenté comme du blanc - au sens propre - et non au sens figuré - le système exécutif montre à l'utilisateur une autre valeur au lieu d'une seule. L'endroit où cela est fait - à l'intérieur ou à l'extérieur d'une fonction - n'a pas d'importance. Un système multitâche en temps réel est capable de gérer plusieurs processus simultanément. Dans ce processus, la fonction Sleep()"fonctionne" la plupart du temps et ne consomme aucune ressource système. Il s'agit de la chose classique qui est essentiellement utilisée pour suspendre le processus. Tous les autres processus peuvent se dérouler sans entrave.

- Camarades, pouvons-nous réaliser le plan à 102% ?

- ... Oui, nous le pouvons.