Question pour les connaisseurs - page 8

 

Bon après-midi. Dans la rubrique "Sensation ! Une stratégie rentable a été trouvée !

Rid a posté une EAce matin. Je l'ai téléchargé, optimisé un peu et exécuté.

Il fonctionne sur un compte de démonstration (dax) sans aucun problème (mt4 brok-trade).

Je l'ai testé sur un compte réel. Lot de départ=0,01 ou 0,1.

Cela ne fonctionne pas ! Le journal renvoie une erreur

2009.06.12 15:17:26 HlopMaster FDAXM9,M1 : montant des lots invalide pour la fonction OrderSend

2009.06.12 15:17:26 HlopMaster FDAXM9,M1 : OrderSend()- Erreur OP_SELLSTOP. op 5087.50000000 sl 0.00000000 tp 0.00000000 4051

//------------------------------------------------------------------

Je ne peux pas comprendre pourquoi.

La taille du dépôt vous permet de fixer un lot donné avec une réserve. Il n'y a aucune restriction dans le code du conseiller expert pour le compte réel.

Alors quel est le problème ? Veuillez me conseiller !


 

Voici le code source.

... !!!!!!!!!!!!!!!!!! ......... !!!!!!!!!!!!!!!!!

Je me demande. Quand vont-ils lever les restrictions sur le code ? Pourquoi ne puis-je pas publier dans une fenêtre ouverte le code d'une EA dans son intégralité dans un forum spécialisé ?

La réponse que j'obtiens au lieu de "READY LARGE TEXT SIZE" fonctionne trop bien.

On dirait que MQ est composé de "cosaques" d'un concurrent qui font tout pour énerver les visiteurs et les empêcher de poser les bonnes questions ici.



Dossiers :
hlopmaster.mq4  11 kb
 

Voici les morceaux de code responsables du calcul des lots :

//------------------------------------------------
double GetMaxLot()// Функция возвращает максимальный обьем 
//открытой позиции.  
{int i;double maxlot;
   for( i=1; i<=OrdersTotal(); i++)         
   {
      if(OrderSelect( i-1, SELECT_BY_POS)==true) 
       {                                   
           if((OrderType()==OP_BUY ||OrderType()==OP_SELL)  && OrderSymbol()==Symbol()
          && maxlot<OrderLots()){ maxlot=OrderLots();}
       }
    }   
return( maxlot);
}
//-----------------------------------------------
double GetMaxLotOrder()
//Функция возвращает максимальный обьем установленных
// стоп ордеров. 
{int i;double maxlot;
   for( i=1; i<=OrdersTotal(); i++)         
   {
      if(OrderSelect( i-1, SELECT_BY_POS)==true) 
       {                                   
           if((OrderType()==OP_BUYSTOP ||OrderType()==OP_SELLSTOP)  &&
           OrderSymbol()==Symbol() && maxlot<OrderLots())
           { maxlot=OrderLots();}
       }
    }   
return( maxlot);
}
//----------------------------------------------
int GetLastTypePos(){
   int i;datetime dt;int type;
      for( i=1; i<=OrdersTotal(); i++)         
      {
         if(OrderSelect( i-1, SELECT_BY_POS)==true) 
          {                                   
              if((OrderType()==OP_BUY ||OrderType()==OP_SELL)  && OrderSymbol()==Symbol() 
              && dt<OrderOpenTime())
              { dt=OrderOpenTime(); type=OrderType();}
          }
       }   
   return( type);
}
//-----------------------------------------------
int DopOrder(double Lots)
{
int type= GetLastTypePos();
   if( type==1){
     op=Bid+ pips*Point;if( SL>0){ sl=Bid;}else{ sl=0;}if( TP>0){ tp= op+ TP*Point;}else{ tp=0;}
     err=OrderSend(Symbol(),OP_BUYSTOP, Lots,NormalizeDouble( op,Digits),3,NormalizeDouble( sl,Digits),
NormalizeDouble( tp,Digits),"FORTRADER.RU",0,0,Red);
     if( err<0){Print("OrderSend()-  Ошибка OP_BUYSTOP. 
                op "+ op+" sl "+ sl+" tp "+ tp+" "+GetLastError());return(-1);}
   }
   if( type==0){
      op=Ask- pips*Point;if( SL>0){ sl=Ask;}else{ sl=0;}if( TP>0){ tp= op- TP*Point;}else{ tp=0;}
      err=OrderSend(Symbol(),OP_SELLSTOP, Lots,NormalizeDouble( op,Digits),3,NormalizeDouble( sl,Digits),
NormalizeDouble( tp,Digits),"FORTRADER.RU",0,0,Red);
      if( err<0){Print("OrderSend()-  Ошибка OP_SELLSTOP. 
                   op "+ op+" sl "+ sl+" tp "+ tp+" "+GetLastError());return(-1);}
   }
return(0);
}
//-------------------------------------------------
int CloseAllPos(int type)
{  int buy=1; int sell=1;
int i, b=0;int ordertiket;
 
 if( type==1)
   {
   while( buy==1)
     {
        buy=0;
        for( i=0; i<OrdersTotal(); i++)
         {
           if(true==OrderSelect( i, SELECT_BY_POS, MODE_TRADES))
           {
           if(OrderType()==OP_BUY && OrderSymbol()==Symbol() ){ buy=1; 
                                  OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet);}
           }else{ buy=0;}
         }  
         if( buy==0){return(0);}
      } 
   }
   
   if( type==0)
   {
      while( sell==1)
     {
        sell=0;
        for( i=0; i<OrdersTotal(); i++)
         {
           if(true==OrderSelect( i, SELECT_BY_POS, MODE_TRADES))
           {
           if(OrderType()==OP_SELL && OrderSymbol()==Symbol() ){ sell=1;
                                 OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet); }
           }else{ sell=0;}
         }  
         
        if( sell==0){return(0);}
      } 
     }
   return(0);
   }
//--------------------------------------------------------


 
Rita писал(а) >>

Voici les morceaux de code qui calculent les lots :

Le conseiller expert n'est pas conçu pour fonctionner sur un compte réel. S'il existe au moins une position ouverte sur d'autres symboles, alors la logique de travail est rompue. Bien sûr, il peut être corrigé mais, pour ma part, je ne vois pas trop l'intérêt de le faire.

 
Merci. Pourquoi alors une erreur aussi étrange est-elle renvoyée ?
 
Rita писал(а) >>
>> Merci. Pourquoi une erreur aussi étrange revient-elle alors ?

L'erreur se produit très probablement

   if(OrdersTotal()<1){ err= OpenNewOrders();}
   if(OrdersTotal()>0){ TrailStopOrders();}

lors de l'appel de TrailStopOrders() ;

Puisqu'il y a déjà des commandes pour d'autres symboles. Dans ce cas, l'EA ne s'ouvre pas du tout.

Cependant, nous devons considérer la logique.

Il semble que l'erreur se produise ailleurs. Mais je ne pourrai pas le vérifier. Je n'ai pas de poste à pourvoir.

Je ne peux le vérifier que dans mon esprit. Et j'ai besoin que mon EA soit à moi pour ça.

 
Savez-vous s'il existe un système dans MT4 pour déterminer les pips gagnés ou perdus sur les transactions du jour ?
 

Ce n'est pas très clair ce que vous voulez exactement. Jetez un coup d'œil à ce modèle.

http://www.kimiv.ru/index.php?option=com_remository&Itemid=13&func=fileinfo&id=45

 
Rita, merci !
 

Bonsoir. Un gros problème s'est posé. Pas vraiment dans le sujet. Et un très mauvais timing.

Hier soir, j'ai reçu un lien incompréhensible dans mon ICQ, sur lequel j'ai cliqué sans réfléchir.

Après cela, mon ordinateur s'est figé et une fenêtre est apparue avec la suggestion d'envoyer un sms.

J'ai redémarré l'ordinateur plusieurs fois et il s'est déverrouillé après 45-50 minutes.

Mais maintenant, je ne peux pas accéder à mon portefeuille WM.

Il faut une sorte de code d'accès. (Les clés du fichier lui-même sont).

Je ne sais pas quoi faire. Who-knib. était dans une situation similaire ?

Raison: