Discussion de l'article "Guide étape par étape pour rédiger un conseiller expert en MQL5 pour les débutants" - page 21

 

Bonjour à tous,

Tout nouveau dans MQL5 (et le FOREX d'ailleurs) mais programmeur de longue date. J'ai ouvert le fichier My_First_EA.mq5 et j'ai compilé, mais je n'obtiens pas les fonctions Debug. Si j'ouvre n'importe quel fichier script d'exemple, j'obtiens l'option Debug. J'ai également reçu un avertissement indiquant que la valeur de retour de 'OrderSend' devrait être vérifiée. Que dois-je faire pour obtenir la fonctionnalité Debug ?

Louis

 
louisd:

Bonjour à tous,

Tout nouveau dans MQL5 (et le FOREX d'ailleurs) mais programmeur de longue date. J'ai ouvert le fichier My_First_EA.mq5 et j'ai compilé, mais je n'obtiens pas les fonctions Debug. Si j'ouvre n'importe quel fichier script d'exemple, j'obtiens l'option Debug. J'ai également reçu un avertissement indiquant que la valeur de retour de 'OrderSend' devrait être vérifiée. Que dois-je faire pour obtenir la fonctionnalité Debug ?

Louis

Bonjour à tous,

J'ai résolu mon propre problème. J'ai créé un nouveau projet avec l'Expert Advisor Wizard et j'ai copié le fichier My_First_EA.mq5 et j'ai obtenu la fonctionnalité de débogage.

Louis

 
louisd:

Bonjour à tous,

J'ai trouvé mon propre problème. J'ai créé un nouveau projet avec l'Expert Advisor Wizard et j'ai copié le fichier My_First_EA.mq5 et j'obtiens la fonctionnalité de débogage.

Louis

Mais avez-vous corrigé l'avertissement "OrderSend should be checked" ?
 
Boobwood:

J'ai eu l'erreur 4756, j'ai vu la solution à la page 2, et j'ai vérifié le code original, il y avait ZeroMemory(mrequest) ; à la ligne 218 même. mais j'ai toujours l'erreur 4756.


J'ai aussi toujours cette erreur après avoir fait les deux corrections suggérées :

ZeroMemory(mrequest) ;

et aussi

if(Buy_opened || Sell_opened)

Quelqu'un peut-il m'aider à résoudre l'erreur 4756 ? Il semble qu'il soit impossible de placer un ordre d'achat.

 
Tchuso:

Bonjour, je reçois une erreur :

la valeur de retour de 'OrderSend' doit être vérifiée lignes 213 et 259.


Avez-vous résolu le problème ?

Bonjour Tchuso,

La même chose m'est arrivée. Je l'ai résolu en remplaçant ces lignes dans les deux opérations par ceci.

if(!OrderSend(mrequest,mresult))
PrintFormat("OrderSend error %d",GetLastError());

Dites-moi si vous avez besoin d'aide, je suis nouveau aussi.

Je vous prie d'agréer, Madame, Monsieur, l'expression de mes salutations distinguées.

 

J'aime beaucoup l'exemple de code, je suis également novice en la matière, j'ai corrigé le code tel qu'il apparaît dans les commentaires et il ne donne plus d'erreurs.

Le problème est que le robot n'ouvre pas de trades, il n'ouvre même pas de trade.

Est-ce que quelqu'un a pu résoudre ce problème ?


J'utilise l'option "Unico" du testeur de stratégie : est-ce une erreur de ma part ?


Merci pour votre temps et votre soutien
 


J'ai remarqué que le robot essaie d'ouvrir les ordres mais donne toujours une erreur :


Exit :

2020.05.06 20:35:16.141 Core 1 2020.04.20 20:25:00 failed market sell 0.10 EURUSD sl : 1.08965 tp : 1.07665 [Invalid request].


J'ai changé plusieurs choses dans le code mais cela ne fonctionne pas, j'ajoute le code que j'ai :


Original : mrequest.type_filling = "Je l'ai mis dans les 3 façons qui sont dans la documentation".

 mrequest.action = TRADE_ACTION_DEAL;                                  // exécution immédiate de l'ordre
         mrequest.price = NormalizeDouble(latest_price.ask,_Digits);           // dernier prix demandé
         mrequest.sl = NormalizeDouble(latest_price.ask - STP*_Point,_Digits); // Stop Loss
         mrequest.tp = NormalizeDouble(latest_price.ask + TKP*_Point,_Digits); // Prise de bénéfice
         mrequest.symbol = _Symbol;                                            // paire de devises
         mrequest.volume = Lot;                                                 // nombre de lots à négocier
         mrequest.magic = EA_Magic;                                             // Commande Numéro magique
         mrequest.type = ORDER_TYPE_BUY;                                        // Ordre d'achat
         mrequest.type_filling = ORDER_FILLING_RETURN;                             // Type d'exécution de l'ordre
         mrequest.deviation=100;                      
        



Tambien he probado este codigo:

 //--- déclaration et initialisation de la demande et du résultat
               MqlTradeRequest request={0};
               MqlTradeResult  result={0};
            //--- paramètres de l'application
               request.action   =TRADE_ACTION_DEAL;                     // type d'activité de l'entreprise
               request.symbol   =Symbol();                              // symbole
               request.volume   =0.1;                                   // volume de 0,1 lot
               request.type     =ORDER_TYPE_BUY;                        // type de commande
               request.price    =SymbolInfoDouble(Symbol(),SYMBOL_ASK); // prix d'ouverture
               request.deviation=5;                                     // écart de prix autorisé
               request.magic    =EA_Magic;                          // Numéro magique de l'ordre

               //--- envoi de la demande
               if(!OrderSend(request,result))
               PrintFormat("OrderSend error %d",GetLastError());     // si la demande n'a pas pu être envoyée, saisir le code d'erreur
               //--- informations sur l'opération
               PrintFormat("retcode=%u  deal=%I64u  order=%I64u",result.retcode,result.deal,result.order);
 
Libni Colina:


J'ai remarqué que le robot essaie d'ouvrir les ordres mais donne toujours une erreur :


Exit :

2020.05.06 20:35:16.141 Core 1 2020.04.20 20:25:00 failed market sell 0.10 EURUSD sl : 1.08965 tp : 1.07665 [Invalid request].


J'ai changé plusieurs choses dans le code mais cela ne fonctionne pas, j'ajoute le code que j'ai :


Original : mrequest.type_filling = "Je l'ai mis dans les 3 façons qui sont dans la documentation".


Ajoutez ceci en haut du code :

#include <Trade\Trade.mqh>

Et ensuite, pour ouvrir une opération, il suffit de taper ceci :

double volumen= 0.01; // Ou tout autre volume souhaité

CTrade m_trade;

m_trade.Buy(volumen); // Achat

m_trade.Sell(volumen); // Vend
 
Bonjour, Merci pour ce tutoriel, il m'a été très utile. Mais j'ai un malentendu, les variables New_Time déclarées et initialisées avec la fonction CopyTimes mais Old_Time a été déclarée mais pas initialisée au début et ensuite elle a été comparée à la variable New_Time pour vérifier s'il y a une nouvelle barre. Old_Time est censé être vide. Je ne sais pas si je l'ai bien décrit mais merci de m'avoir lu.
 

Bonjour,


De la même manière, j'ai le code d'erreur 4756 lors de l'exécution des tests et j'ai reçu le message suivant : " Sell order request could not be completed " (la demande d'ordre de vente n'a pas pu être exécutée).

Merci de m'indiquer comment résoudre ce problème.


Je vous remercie.