Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas à côté. Nulle part sans toi - 6. - page 370

 
Ekburg, ok
 
Ekburg:


Installez la dernière build dans le terminal, c'est plus facile d'écrire du code dedans, moins de risque de faire des erreurs, je vous le conseille !)

J'ai corrigé la partie qui a été envoyée en premier, sans la dernière partie des crochets, dont on ne sait pas pourquoi...


C'est ma sortie de l'EA, si toutes les conditions sont remplies alors l'EA est sortie.

c'est-à-dire

fail=true ;

et ensuite

if(fail) return(0) ;

 
SpikeOne:


c'est moi qui sort de l'EA, si toutes les conditions sont remplies alors l'EA est sortie.

c'est-à-dire

fail=true ;

et ensuite

if(fail) return(0) ;


C'est compréhensible, mais dans le code envoyé au début, il y a beaucoup de parenthèses inutiles avant la fonction de sortie).

Celui que j'ai envoyé a aidé ? !

 
si ( AccountProfit()+ AccountBalance()>=740)
{
for(int zx=OrdersTotal() ; zx+1>=0 ; zx--)
{
si(OrderSelect(zx,SELECT_BY_POS,MODE_TRADES)==true)
OrderDelete(OrderTicket()) ;
}
while (OrdersTotal()>0)
{
if(OrderSelect(0,SELECT_BY_POS,MODE_TRADES))
{
if(OrderType()==OP_BUY) result=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(MarketInfo(OrderSymbol(),MODE_BID),MarketInfo(OrderSymbol(),MODE_DIGITS),3,CLR_NONE) ;
if(OrderType()==OP_SELL) result=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(MarketInfo(OrderSymbol(),MODE_ASK),MarketInfo(OrderSymbol(),MODE_DIGITS)),3,CLR_NONE) ;
if (OrderType()==OP_BUYLIMIT || OrderType()==OP_BUYSTOP || OrderType()==OP_SELLLIMIT || OrderType()==OP_SELLSTOP)
OrderDelete(OrderTicket()) ;
si(résultat!=TRUE)
{
er=GetLastError() ;
Print("LastError = ",er, ",Symbol()) ;
}
sinon er=0 ;
}
}
fail=true ;
}

if(fail) return(0) ;

Si vous insérez mon code dans l'EA https://www.mql5.com/ru/code avant l'emplacement

if(or_bu==risk && tick_b==0) open(0)

si(or_sl==risque && tick_s==0) ouvrir(1) ;

alors l'EA commence à trader différemment, bien que dans mon code il ne devrait entrer qu'après avoir tapé 740, initialement mon solde est de 700 dans le testeur.

Les valeurs des tests peuvent être définies comme suit :

extern bool test=false ; //désactiver les objets au test

extern int prof=2 ; // niveau de profit

extern int chag=1.7 ; // pas entre les commandes

extern int risk=0 ; //niveau de risque

extern double lot = 0.01 ; // lot initial

extern double k_lot=2 ; // incrément de volume

extern double lot_max=100 ;

bool result ;

bool fail=false ;

Le problème est qu'il s'échange différemment, je n'arrive pas à trouver la date à laquelle j'ai passé le test en 2013. 11. 08. и 2013. 11 .09.

 
SpikeOne:

alors l'EA commence à trader différemment, bien que dans mon code il ne devrait entrer qu'après avoir composé 740, initialement mon solde est de 700 dans le testeur.


if ( AccountProfit()+ AccountBalance()>=740)
   {
   for(int zx=OrdersTotal(); zx+1>=0; zx--)
      {
      if(OrderSelect(zx,SELECT_BY_POS,MODE_TRADES)==true)
      OrderDelete(OrderTicket());
      }
   while (OrdersTotal()>0)
      {
      if(OrderSelect(0,SELECT_BY_POS,MODE_TRADES))
         {
         if(OrderType()==OP_BUY) result=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(MarketInfo(OrderSymbol(),MODE_BID),MarketInfo(OrderSymbol(),MODE_DIGITS)),3,CLR_NONE);
         if(OrderType()==OP_SELL) result=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(MarketInfo(OrderSymbol(),MODE_ASK),MarketInfo(OrderSymbol(),MODE_DIGITS)),3,CLR_NONE);
         if (OrderType()==OP_BUYLIMIT || OrderType()==OP_BUYSTOP || OrderType()==OP_SELLLIMIT || OrderType()==OP_SELLSTOP)
         OrderDelete(OrderTicket());
         if(result!=TRUE)
            {
            er=GetLastError();
            Print("LastError = ",er, " ",Symbol());
            }
         else er=0;
         }
      else Print( "Error when order select ", GetLastError());
      }
   if(OrdersTotal()==0) fail=true;
   }
if(fail=true) return(0);

Essayez de compiler mon code, faites-moi part du résultat, puis nous y réfléchirons...

s'il entre dans ce code plus tôt que nécessaire, alors le problème se situe au niveau de l'opérateur initial, voyons ce qui cloche

 
Ekburg:

Essayez de compiler mon code, faites-moi part du résultat, puis nous y réfléchirons...

S'il entre dans ce code plus tôt que nécessaire, alors le problème se situe au niveau de l'opérateur de démarrage, voyons ce qui ne va pas à ce niveau.


Oui, je l'ai compilé, mais le problème persiste. .... On dirait qu'il entre dans le code avant qu'il ne le fasse.
 
SpikeOne:

oui compilé, mais le problème reste.... oui, on a l'impression que ça rentre dans le code plus tôt, alors que ça ne devrait pas.

CompteProfitRenvoie la valeur du bénéfice pour le compte courant dans la devise de base.

C'est le problème je pense, vous voulez connaître le bénéfice en quidam et il revient en euros, par exemple...

Essayez de remplacer tout le calcul de la première déclaration de code par ceci :

CompteFonds propresRenvoie le montant des fonds propres pour le compte courant. Le calcul des fonds propres dépend des paramètres du serveur commercial.

et éventuellement compiler cet opérateur :

if(AccountEquity()>=740)
   {
   ...
   }
 
Ekburg:

CompteProfitRenvoie la valeur du bénéfice pour le compte courant dans la devise de base.

C'est le problème je pense, vous voulez connaître le bénéfice en livres et il revient en euros, par exemple.

Essayez de remplacer tout le calcul de la première déclaration de code par ceci :

CompteFonds propresRenvoie le montant des fonds propres pour le compte courant. Le calcul des fonds propres dépend des paramètres du serveur commercial.

et éventuellement compiler cet opérateur :


Le problème semble être différent, si j'insère dans un EA qui ne fonctionne pas correctement, un code qui fonctionne correctement, puis après compilation l'EA ne fonctionne pas correctement, cela ressemble à quand vous ouvrez une page dans le navigateur, et il vous donne le cache à chaque fois.

Même si vous créez un nouvel EA et que vous y insérez un code fonctionnel, il fonctionne de travers pour une raison quelconque.

 
SpikeOne:


...si j'insère un code qui ne fonctionne pas correctement dans un EA qui fonctionne correctement, alors après la compilation l'EA ne fonctionne pas correctement...


Je ne peux pas aider alors) vous devez passer par l'ensemble de l'EA.
 
Ekburg:

Je ne peux pas aider alors) je dois passer par toute l'EA.


Il semble que j'ai trouvé un bug=) les données initiales où le pas entre les ordres est défini en int et j'ai mis 1,7, je l'ai changé en double et ça a bien marché=)

Raison: