L'EA que j'ai écrit il y a trois mois ne peut pas passer le test de stratégie maintenant, mais il fonctionnait bien il y a deux ou trois mois ! - page 2

 
angevoyageur:
Montrez votre code, ainsi nous pourrons vous dire où ajouter cette ligne.

Bonsoir Angevoyageur,

Voici mon code. Les deux parties sont séparées dans la section onTick.

Merci

Vivaldie


      MqlTick latest_price;      // To be used for getting recent/latest price quotes
      MqlTradeRequest mrequest;  // To be used for sending our trade requests
      MqlTradeResult mresult;    // To be used to get our trade results
      MqlRates mrate[];          // To be used to store the prices, volumes and spread of each bar
      ZeroMemory(mrequest);      // Initialization of mrequest structure
   if(ConditionDICrossMain = -1)
     {
      if(Buy_opened)
        {
         return;    // Don't open a new Buy Position
        }
      mrequest.action = TRADE_ACTION_DEAL;                                  // immediate order execution
      mrequest.price = NormalizeDouble(latest_price.ask,_Digits);           // latest ask price
      mrequest.sl = NormalizeDouble(latest_price.ask - STP*_Point,_Digits); // Stop Loss
      mrequest.tp = NormalizeDouble(latest_price.ask + TKP*_Point,_Digits); // Take Profit
      mrequest.symbol = _Symbol;                                            // currency pair
      mrequest.volume = Lot;                                                 // number of lots to trade
      mrequest.magic = EA_Magic;                                             // Order Magic Number
      mrequest.type = ORDER_TYPE_BUY;                                        // Buy Order
      mrequest.type_filling = ORDER_FILLING_FOK;                             // Order execution type
      mrequest.deviation=100;                                                // Deviation from current price
      //--- send order
        
      OrderSend(mrequest,mresult);
      // get the result code
      if(mresult.retcode==10009 || mresult.retcode==10008) //Request is completed or order placed
        {
         Alert("A Buy order has been successfully placed with Ticket#:",mresult.order,"!!");
        }
      else
        {
         Alert("The Buy order request could not be COMPLETE -error:",GetLastError());
         ResetLastError();           
         return;
        }
     }
 
Sur cette page, je peux voir que l'erreur se trouve dans la section ACCOUNT. J'ai essayé avec un autre MT5 et un compte différent mais j'ai le même message.
 
Vivaldi:

Bonsoir Angevoyageur,

Voici mon code. Les deux parties sont séparées dans la section onTick.

Je vous remercie

Vivaldie


  • Quelle est la valeur de mresult.retcode lorsque vous avez une erreur ?
  • Quelles sont les valeurs de STP, TKP ?
  • OrderSend retourne un bool, vous devez vérifier la valeur retournée aussi.
  • Comme je ne sais pas ce que vous avez entre les deux parties, il est préférable de placer ZeroMemory(mrequest) juste avant "mrequest.action=TRADE_ACTION_DEAL".
 

Je n'ai pas vu de messages dans le journal et il dit que le problème vient du stop loss.

Avec une valeur de 0, cela fonctionne très bien : )

 
Vivaldi:

Je n'ai pas vu de messages dans le journal et il dit que le problème vient du stop loss.

Avec une valeur de 0, cela fonctionne très bien : )

Pour vos stoplevels (SL et TP) vous devez prendre en compte la valeur STOP_LEVELS pour le symbole que vous tradez. Voir ce sujet.
 
angevoyageur:
  • Quelle est la valeur de mresult.retcode lorsque vous avez une erreur ?
  • Quelles sont les valeurs de STP, TKP ?
  • OrderSend retourne un bool, vous devez vérifier la valeur retournée aussi.
  • Comme je ne sais pas ce que vous avez entre les deux parties, il est préférable de placer ZeroMemory(mrequest) juste avant "mrequest.action=TRADE_ACTION_DEAL".


Ange j'ai réussi à le faire fonctionner maintenant :) le problème venait de la variable STP.

Il faut changer la déclaration avec le type double (au lieu de int) pour plaire à mr. NormalizeDouble.

Merci

double STP, TKP;
 

Je me suis trompé et la modification de la déclaration de la variable n'a pas résolu le message d'erreur. Le problème vient des variables STP et TKP qui sont à 0, ce qui fait que sl = tp.

 

Est-il nécessaire d'ajouter

ZeroMemory(request);

un bogue dans la version 975 (x86) ?

J'ai récemment rencontré l'erreur 4756 lors d'un test de stratégie et l'ajout de la ligne ci-dessus l'a résolu.

 
k.doras:

Est-il nécessaire d'ajouter

un bogue dans la version 975 (x86) ?

J'ai récemment rencontré l'erreur 4756 lors d'un test de stratégie et l'ajout de la ligne ci-dessus l'a résolu.

Cette ligne est obligatoire (ou une initialisation équivalente de la structure de la requête).
 

Bonjour

l'ordre envoyé fonctionne sur le compte démo mais pas sur le compte réel(2014.11.30 18:21:00.062 55 (اخابر,D1) BuyA : error 4756, retcode = 10006)

{
//--- prepare the request
   MqlTradeRequest request;
   MqlTradeResult  result;
   MqlTradeCheckResult check;
   ZeroMemory(request);
   ZeroMemory(result);
   ZeroMemory(check);
   request.action=5;
   request.symbol=_Symbol;
   request.volume=1000.00;
   request.price=2652.000;
   request.stoplimit=2652.000;
   request.sl=0;
   request.tp=0;
   request.type=6;
   request.type_filling=2;
   request.type_time=0;
   request.expiration=0;
   request.magic=0;
   request.comment="";

   if(!OrderSend(request,result))
     {
      Print(__FUNCTION__,": error ",GetLastError(),", retcode = ",result.retcode);
     }
//---


Documentation on MQL5: Standard Constants, Enumerations and Structures / Data Structures / Structure of Request Check Results
Documentation on MQL5: Standard Constants, Enumerations and Structures / Data Structures / Structure of Request Check Results
  • www.mql5.com
Standard Constants, Enumerations and Structures / Data Structures / Structure of Request Check Results - Reference on algorithmic/automated trading language for MetaTrader 5
Raison: