Erreurs, bugs, questions - page 123

 

laissez les développeurs s'en occuper. voici une capture d'écran de 3 exécutions de ce script.

Ça ne marche pas pour moi.

 
Prival:

Bug - ça marchait avant, mais maintenant ça ne marche plus.

Merci pour votre message.

Nous allons continuer à chercher.

 

Trouvé un petit bug dans la méthode PrintCheckResult (fichier Trade.mqh, classes Trade, classe CTrade).

void CTrade::PrintCheckResult(void) const
{
printf("CheckResult") ;
// printf("%d,%f,%f,%f,%f,%f,%f, '%s'", - l'avant-dernier paramètre est inutile
printf("%d,%f,%f,%f,%f,%f,%f, '%s'",
m_check_result.retcode,m_check_result.balance,m_check_result.equity,
m_check_result.margin,m_check_result.margin_free,m_check_result.margin_level,
m_check_result.comment) ;
}

Au lieu de la chaîne de caractères : printf("%d,%f,%f,%f,%f,%f,%f, '%s'", - commenté par moi

il devrait y avoir une ligne : printf("%d,%f,%f,%f,%f,%f,%f,%f, '%s'",

J'ai vérifié, la fonction corrigée fonctionne correctement.

 
Prival:

Bug - ça marchait avant, mais maintenant ça ne marche plus.

Merci pour le message. Sera disponible dans la prochaine mise à jour. Pour que cela fonctionne dans la version actuelle, utilisez un casting explicite pour les constantes ou les multiplications en général.

void OnStart()
  {
  // вот так работает
     Print(TimeCurrent()+2*PeriodSeconds(PERIOD_D1));
  // а вот так нет (а раньше работало)  
     datetime    time_end=0;
     time_end=TimeCurrent()+(long) 2*PeriodSeconds(PERIOD_D1);
     Print(time_end);
  }
 
retired:

Trouvé un petit bug dans la méthode PrintCheckResult (fichier Trade.mqh, classes Trade, classe CTrade).


Merci pour le message.

Il sera bientôt réparé.

 
mql5:

Merci pour votre message. Sera disponible dans la prochaine mise à jour. Pour le faire fonctionner dans la version actuelle, il faut utiliser un casting explicite pour les constantes ou les multiplications en général.

Merci. Si j'ai bien compris, c'était dû à la conversion de type. Dommage qu'il n'y ait pas ce message au moment de la compilation, il aurait été plus facile de le trouver.
Документация по MQL5: Основы языка / Типы данных / Приведение типов
Документация по MQL5: Основы языка / Типы данных / Приведение типов
  • www.mql5.com
Основы языка / Типы данных / Приведение типов - Документация по MQL5
 
Prival:
Merci. Si j'ai bien compris, c'était dû à la conversion de type. C'est dommage qu'il n'y ait pas de message de ce type au moment de la compilation, ce serait plus facile à trouver.
Votre code est correct, il n'y a rien à redire. L'erreur est en fait dans la conversion des opérandes sous x64 et elle a été corrigée. Attendez une mise à jour.
 

Les erreurs ENUM_TRADE_RETURN_CODES doivent être interprétées correctement afin de pouvoir les traiter correctement. Existe-t-il des documents permettant de les décrire en détail ?

En particulier, les erreurs suivantes ne sont pas complètement comprises :

10008

COMMERCE_RETCODE_PLACÉ

Commande passée

10021

RABAIS SUR LE PRIX DU CODE DU COMMERCE

Aucun devis disponible pour traiter la demande


10028

TRADE_RETCODE_LOCKED

Requête bloquée pour traitement

10029

TRADE_RETCODE_FROZEN

Ordre ou position gelée

Quelqu'un peut-il m'aider à résoudre ce problème ?

 
retired:

Les erreurs ENUM_TRADE_RETURN_CODES doivent être interprétées correctement afin de pouvoir les traiter correctement. Existe-t-il des documents permettant de les décrire en détail ?

En particulier, les erreurs suivantes ne sont pas complètement comprises :

10008

COMMERCE_RETCODE_PLACÉ

Commande passée

10021

RABAIS SUR LE PRIX DU CODE DU COMMERCE

Aucun devis disponible pour traiter la demande


10028

TRADE_RETCODE_LOCKED

Requête bloquée pour traitement

10029

TRADE_RETCODE_FROZEN

Ordre ou position gelée

Quelqu'un peut-il m'aider à résoudre ce problème ?

Tout ce qui précède fait référence aux codes qui sont renvoyés par le serveur en réponse à la demande du terminal. C'est pourquoi tout est indiqué dans la section "Codes de retour du serveur commercial".

Il serait logique de supposer que la liste ne contient pas que des erreurs.

Maintenant dans l'ordre.

Quant à

10008

COMMERCE_RETCODE_PLACÉ

Commande passée


Il serait logique de supposer que cette réponse n'est pas une erreur mais informe simplement le client (le terminal de négociation) que l'ordre a été passé avec succès.

Dans ce cas, il y a trois solutions possibles :

1. Pas du tout pour traiter la réponse ;

2. traiter le placement de l'ordre dans le bloc OnTrade() - tout à fait acceptable, mais pas très correct à mon avis ;

À mon avis, c'est la meilleure façon de traiter un échange mécanique.

PS

Je préfère traiter les réponses du serveur à la place de l'ordre et attraper le résultat des actions d'un trader, du serveur ou d'autres Expert Advisors dans OnTrade().

Par exemple, dans OnTrade, vous pouvez saisir les opérations commerciales du trader (création ou suppression d'un ordre ainsi que les opérations sur les positions).


En ce qui concerne


10029

TRADE_RETCODE_FROZEN

La commande ou la position est gelée


Il existe un certain niveau à partir duquel une position ou un ordre sont "gelés" (toute opération avec eux est interdite).

Ce niveau est une distance par rapport au prix actuel à laquelle le serveur interdit toute action avec l'ordre ou la position. Cette distance est mesurée en pips et est définie pour chaque symbole.

Il peut être obtenu en utilisant SymbolInfoInteger() avec leparamètre SYMBOL_TRADE_FREEZE_LEVEL.

Si vous obtenez une telle réponse du serveur, vous devez attendre que l'une des deux choses suivantes se produise :

1. Le prix n'a pas bougé de la distance requise (plus grande que celle spécifiée dans les propriétés du symbole);

2. l'ordre ou le poste ne fonctionne pas dans les conditions qu'ils prévoient.


En ce qui concerne

10021

RABAIS SUR LE PRIX DU CODE DU COMMERCE

Aucun devis pour traiter la demande


Si vous obtenez cette réponse, vous devriez probablement vérifier le nom du symbole (juste au cas où), vous assurer que le symbole est sélectionné (important pour le testeur et les multidiffusions), vérifier la disponibilité de l'historique, y compris sur le serveur (s'il doit être téléchargé), et probablement vous assurer que le marché est ouvert et que la négociation sur le symbole est possible.

PS

Bien qu'ici il sera nécessaire de spécifier aux développeurs


Qu'en est-il

10028

TRADE_RETCODE_LOCKED

Demande bloquée pour traitement


C'est probablement la plus spécifique des réponses du serveur listées ci-dessus... elle est plus susceptible de nécessiter une clarification de la part des développeurs (je vais juste supposer que vous devriez probablement juste attendre un certain temps)...

 
Interesting:

Concernant


10029

TRADE_RETCODE_FROZEN

Ordre ou position gelée


Il existe un certain niveau en dessous duquel une position ou un ordre sont "gelés" (toute action avec eux est interdite).

Ce niveau est une distance par rapport au prix actuel à laquelle le serveur interdit toute action avec l'ordre ou la position. Cette distance est mesurée en pips et est définie pour chaque symbole.

Il peut être obtenu en utilisant SymbolInfoInteger() avec le paramètreSYMBOL_TRADE_FREEZE_LEVEL.

Si vous obtenez une telle réponse du serveur, vous devez attendre que l'une des deux choses suivantes se produise :

1. Le prix n'a pas bougé de la distance requise (plus grande que celle spécifiée dans les propriétés du symbole);

2. l'ordre ou la position n'a pas rempli les conditions qui y sont fixées.


Merci pour la réponse détaillée. Je comprends le code "10029 : TRADE_RETCODE_FROZEN : L 'ordre ou la position est gelé".

Mais nous avons encore des questions concernant les autres (je veux connaître la réponse exacte et non des suppositions) :

10008

COMMERCE_RETCODE_PLACÉ

Commande passée

10021

RABAIS SUR LE PRIX DU CODE DU COMMERCE

Aucun devis disponible pour traiter la demande


10028

TRADE_RETCODE_LOCKED

La demande est bloquée pour traitement

En particulier, la signification de "10008 : L'ordre a été passé" n'est pas très claire, car lorsque l'ordre est mis en file d'attente sur le serveur, un ticket lui est attribué et le code "10009 : TRADE_RETCODE_DONE : Demande exécutée" est renvoyé.