Erreurs, bugs, questions - page 2107

 
fxsaber:

Il existe une branche sur cette règle.


oui, j'ai lu des extraits de la fonction d'accès à l'historique uniquement lorsque l'environnement est modifié, et j'ai vu vos liens dans d'autres fils de discussion.

pour en venir au fait, l'erreur est apparue après avoir lu votre option.

 
fxsaber:

Cette logique est incorrecte. Après l'échec d'OrderSend et la réussite d'OrderSend, l'environnement commercial actuel doit être relu entièrement. Cette règle devrait toujours être en vigueur.

À propos des codes de retour. Je ne les analyse pas dans mes EA. Je pense que la logique commerciale ne devrait pas en dépendre.

Théoriquement, un dépassement de délai peut se produire lors d'une perte de connexion avec le serveur du courtier.

Dans ce cas, il est préférable de ne rien faire du tout jusqu'à ce qu'il soit restauré et que l'environnement de trading soit entièrement synchronisé avec le serveur.

Comment éviter de se retrouver dans une telle situation sans analyser le code de retour ?

 

Erreur de compilation.


Fichier Test.mqh.

int Tmp = 1;


Code principal

#include "Test.mqh"

void OnStart()
{
  Print(Tmp);
  Print(Tmp2); // 'Tmp2' - undeclared identifier
}

#define  Tmp Tmp2
#include "Test.mqh"


Il s'avère que les inludes répétés sont ignorés. Mais c'est faux dans cette situation !

Nous avons besoin d'une telle construction dans le but suivant. Un conseiller expert est contenu dans un fichier .mqh. Mais j'ai besoin de pouvoir l'exécuter sur un compte réel (premier incloud) et dans mon testeur (deuxième incloud).

 
Andrey Khatimlianskii:

Théoriquement, un dépassement de délai peut se produire lors d'une perte de communication avec le serveur du courtier.

Dans ce cas, il est préférable de ne rien faire du tout jusqu'à ce qu'il soit restauré et que l'environnement de trading soit entièrement synchronisé avec le serveur.

Comment éviter de se retrouver dans une telle situation sans analyser le code de retour ?

Nous avons envoyé un OrderSend et n'avons pas attendu de réponse du serveur, obtenant un timeout dans le journal et _LastError. Nous ignorons _LastError et ne recevons que false.

Ensuite, si nous avons une connexion, nous réassemblons l'environnement commercial et prenons une décision.

Bien entendu, il est toujours souhaitable de vérifier l'environnement choisi avant de collecter des informations.

 
fxsaber:

A envoyé OrderSend et n'a pas attendu de réponse du serveur, obtenant un timeout dans le journal et _LastError. Nous ignorons _LastError et ne recevons que false.

Ensuite, si nous avons une connexion, nous réassemblons l'environnement commercial et prenons une décision.

Bien entendu, il est toujours souhaitable de vérifier l'environnement choisi avant de collecter des informations.

Cela est possible si nous travaillons avec OnTick. Et sinon ?

Comment vérifier la connexion ?

 
Andrey Khatimlianskii:

Cela fonctionnera si vous travaillez en OnTick. Et sinon ?

Comment vérifiez-vous la connexion ?

TerminalInfoInteger(TERMINAL_CONNECTED);
 
fxsaber:
TerminalInfoInteger(TERMINAL_CONNECTED);

Historiquement, je ne lui fais pas confiance. Je vais devoir le tester dans 5...

 

Le problème des délais d'attente n'est pas qu'il n'y a pas de connexion, mais que la demande a reçu un délai d'attente.

D'un côté, je vois les choses ainsi : il y a un signal pour ouvrir une transaction, nous faisons une demande, nous obtenons un délai d'attente - mais la transaction est ouverte.

bien que le conseiller expert ait reçu une erreur.

vérifier l'environnement commercial - nous voyons un marché ouvert.

mais comment comprendre que la transaction a été ouverte par ce signal ? s'il y avait par exemple 10 signaux ?

c'est-à-dire vérifier si une nouvelle affaire est apparue dans l'historique (dans le terminal).


je n'ai pas encore compris l'idée

@A100

quelle solution voyez-vous ?

 
fxsaber:

Il s'avère que le réincode est ignoré. Mais c'est faux dans cette situation !

J'ai besoin d'une telle construction pour la suivante. Un Expert Advisor est contenu dans un fichier mqh. Mais j'ai besoin de pouvoir l'exécuter sur un compte réel (premier incloud) et dans mon testeur (deuxième incloud).

Tout est correct et il est correctement ignoré.

Les hacks de Cish ne passent pas.

 

int h = FileOpen("test.bin",FILE_WRITE|FILE_BIN) ; -handle returns, no file in mt

int h = FileOpen("test.bin",FILE_WRITE|FILE_BIN|FILE_COMMON) ; - le fichier existe.

qu'est-ce que j'ai mal écrit

Raison: