Toute question des nouveaux arrivants sur MQL4 et MQL5, aide et discussion sur les algorithmes et les codes. - page 173

 
Artyom Trishkin:

Personne ne vous a traité de "pigeon", ce n'est pas vrai. Mais 4-6 lignes de code provoquent aussi, vous savez, la perplexité - parce que si une personne apprend quelque chose, elle doit déjà être en train d'essayer quelque chose, elle a essayé d'écrire quelque chose, et voit déjà clairement que 4-6 lignes n'y correspondent pas.

Montrez-nous ce que vous avez essayé de faire - essayons de comprendre.

Je peux proposer une variante alternative, simplifiée - ne pas chercher un franchissement de niveau de prix par les ticks, mais le chercher par la MA(1) - alors la MA de la barre 1 et la MA de la barre 0 seront utilisées comme indicateur du franchissement de niveau nécessaire.


Désolé pour le long délai de réponse. Je suis content que ça se soit avéré être une simple perplexité, j'ai été troublé. Et pour ma question, j'ai réussi à écrire un code qui ouvrirait un ordre normal lorsqu'il atteint le prix et qu'il ne se rouvrirait pas après avoir franchi ce prix. Mais je l'ai fait de cette façon :
double b = 5 ;
int start()
{
double enchère = Enchère ;
si (bid==0.7777 && b==5)
{
b=b+1 ;
OrderSend(Symbol(), OP_BUY, 0.1, Ask, 0,0,0) ;
}

retour ;

J'ai déjà compris qu'il s'agit d'une méthode "maternelle" et qu'elle ne peut être utilisée car il y a trop de nuances et elle n'est pas du tout pratique. Pouvez-vous dire dans quelle situation ce code ne fonctionnera pas ou comment le modifier pour qu'il fonctionne ? P.s. "cherchez-le sur MA(1) - ensuite MA sur la barre 1 et MA sur la barre 0 vous serviront d'indicateur de franchissement du niveau souhaité. "Je ne sais pas vraiment de quoi il s'agit, donc je peux le mettre de côté pour l'instant jusqu'à ce que j'aie étudié plus de matériel.


 
maxon777:

Désolé d'avoir mis si longtemps à répondre. Je suis content que ça se soit avéré être juste un égarement, j'ai été troublé. Et pour ce qui est de ma question, j'ai réussi à écrire un code qui ouvrirait un ordre normal lorsqu'il atteint le prix et qu'il ne se rouvrirait pas après avoir franchi ce prix. Mais je l'ai fait de cette façon :
double b = 5 ;
int start()
{
double enchère = Enchère ;
si (bid==0.7777 && b==5)
{
b=b+1 ;
OrderSend(Symbol(), OP_BUY, 0.1, Ask, 0,0,0) ;
}

retour ;

J'ai déjà compris qu'il s'agit d'une méthode "maternelle" et qu'elle ne peut être utilisée car il y a trop de nuances et elle n'est pas du tout pratique. Pouvez-vous dire dans quelle situation ce code ne fonctionnera pas ou comment le modifier pour qu'il fonctionne ? P.s. "cherchez-le sur MA(1) - ensuite MA sur la barre 1 et MA sur la barre 0 vous serviront d'indicateur de franchissement du niveau souhaité. "Je ne sais pas vraiment de quoi il s'agit, donc cela peut être reporté pour l'instant jusqu'à ce que j'en sache plus.



Comparaison sur l'égalité de deux nombres, type double, ce n'est pas une bonne opération.

Comme,NormalizeDouble(A - B , 5)==0, je suppose.

 

Bonsoir à tous !

Aidez-moi, je n'arrive pas à trouver un bug dans le code.

Je dois déterminer si j'ai réalisé un profit sur ma paire et si oui, je ne dois pas continuer à trader et fermer l'EA.

mettre un ordre en attente.

Le problème est que lorsque je lance l'EA, il la supprime immédiatement, c'est-à-dire queExpertRemove() se déclenche, bien que je n'aie pas encore eu de profit.

Voici un peu de code :

void OnTick()

{

si (TakeProfit ()>0)

{

ExpertRemove() ;

}

si (TakeProfit ()<=0)

{

Ici, nous mettons une pause

}

}

//+------------------------------------------------------------------+

////////Voir s'il y a eu des transactions clôturées ici avec un profit !!!!!!!!

int TakeProfit ()

{

int count = 0 ;

for(int i=OrdersHistoryTotal()-1 ; i>=0 ; i--)

{

si (OrderSelect (i,SELECT_BY_POS,MODE_HISTORY) == true && OrderMagicNumber() == Magic && OrderSymbol () == Symbol () && OrderProfit()>0.0)

{

compte ++ ;

}

}

retour (count) ;




 
yaaarik777:

Bonsoir à tous !

Aidez-moi, je n'arrive pas à trouver un bug dans le code.

Je dois déterminer si j'ai réalisé un profit sur ma paire et si oui, je ne dois pas continuer à trader et fermer l'EA.

mettre un ordre en attente.

Le problème est que lorsque je lance l'EA, il la supprime immédiatement, c'est-à-dire que ExpertRemove() se déclenche, bien que je n'aie pas encore eu de profit.

Vous trouverez ci-dessous une partie du code :

////////Recherche s'il y a eu... fermé avec profit !!!!!!!!

int TakeProfit ()

{

int count = 0 ;

for(int i=OrdersHistoryTotal()-1 ; i>=0 ; i--)

{

si (OrderSelect (i,SELECT_BY_POS,MODE_HISTORY) == true && OrderMagicNumber() == Magic && OrderSymbol () == Symbol () && OrderProfit()>0.0)

{

compte ++ ;

}

}

retour (count) ;

Que recherchez-vous avec ce code ?

Il regarde le profit de l'historique complet, pas exactement d'une position fermée, et si l'historique complet est positif, alors vous obtenez OrderProfit()>0 dans tous les cas.

 
Vitaly Muzichenko:

Que recherchez-vous avec ce code ?

Il recherche un profit sur l'ensemble de l'historique, pas spécifiquement sur une position fermée, et si l'ensemble de l'historique est positif, alors vous obtiendrez OrderProfit()>0 sur la sortie à n'importe quel scénario.


Comment faire pour qu'elle soit recherchée non pas par toute l'histoire, mais par des positions fermées dès le travail du conseiller ?

Je ne comprends pas.

Je ne comprends pas.

 
yaaarik777:


Comment puis-je faire en sorte que la recherche ne porte pas sur l'ensemble de l'EA, mais sur les EA fermées à partir du moment où l'EA fonctionne ?

Je ne comprends pas.

Merci pour votre aide.

Trouvez la dernière position fermée, qui a été fermée après l'heure de démarrage de l'EA, ou la dernière fermée ce jour, et voyez son profit : OrderProfit()+OrderComission()+OrderSwap()
 
yaaarik777:


Comment puis-je faire en sorte que la recherche ne porte pas sur l'ensemble de l'EA, mais sur les EA fermées à partir du moment où l'EA fonctionne ?

Je ne comprends pas.

Merci pour votre aide.


Comment déterminer si l'EA fonctionne ?

Voici ma suggestion ;

double TakeProfit ()
{
 datetime момент работы советника=0;
 double p=0;
  for(int i=OrdersHistoryTotal()-1; i>=0; i--){
    if (OrderSelect (i,SELECT_BY_POS,MODE_HISTORY)){
       if (OrderMagicNumber() == Magic){
          if(OrderSymbol () == Symbol ()){
            if(момент работы советника<OrderCloseTime()){
               p+=OrderProfit()+OrderCommission()+OrderSwap();
            }
          }
        }
      }
    }
 return(p);
}
   
 
Artyom Trishkin:
Trouvez la dernière position fermée, qui a été fermée après l'heure de démarrage de l'EA, ou la dernière fermée ce jour, et regardez son profit : OrderProfit()+OrderComission()+OrderSwap()


Pourquoi dois-je rechercher toutes les positions fermées après l'heure de début de l'EA ?

Je veux que la recherche se fasse à partir du début de l'EA, pas avant.

 
yaaarik777:


Pourquoi plus tard que l'heure de démarrage de l'EA ? Je l'ai déjà fait rechercher toutes les positions fermées.

vous devez effectuer la recherche dès le début de l'EA, pas avant.


Si vous y réfléchissez, "depuis le début et au-delà" est postérieur à l'heure de début de l'EA ;)

N'ayez pas la flemme d'utiliser l'organe interauriculaire.

 

Bonjour.

Veuillez m'aider à afficher les données d'un fichier sous forme d'histogramme.

Dans le fichier "fichier.txt", une date correspond à un numéro.

Je reçois des données du fichier et je les imprime,