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 3

 

Forum sur le trading, les systèmes de trading automatisés et le test des stratégies de trading.


angevoyageur, 2014.02.11 17:59

Bonjour,

Merci d'utiliser le bouton SRC lorsque vous postez un code. Merci.


Cette fois, je l'ai édité pour vous.


 
jitanic:

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)


Pourquoi utilisez-vous une telle notation, c'est difficile à comprendre :

   request.action=5;
   request.type=6;
   request.type_filling=2;

utiliser ça à la place :

   request.action=TRADE_ACTION_PENDING;
   request.type=ORDER_TYPE_BUY_STOP_LIMIT;
   request.type_filling=ORDER_FILLING_RETURN;  

Au fait, dans les deux cas, ça marche pour moi.


 

Je suis désolé.

S'il vous plaît, vérifiez ce script et donnez-moi mon erreur :

#property description "Expert Advisor for sending trade requests "
" using OrderSendAsync() function.\r\n"
#property description "Handling trading events using"
" OnTrade() and OnTradeTransaction() handler functions is displayed\r\n"
#property description "Expert Advisor parameters allow setting Magic Number"
" (unique ID) "
#property description "and the mode of displaying messages in Experts log. All details are displayed by default.\r\n"
input int  MagicNumber=1234567;      // Expert Advisor ID
input bool DescriptionModeFull=true; // Detailed output mode
input double  Price=2652;
input double  Volume=1000;
input double  stoplimit=2681;
input double  sl=1000;
input double  tp=2681;
//+------------------------------------------------------------------+
int OnInit()
  {
//--- check if autotrading is allowed
   if(!TerminalInfoInteger(TERMINAL_TRADE_ALLOWED))
     {
      Alert("Autotrading in the terminal is disabled, Expert Advisor will be removed.");
      ExpertRemove();
      //--     return(-1);
     }
   CreateBuySellButtons();
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   ObjectDelete(0,"Buy");
   ObjectDelete(0,"Sell");
   ObjectDelete(0,"HALL");
  }
//+------------------------------------------------------------------+
void OnTradeTransaction(const MqlTradeTransaction &trans,
                        const MqlTradeRequest &request,
                        const MqlTradeResult &result)
  {

  }
//+------------------------------------------------------------------+
void OnTrade()
  {

  }
//+------------------------------------------------------------------+
void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam)
  {
//--- handling CHARTEVENT_CLICK event ("Clicking the chart")
   if(id==CHARTEVENT_OBJECT_CLICK)
     {
      //--- if "Buy" button is pressed, then buy
      if(sparam=="Buy")
        {
         BuyA(Volume);
         //--- unpress the button
         ObjectSetInteger(0,"Buy",OBJPROP_STATE,false);
        }
      //--- if "Sell" button is pressed, then sell
      if(sparam=="Sell")
        {
         SellA(Volume);
         //--- unpress the button
         ObjectSetInteger(0,"Sell",OBJPROP_STATE,false);
        }
      ChartRedraw();
     }
  }
//+------------------------------------------------------------------+
void CreateBuySellButtons()
  {
   ObjectCreate(0,"Buy",OBJ_BUTTON,0,0,0); // create "Buy" button
   ObjectSetInteger(0,"Buy",OBJPROP_CORNER,CORNER_RIGHT_UPPER);
   ObjectSetInteger(0,"Buy",OBJPROP_XDISTANCE,100);
   ObjectSetInteger(0,"Buy",OBJPROP_YDISTANCE,50);
   ObjectSetInteger(0,"Buy",OBJPROP_XSIZE,70);
   ObjectSetInteger(0,"Buy",OBJPROP_YSIZE,30);
   ObjectSetString(0,"Buy",OBJPROP_TEXT,"Buy");
   ObjectSetInteger(0,"Buy",OBJPROP_COLOR,clrRed);
   ObjectCreate(0,"Sell",OBJ_BUTTON,0,0,0); // create "Sell" button
   ObjectSetInteger(0,"Sell",OBJPROP_CORNER,CORNER_RIGHT_UPPER);
   ObjectSetInteger(0,"Sell",OBJPROP_XDISTANCE,100);
   ObjectSetInteger(0,"Sell",OBJPROP_YDISTANCE,100);
   ObjectSetInteger(0,"Sell",OBJPROP_XSIZE,70);
   ObjectSetInteger(0,"Sell",OBJPROP_YSIZE,30);
   ObjectSetString(0,"Sell",OBJPROP_TEXT,"Sell");
   ObjectSetInteger(0,"Sell",OBJPROP_COLOR,clrBlue);
   ObjectCreate(0,"HALL",OBJ_LABEL,0,0,0); // create LABEL
   ObjectSetInteger(0,"HALL",OBJPROP_CORNER,CORNER_RIGHT_UPPER);
   ObjectSetInteger(0,"HALL",OBJPROP_XDISTANCE,100);
   ObjectSetInteger(0,"HALL",OBJPROP_YDISTANCE,150);
   ObjectSetInteger(0,"HALL",OBJPROP_XSIZE,70);
   ObjectSetInteger(0,"HALL",OBJPROP_YSIZE,30);
   ObjectSetString(0,"HALL",OBJPROP_TEXT,_Symbol);
   ObjectSetInteger(0,"HALL",OBJPROP_COLOR,clrBlue);
   ChartRedraw();
  }
//+------------------------------------------------------------------+
void BuyA(double volume)
  {
//--- prepare the request
   MqlTradeRequest request;
   MqlTradeResult  result;
   MqlTradeCheckResult check;
   ZeroMemory(request);
   ZeroMemory(result);
   ZeroMemory(check);
   request.action=TRADE_ACTION_PENDING;
   request.symbol=_Symbol;
   request.volume=1000.00;
  request.price=2652.000;
   request.stoplimit=2652.000;
   request.sl=0;
   request.tp=0;
request.type=ORDER_TYPE_BUY_STOP_LIMIT;
request.type_filling=ORDER_FILLING_RETURN; 
   request.type_time=0;
   request.expiration=0;
  request.magic=0;
request.comment="";
   if(!OrderSend(request,result))
     {
      Print(__FUNCTION__,": error ",GetLastError(),", retcode = ",result.retcode);
     }
//---
  }
//+------------------------------------------------------------------+
void SellA(double volume)
  {
//--- prepare the request
   MqlTradeRequest request;
   request.action=TRADE_ACTION_DEAL;
   request.symbol=_Symbol;
   request.magic=0;
   request.volume=Volume;
   request.type=ORDER_TYPE_SELL;
   request.price=SymbolInfoDouble(request.symbol,SYMBOL_BID);
   request.deviation=10;
   request.comment="Sell using OrderSendAsync()";
   MqlTradeResult  result;
   if(!OrderSendAsync(request,result))
     {
      Print(__FUNCTION__,": error ",GetLastError(),", retcode = ",result.retcode);
     }
  }
//+------------------------------------------------------------------+
 
jitanic:

Je suis désolé.

s'il vous plaît, vérifiez ce script et donnez-moi mon erreur :

Il fonctionne pour moi. J'ai utilisé TadbirTrader-Server pour le tester.
 
angevoyageur:
Cela fonctionne pour moi. J'ai utilisé TadbirTrader-Server pour le tester.
Avez-vous un compte réel ou un compte de démonstration?!!
Documentation on MQL5: Standard Constants, Enumerations and Structures / Environment State / Account Properties
Documentation on MQL5: Standard Constants, Enumerations and Structures / Environment State / Account Properties
  • www.mql5.com
Standard Constants, Enumerations and Structures / Environment State / Account Properties - Reference on algorithmic/automated trading language for MetaTrader 5
 
jitanic:
avez-vous un compte réel ou vérifiez-vous sur un compte démo? !!

Compte démo uniquement.

P.S : Désolé d'avoir omis de préciser que cela fonctionne sur le compte de démonstration pour vous aussi.

Quelle valeur est retournée sur votre compte réel par :

   printf("expiration=%i",SymbolInfoInteger(_Symbol,SYMBOL_EXPIRATION_MODE));
   printf("filling=%i",SymbolInfoInteger(_Symbol,SYMBOL_FILLING_MODE));
 

Cela fonctionne dans la démo pour moi,

Peut-il être limité par le serveur ?

 
jitanic:

Cela fonctionne dans la démo pour moi,

Peut-il être limité par le serveur ?

Il y a manifestement quelque chose qui vous empêche de placer cet ordre en attente. Probablement des paramètres différents pour ce symbole sur le compte réel (voir mon message précédent).

L'erreur 10006 : request rejected n'est pas un message très utile. Combien de fois avez-vous essayé de passer cet ordre ?

L'ordre d'achat/de vente/dernier sur le compte démo est de 2638/2652/2640, est-ce le même sur le compte réel ?

 
angevoyageur:

Il y a manifestement quelque chose qui vous empêche de placer cet ordre en attente. Probablement des paramètres différents pour ce symbole sur le compte réel (voir mon message précédent).

L'erreur 10006 : request rejected n'est pas un message très utile. Combien de fois avez-vous essayé de passer cet ordre ?

L'ordre d'achat/de vente/dernier sur le compte de démonstration est de 2638/2652/2640, est-ce le même sur le compte réel ?

Bonjour, merci pour votre réponse

Je joins l'image des propriétés du symbole

Si cela ne vous aide pas, dites-moi : où insérer l'ordre d'impression dans mon code ?

Dossiers :
Untitled.png  47 kb
 
jitanic:

Bonjour, merci pour votre réponse

Je joins l'image des propriétés du symbole

Si cela ne vous aide pas, dites-moi : où insérer l'ordre d'impression dans mon code ?

Je ne vois pas pourquoi cela ne fonctionne pas.

Pouvez-vous réessayer, maintenant ? Cela ne fonctionne toujours pas ?