Championnat de trading automatisé 2007 : les erreurs courantes des experts - page 6

 
Le message d'erreur "OrderModify error 1 " signifie que OrderModify a été appelé avec des paramètres inchangés, ce qui est dû à une programmation inexacte.

Avant d'appeler OrderModify, vérifiez si vous appelez la mise à jour avec les nouvelles données ou si vous essayez de définir des valeurs existantes.
 
Le test de votre expert est terminé. Rapport d'essai d'expert :
-----------------------
2007.09.08 17:47
sur EURUSD:60
17:38:34 2007.01.04 00:01 stalker_2 EURUSD,H4 : Erreur OrderModify 1
17:38:34 2007.01.04 00:02 stalker_2 EURUSD,H4 : Erreur OrderModify 1
17:38:34 2007.01.04 00:03 stalker_2 EURUSD,H4 : Erreur OrderModify 1
17:38:34 2007.01.04 00:04 stalker_2 EURUSD,H4 : Erreur OrderModify 1
17:38:34 2007.01.04 00:04 stalker_2 EURUSD,H4 : Erreur OrderModify 1
17:38:34 2007.01.04 00:06 stalker_2 EURUSD,H4 : Erreur OrderModify 1
17:38:34 2007.01.04 00:06 stalker_2 EURUSD,H4 : Erreur OrderModify 1
17:38:34 2007.01.04 00:06 stalker_2 EURUSD,H4 : Erreur OrderModify 1
17:38:34 2007.01.04 00:06 stalker_2 EURUSD,H4 : Erreur OrderModify 1
17:38:34 2007.01.04 00:06 stalker_2 EURUSD,H4 : Erreur OrderModify 1
17:38:34 2007.01.04 00:06 stalker_2 EURUSD,H4 : Erreur OrderModify 1
17:38:34 2007.01.04 00:07 stalker_2 EURUSD,H4 : Erreur OrderModify 1
17:38:34 2007.01.04 00:07 stalker_2 EURUSD,H4 : Erreur OrderModify 1
17:38:34 2007.01.04 00:07 stalker_2 EURUSD,H4 : erreur OrderModify 1
17:38:34 2007.01.04 00:07 stalker_2 EURUSD,H4 : erreur OrderModify 1
17:38:34 2007.01.04 00:07 stalker_2 EURUSD,H4 : erreur OrderModify 1
17:38:34 2007.01.04 00:07 stalker_2 EURUSD,H4 : erreur OrderModify 1
17:38:34 2007.01.04 00:07 stalker_2 EURUSD,H4 : erreur OrderModify 1
17:38:34 2007.01.04 00:07 stalker_2 EURUSD,H4 : erreur OrderModify 1
17:38:34 2007.01.04 00:08 stalker_2 EURUSD,H4 : Erreur OrderModify 1
0 min 49 secondes
Erreurs : 20


-----------------------

Veuillez corriger votre code Expert Advisor et télécharger une nouvelle version sur votre page de profil :

Je pense que votre robot est devenu fou, il semble avoir beaucoup de participants :-) Il a déjà mélangé les Expert Advisors. J'ai un conseiller expert qui n'écrit pas "stalker_2" dans les commentaires et qui fonctionne sur le graphique horaire. Et la commande OrderModify ne l'utilise pas du tout.
 
Renat:
Le message d'erreur "OrderModify error 1" signifie que l'on appelle OrderModify avec des paramètres inchangés, ce qui est dû à une programmation inexacte.

Avant d'appeler OrderModify, veuillez vérifier si vous appelez la mise à jour avec de nouvelles données ou si vous essayez de définir des valeurs déjà existantes.

Vous voulez peut-être parler de la construction ?

si ( RefreshRates() == true )

{

....

OrderModify(Ticket,...

}

dans ma recherche

Resresh() après chaque modification de commande dans la boucle

Breakeven après 35 pips de profit

variables externes, valeur la plus faible

FirstTralStopSell = 35 ;

trall ultérieur après avoir atteint 50 pips

je ne comprends pas bien comment cette erreur peut se produire - je n'ai pas ce genre d'erreur lors des tests

il est possible qu'après avoir émis la commande OrderModify, le système de test émule des requêtes de telle sorte que le prix ait le temps de revenir de plus de 50 pips.

mais alors comment éviter une telle situation ?

de plus, mes LOGS n'apparaissent pas dans le fichier de log fourni par le système de test !

if (err != 0 )
{
if ( ECHOerror == 1 )
Print("Error("+err+") Open="+OrderOpenPrice()+""+OrderStopLoss()+" modifiant SL : "+(Ask+Point*FirstTralStopSell)+" TP "+(0)+""+msgErrors(err)) ;
}

void TralYZ(int lLockTralSell, int lLockTralBuy)
{
   int err;
   int cnt=OrdersTotal();
   int LocalDinamicTrallSELL;
   int LocalDinamicTrallBUY;
   int FirstTralStopSell;
   int FirstTralStopBuy;
   LocalDinamicTrallSELL = oDinamicTrallSELL ; // значения по умолчанию 
   LocalDinamicTrallBUY =  oDinamicTrallBUY  ;
   FirstTralStopSell = oFirstTralStopSell;             // первый безуюыток 
   FirstTralStopBuy = oFirstTralStopBuy;
 
 
   while(cnt>=0)
   {
      RefreshRates();
      
      OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
      Sleep(10000);
      int Ticket=OrderTicket();
      int IDorder;
      IDorder = FindID(Ticket);
      if (OrderSymbol() == Symbol() )
      {
         if (OrderType()==OP_SELL && lLockTralSell == 0 ) 
         {         
            if ( OrderMagicNumber() == MAGIC3 )
               FirstTralStopSell = d3FirstTralStopBuy;
            if ( OrderMagicNumber() == MAGIC2 )
               FirstTralStopSell = d2FirstTralStopBuy;
            if ( OrderMagicNumber() == MAGIC1 )
               FirstTralStopSell = d1FirstTralStopBuy;
            if ( OrderMagicNumber() == cMAGIC3 )
               FirstTralStopSell = c3FirstTralStopSell;
            if ( OrderMagicNumber() == cMAGIC2 )
               FirstTralStopSell = c2FirstTralStopSell;
            if ( OrderMagicNumber() == cMAGIC1 )
               FirstTralStopSell = c1FirstTralStopSell;
            if ( 
               ( OrderStopLoss() == 0  && ( OrderOpenPrice()-Ask )>=(FirstTralStopSell*Point) + Ask-Bid ) ||
               ( OrderStopLoss() > OrderOpenPrice()  && ( OrderOpenPrice()-Ask )>=(FirstTralStopSell*Point) + Ask-Bid ) 
               )
            {                  
               if ( DEBUG == 1 )
                  Print( "1 SL="+OrderStopLoss()+" > OP="+OrderOpenPrice() +" && ( OP"+OrderOpenPrice()+" - Ask"+Ask+") "+( OrderOpenPrice()-Ask ) +" >= ( "+FirstTralStopSell+" *  "+Point+")  "+Ask+" - "+Bid+" ="+(Ask-Bid));
               lotlib_PrevLots = OrderLots();  
               lotlib_PrevProfit = OrderProfit();
               OrderModify(Ticket,OrderOpenPrice(),Ask+(Point*FirstTralStopSell) , 0 ,0,Purple);
               Sleep( 10000 );
               err=GetLastError();
               if (err != 0 )
               {
                  if ( ECHOerror == 1 )
                     Print("Error("+err+") Open="+OrderOpenPrice()+" "+OrderStopLoss()+" modifying SL: "+(Ask+Point*FirstTralStopSell)+" TP "+(0)+" "+msgErrors(err));
               }
            }
 
J'ai vérifié le même code Expert trois fois. Les deux premières fois, il n'y avait pas d'erreur et la troisième fois, il y a eu une erreur soudaine et je dois maintenant changer le code Expert. je ne comprends pas pourquoi le même code Expert doit être vérifié plusieurs fois ?
 
Renat:
Le message d'erreur "OrderModify error 1 " signifie que OrderModify a été appelé avec des paramètres inchangés, ce qui est dû à une programmation inexacte.

Avant d'appeler OrderModify, vérifiez si vous appelez la mise à jour avec de nouvelles données ou si vous essayez de définir des valeurs existantes.


Après avoir introduit la construction

                     if ( RefreshRates() == true )
                        OrderModify(Ticket,OrderOpenPrice(),Bid-Point*LocalDinamicTrallBUY , 0,0,Purple);

la version 208 du terminal ne fonctionne pas du tout dans les tests

RefreshRates() == true ?

LocalDinamicTrallBUY = 50 ;

entrée de trall

              if ( OrderStopLoss() > OrderOpenPrice() && ( Bid - OrderStopLoss() )  >= (LocalDinamicTrallBUY*Point) + Ask-Bid )
                  {
                     lotlib_PrevLots = OrderLots();  
                     lotlib_PrevProfit = OrderProfit();
                     if ( RefreshRates() == true )
                        OrderModify(Ticket,OrderOpenPrice(),Bid-Point*LocalDinamicTrallBUY , 0,0,Purple);

il doit y avoir des subtilités... Je ne sais pas

 
YuraZ:
Renat:
Le message d'erreur "OrderModify error 1" signifie que OrderModify est appelé avec des paramètres inchangés, ce qui est dû à une programmation imprécise.

Avant d'appeler OrderModify, vérifiez si vous appelez la mise à jour avec de nouvelles données ou si vous essayez de définir des valeurs existantes.

Vous voulez peut-être parler de la construction ?


Cela signifie que vous essayez de définir dans OrderModify la même valeur StopLoss que celle qui s'y trouvait déjà. Par exemple, si le StopLoss est à 1,3020 et que vous essayez de fixer à nouveau le stop à 1,3020, OrderModify renverra le code 1. Ceci est explicitement indiqué dans la documentation de OrderModify:

bool OrderModify( int ticket, double prix, double stoploss, double takeprofit, date d'expiration, couleur arrow_color=CLR_NONE)
Modifie les paramètres des positions précédemment ouvertes ou des ordres en attente. Renvoie VRAI si la fonction se termine avec succès. Renvoie FAUX si la fonction échoue. Vous devez appeler GetLastError() pour obtenir les informations sur les erreurs.

Remarque : le prix d'ouverture et le délai d'expiration ne peuvent être modifiés que pour les ordres en cours.
Si des valeurs inchangées sont transmises comme paramètres à la fonction, une erreur 1 (ERR_NO_RESULT) sera générée.
Sur certains serveurs commerciaux, l'application du délai d'expiration pour les ordres en attente peut être interdite. Dans ce cas, une erreur 147 (ERR_TRADE_EXPIRATION_DENIED) sera générée lors de la tentative de définir une valeur non nulle dans le paramètre d'expiration.
 
Renat:
YuraZ:
Renat:
Le message d'erreur "OrderModify error 1" signifie un appel OrderModify avec des paramètres inchangés, ce qui est dû à une programmation inexacte.

Avant d'appeler OrderModify, vérifiez si vous appelez la mise à jour avec de nouvelles données ou si vous essayez de définir des valeurs déjà existantes.

Vous voulez peut-être parler de la construction ?


Ce que cela signifie, c'est que vous essayez de définir la même valeur StopLoss dans OrderModify que celle qui était déjà présente. Par exemple, si le StopLoss est à 1,3020 et que vous essayez de fixer à nouveau le stop à 1,3020, OrderModify renverra le code 1. Ceci est explicitement indiqué dans la documentation de OrderModify:

bool OrderModify( int ticket, double prix, double stoploss, double takeprofit, date d'expiration, couleur arrow_color=CLR_NONE)
Modifie les paramètres des positions précédemment ouvertes ou des ordres en attente. Renvoie VRAI si la fonction s'est déroulée avec succès. Renvoie FALSE si la fonction échoue. Appelez GetLastError() pour obtenir des informations sur l'erreur.

Remarque : le prix d'ouverture et l'heure d'expiration ne peuvent être modifiés que pour les ordres en cours.
Si des valeurs inchangées sont transmises comme paramètres à la fonction, une erreur 1 (ERR_NO_RESULT) sera générée.
Sur certains serveurs commerciaux, l'application du délai d'expiration pour les ordres en attente peut être interdite. Dans ce cas, une erreur 147 (ERR_TRADE_EXPIRATION_DENIED) sera générée lors de la tentative de définir une valeur non nulle dans le paramètre d'expiration.


WOW ! !! exactement ! !! Renat, merci !

ajout d'une condition d'entrée de trall

&& OrderStopLoss() != Ask+Point*LocalDinamicTrallSELL

if ( 
                         OrderStopLoss()  < OrderOpenPrice()
                      && ( OrderStopLoss()-Ask )>=(LocalDinamicTrallSELL*Point) + Ask-Bid   
                      && OrderStopLoss() !=  Ask+Point*LocalDinamicTrallSELL    
                       ) 
                  {                     
                     if ( DEBUG == 1 )
                        Print( "2 SL="+OrderStopLoss()+" < OP="+OrderOpenPrice() +" && ( OP"+OrderOpenPrice()+" - Ask"+Ask+") "+( OrderOpenPrice()-Ask ) +" >= ( "+LocalDinamicTrallSELL+" *  "+Point+")  "+Ask+" - "+Bid+" ="+(Ask-Bid));
                     lotlib_PrevLots = OrderLots();  
                     lotlib_PrevProfit = OrderProfit();
                     if ( RefreshRates() == true )
                        OrderModify(Ticket,OrderOpenPrice(),Ask+Point*LocalDinamicTrallSELL , 0,0,Purple);
                     err=GetLastError();
                     if (err != 0 )
                     {   
                        if ( ECHOerror == 1 )
                           Print("Error("+err+") Open="+OrderOpenPrice()+" "+OrderStopLoss()+" modifying SL: "+(Ask+Point*LocalDinamicTrallSELL)+" TP "+(0)+" "+msgErrors(err));
                     }
                  }

Mais il n'y avait pas d'erreurs dans mes journaux pendant les tests ! - c'est très étrange

 
pilgrim:

Je pense que votre robot est devenu fou, je pense qu'il a beaucoup de participants :-) Il a déjà commencé à confondre les EAs. Mon EA n'écrit pas "stalker_2" dans les commentaires, il fonctionne sur le graphique horaire. Et la commande OrderModify ne l'utilise pas du tout.
Le script du testeur automatisé a capturé les logs de quelqu'un d'autre - a déjà été corrigé.
 
Par exemple, j'ai reçu deux fois un courriel m'informant que l'expenrt a passé le test et que je suis enregistré... et au troisième, il est dit que j'ai une erreur dans le code... pourquoi dois-je changer le code de l'expert que j'ai téléchargé une fois dans le profil ?
 
folver:
Par exemple, j'ai reçu deux fois un courriel m'informant que l'expert avait passé le test avec succès et que j'étais inscrit... et la troisième fois, il me dit que j'ai une erreur dans le code... pourquoi devrais-je modifier le code du conseiller expert une fois que je l'ai téléchargé dans le profil ?
À en juger par les résultats, le conseiller expert a pris un appel de marge. Je ne peux encore rien dire. Demain matin, les contrôles suivants seront effectués et nous vérifierons les résultats.