Erreurs, bugs, questions - page 77

 
Interesting:

Ai-je bien compris que les valeurs renvoyées par ACCOUNT_TRADE_ALLOWED sont générées côté serveur ?

Je veux dire qu'aucune action du côté du trader (dans le terminal) ne peut changer cette valeur...

PS

Mais la réticence d'ACCOUNT_TRADE_EXPERT à changer est vraiment étrange...

Que font alors le bouton "Auto-Trading" dans le menu du terminal et la case à cocher "Autoriser l'auto-trading" ?

PPS

Dans les anciennes versions, tout semblait correct et tout fonctionnait, mais dans la 299, je ne comprends pas ce qui se passe...


Qui a creusé dans ACCOUNT_TRADE_ALLOWED et ACCOUNT_TRADE_EXPERT et pourquoi ?


Aux développeurs - Soit je deviens fou, soit il y a des "drubashka" dans le terminal... :)

Et pas dans la dernière version, mais au moins dans la 294 (qui les a laissés là ?)... :(


Une petite expérience

Prenons le terminal release 294 et plaçons sur le graphique un Expert Advisor qui contrôle la valeur de retour de AccountInfoInteger(ACCOUNT_TRADE_ALLOWED).

En même temps, l'auto-trading est désactivé dans les paramètres de l'Expert Advisor et dans le terminal (bouton auto-trading).

En conséquence, le journal du conseiller expert contient les éléments suivants

Ici nous pouvons voir le journal des actions effectuées par l'Expert Advisor (pendant l'initialisation) et la vérification de la valeur ACCOUNT_TRADE_ALLOWED dans le timer.

Nous sommes intéressés par tous les symboles mis en évidence en couleur (avant cela, la liste des symboles était chargée dans une classe spécialisée).

1. Le premier résultat renvoyé par le timer est bleu (on s'attend à ce qu'il soit faux) ;

2. La couleur rouge met en évidence le résultat suivant, qui a été renvoyé par le timer, il s'est avéré soudainement être vrai(je suis très intéressé par ce que BARABACA a permis de négocier) ;

3. La réaction de ma classe (événement OnEventTimer) aux changements est verte.

Ici, la classe "comprend" que l'auto-trading est autorisé et informe volontiers à ce sujet (je ne partage pas son optimisme) ;

De plus, le message est affiché deux fois (alors qu'il n'avait pas été vu auparavant). Le message ne doit pas apparaître deux fois, car l'événement OnEventTimer contient une vérification qui exclut cette possibilité.

//Reading information on current parameters of the trade account
RealTradeAllowed = TradeAllowed(); //TradeAllowed
RealTradeExpert  = TradeExpert();  //TradeExpert
//Checking the status change of the use possibility automatic trade
  if(varTradeAllowed!=RealTradeAllowed)
  //Processing the event TradeAllowed
  {
  OnTradeAllowed(RealTradeAllowed);
  //We write current status of the RealTradeAllowed in variable
  varTradeAllowed = RealTradeAllowed;
  }

4. Alors le timer renvoie constamment vrai, quoi qu'il arrive au terminal.

PS

La situation avec AccountInfoInteger(ACCOUNT_TRADE_EXPERT) est encore plus confuse. La minuterie retourne ture indépendamment des paramètres du terminal et de l'Expert Advisor.

En avons-nous besoin ?

 
AM2:

Je suis également intéressé par une question similaire. Que dois-je faire s'il n'y a pas assez de fonds sur mon compte pour ouvrir une position ?

1. Empêcher le conseiller expert d'effectuer des transactions.

2. Interdire l'ouverture d'un poste.

3. retirer le conseiller expert du graphique.

Le point 3 peut être résolu en utilisant ExpertRemove. J'ai résolu le deuxième point de cette façon :

1. Je comprends que l'interdiction du trading n'est pas définie de manière programmatique, mais en utilisant le bouton "Auto-Trading" et la case à cocher "Autoriser le trading automatique", puis en cochant ACCOUNT_TRADE_ALLOWED et ACCOUNT_TRADE_EXPERT.

Vous pouvez également interdire la négociation en ajoutant le paramètre nécessaire à votre conseiller expert, puis en contrôlant ce paramètre (par exemple, interdire la négociation sur un compte réel).

Le contrôle préliminaire est effectué lors de l'initialisation d'un Expert Advisor, alors qu'en mode travail il est traité dans OnTimer() ou OnTick().

2. Le contrôle de la possibilité d'ouvrir (fermer) une position doit être effectué en tenant compte de l'état actuel : la connexion, la possibilité d'auto-trading et d'autres conditions (par exemple, le contrôle de la possibilité d'effectuer une certaine opération pour ce symbole).

Pour contrôler toutes les conditions, il est préférable de créer une seule fonction avec un résultat de type bool.

Par exemple, comme celui-ci :

//Function IsTradePermit
bool IsTradePermit(bool TardeAllowed,bool Connect,double FreeMargin)
{
//----------------------------------------------------------------------------//
//Work variables
bool Result;
//----------------------------------------------------------------------------//

//Тут мы проверяем разрешена или нет торговля

//----------------------------------------------------------------------------//
return(Result);
//----------------------------------------------------------------------------//
}

3. le conseiller expert ne doit être retiré du graphique que dans des cas extrêmes (lorsque son travail ne peut pas être effectué ou lorsqu'il n'est plus nécessaire).

Cette situation est très extrême et rare. Il doit être utilisé, par exemple, si certains fichiers nécessaires au conseiller expert ne sont pas trouvés, ou s'il y a une erreur que le conseiller expert ne peut pas résoudre.

PS

La suppression et le placement d'EA est également utile si plusieurs EA traitent sur différentes paires, mais qu'ils sont gérés par un seul EA (il décide de la paire sur laquelle placer un EA et de celle à supprimer)...

 
Interesting:

Qui a creusé dans ACCOUNT_TRADE_ALLOWED et ACCOUNT_TRADE_EXPERT, et surtout, pourquoi ?


Développeurs - Soit je suis déjà en train de devenir fou, soit le terminal "drubashki" est apparu... :)

Et pas dans la dernière version, mais au moins dans la 294 (qui les a laissé entrer là ?)... :(


Une petite expérience

Prenons le terminal release 294 et plaçons sur le graphique un Expert Advisor qui contrôle la valeur de retour de AccountInfoInteger(ACCOUNT_TRADE_ALLOWED).

En même temps, l'auto-trading est désactivé dans les paramètres de l'Expert Advisor et dans le terminal (bouton "auto-trading").

En conséquence, le journal du conseiller expert contient les éléments suivants

Ici nous pouvons voir le journal des actions effectuées par l'Expert Advisor (pendant l'initialisation) et la vérification de la valeur ACCOUNT_TRADE_ALLOWED dans le timer.

Nous sommes intéressés par tous les symboles mis en évidence en couleur (avant cela, la liste des symboles était chargée dans une classe spécialisée).

1. Le premier résultat renvoyé par le timer est bleu (on s'attend à ce qu'il soit faux) ;

2. La couleur rouge met en évidence le résultat suivant, qui a été renvoyé par le timer, il s'est avéré soudainement être vrai(je suis très intéressé par ce que BARABACA a permis de négocier) ;

3. La réaction de ma classe (événement OnEventTimer) aux changements est verte.

Ici, la classe "comprend" que l'auto-trading est autorisé et informe volontiers à ce sujet (je ne partage pas son optimisme) ;

De plus, le message est affiché deux fois (alors qu'il n'avait pas été vu auparavant). Le message ne doit pas apparaître deux fois, car l'événement OnEventTimer contient une vérification qui exclut cette possibilité.

4. Alors le timer renvoie constamment vrai, quoi qu'il arrive au terminal.

PS

La situation avec AccountInfoInteger(ACCOUNT_TRADE_EXPERT) est encore plus confuse. La minuterie retourne ture indépendamment des paramètres du terminal et de l'Expert Advisor.

En avons-nous besoin ?

Quelque chose d'étrange se passe ici, ACCOUNT_TRADE_ALLOWED et ACCOUNT_TRADE_EXPERT sont des autorisations de négocier dans votre société de courtage.

Bouton "AutoTrade". - TerminalInfoInteger(TERMINAL_TRADE_ALLOWED).

Il y a MQL5InfoInteger(MQL5_TRADE_ALLOWED) - permission/interdiction pour l'expert/script de faire des échanges.

 
Swan:

Quelque chose d'étrange se produit, ACCOUNT_TRADE_ALLOWED et ACCOUNT_TRADE_EXPERT sont autorisés à commercer dans le DC.

Bouton "AutoTrade". - TerminalInfoInteger(TERMINAL_TRADE_ALLOWED).

Il y a aussi MQL5InfoInteger(MQL5_TRADE_ALLOWED) - permission/interdiction pour l'expert/script de faire des échanges.

Je connais MQL5InfoInteger(MQL5_TRADE_ALLOWED), il fonctionne bien et est normalement contrôlé dans Expert Advisor; MQL5_DLLS_ALLOWED est aussi normalement traité.

Ainsi, comme je le comprends :

TERMINAL_DLLS_ALLOWED et TERMINAL_TRADE_ALLOWED sont des autorisations de niveau terminal ;

MQL5_DLLS_ALLOWED et MQL5_TRADE_ALLOWED - autorisations au niveau expert ;

ACCOUNT_TRADE_ALLOWED et ACCOUNT_TRADE_EXPERT - autorisations au niveau du serveur.

Ensuite, nous supposerons que le serveur change false en true (bien que la raison pour laquelle ce message est affiché deux fois ne soit pas claire).

 
Swan, merci pour le tuyau. C'est réparé. Tout semble fonctionner correctement...
 

Bonjour, j'ai ce problème, je commence à faire défiler le graphique horaire et à une certaine date il passe au graphique journalier, aussi avec 15 minutes ils passent à l'horaire ou 4 heures, j'ai supprimé les fichiers où l'historique est stocké selon la documentation mais rien n'a changé.

Документация по MQL5: Файловые операции / FileDelete
Документация по MQL5: Файловые операции / FileDelete
  • www.mql5.com
Файловые операции / FileDelete - Документация по MQL5
 
RomanIgorevi4:

Bonjour, j'ai ce problème, je commence à faire défiler le graphique horaire et à une certaine date il passe au graphique journalier, aussi avec 15 minutes ils passent à l'horaire ou 4 heures, j'ai supprimé les fichiers où l'historique est stocké selon la documentation mais rien n'a changé.

Avant cette date, il n'y a que l'historique quotidien sur le serveur (pas d'historique par minute), donc toutes les périodes sont affichées comme quotidiennes.
 

J'ai constaté qu'il y a un problème avec HistoryDealsTotal() lors de l'utilisation des algorithmes d'optimisation du testeur.

Lors d'un backtest normal, tout va bien, mais lors d'une session d'optimisation, pendant la phase d'initialisation de l'EA, HistoryDealsTotal() renvoie le nombre de transactions de l'exécution précédente de l'EA. Plus tard, pendant la phase de négociation, HistoryDealsTotal() repart à 0.

J'ai rencontré ce problème avec l'extrait de code suivant :

    // constructor
    void MyClass() {
        _dealCnt = HistoryDealsTotal();  // this is causing trouble!
        _orderCnt = OrdersTotal();
        _positionCnt = PositionsTotal();
        _historyOrderCnt = HistoryOrdersTotal();
        ...
    }

Le moyen de contourner ce problème est d'initialiser avec 0 à la place, mais je serais quand même heureux d'avoir une réponse officielle à ce problème, parce que pour moi, il semble que certaines variables internes sont réinitialisées trop tard.

Merci d'avance !

Documentation on MQL5: Trade Functions / HistoryDealsTotal
Documentation on MQL5: Trade Functions / HistoryDealsTotal
  • www.mql5.com
Trade Functions / HistoryDealsTotal - Documentation on MQL5
 

Bonjour, répondez à ma question :

Pourquoi je ne peux pas télécharger mt5, je télécharge le fichier d'installation, je le démarre à moitié, il s'arrête, passe à un autre point d'accès, etc. A la fin il y a une erreur-

-read failed [12002]

c'est toujours la même histoire, peu importe le nombre de fois où je réinstalle le terminal ou Windows, mais maintenant, au troisième jour, cela échoue.

 

s'il vous plaît dites-moi pourquoi cette construction retourne toujours 0

MqlDateTime dt; Print(dt.min);

et comment puis-je savoir combien de minutes il reste maintenant ?

MqlDateTime dt; if(dt.min)>33 ...