EA pour chaque paire de devises - quel code pour ouvrir une seule fois par paire de devises ? - page 4

 
onewithzachy:
Vous avez tout faux. Ton code ne sera jamais exécuté ! !!. Utilise celui de RaptorUK.

Ok :)

J'ai simplement été confus par ceci :

"terminer quand j = 0"

Merci !

 
grey.unit:

Donc ça devrait ressembler à ça :

parce que vous avez écrit ceci :

ou est-ce que je me trompe ?

Vous vous trompez... regardez ceci : for

Dans mon code, l'expression 2 est j >= 0 ce qui signifie ... while ( j >= 0 ) donc la boucle s'exécute tant que j est égal ou supérieur à 0, c'est-à-dire de OrdersTotal() - 1 jusqu'à 0 inclus.

Si vous utilisez j = 0 (il faudrait peut-être l'écrire j == 0), cela signifie while (j == 0) et la boucle ne s'exécute que lorsque j est égal à 0.

 
Ah ok, maintenant j'ai compris
 
RaptorUK:

Non, faites ceci...

La première position de l'ordre est 0, donc si vous avez 5 ordres, les positions sont 0, 1, 2, 3, 4... donc la dernière est OrdersTotal() - 1... donc pour décompter, vous commencez à OrdersTotal()-1 et finissez à 0.

Cela signifie-t-il que le total des commandes () -1 correspond à l'absence de commandes, que 0 correspond à la première commande, que 1 correspond à deux commandes et ainsi de suite jusqu'à 4, ce qui correspond à cinq commandes ?

Quelqu'un pourrait-il me dire si ce que j'ai compris, à savoir que -1 est égal à Aucune commande, est correct ?

Merci

 
barnacle7:

Est-ce que cela signifie que OrdersTotal () -1 est No Orders, puis 0 est la première commande, 1 est la deuxième commande et ainsi de suite jusqu'à 4, ce qui correspond à 5 commandes.

OrdersTotal() est le nombre d'ordres ouverts. Oui, si vous en avez 5 au total, ils sont numérotés de 0 à 4.
 

J'ai également besoin d'aide concernant le même problème. Je suis un codeur débutant et j'ai essayé d'entrer le code que j'ai vu ici mais cela ne fonctionne pas du tout, pouvez-vous m'aider ? L'Orderselect a été utilisé

pour remplacer OrdersTotal et contrôler le nombre de transactions effectuées par chaque EA mais maintenant les autres ne veulent pas effectuer de transactions.

void OnTick()

{
       double movingAverageSS = iMA(NULL,60,LowerMAS,0,MODE_SMA,PRICE_CLOSE,0);    
       double lastmovingAverageSS = iMA(NULL,60,LowerMAS,0,MODE_SMA,PRICE_CLOSE,1);     
       double movingAverageSB = iMA(NULL,60,LowerMAB,0,MODE_SMA,PRICE_CLOSE,0);       
       double lastmovingAverageSB = iMA(NULL,60,LowerMAB,0,MODE_SMA,PRICE_CLOSE,1);          
       double movingAverageFS = iMA(NULL,60,UpperMAS,0,MODE_SMA,PRICE_CLOSE,0);    
       double lastmovingAverageFS = iMA(NULL,60,UpperMAS,0,MODE_SMA,PRICE_CLOSE,1);   
       double movingAverageFB = iMA(NULL,60,UpperMAB,0,MODE_SMA,PRICE_CLOSE,0);    
       double lastmovingAverageFB = iMA(NULL,60,UpperMAB,0,MODE_SMA,PRICE_CLOSE,1);    
       int b;int bM;int s;int sM;    
       bool res = (OrderSelect(b,SELECT_BY_POS));    
       bool resM = (OrderSelect(bM,SELECT_BY_POS));    
       bool ses = (OrderSelect(s,SELECT_BY_POS));    
       bool sesM = (OrderSelect(sM,SELECT_BY_POS));    
       
       if((lastmovingAverageFB<lastmovingAverageSB) && (movingAverageFB > movingAverageSB) && res == false  && resM == false )      
         {
         b = OrderSend (Symbol(),OP_BUY,lotSize,Ask,4,Ask - SLPB*_Point, Ask + TPB1*_Point,NULL,1,0,Green);       
         bM = OrderSend (Symbol(),OP_BUY,lotSize,Ask,4,Ask - SLPB*_Point, Ask + TPB2*_Point,NULL,2,0,Green);       
         }       
         else if((lastmovingAverageFS>lastmovingAverageSS)&&(movingAverageFS<movingAverageSS) && ses == false && sesM == false)     
         {  
         s = OrderSend (Symbol(),OP_SELL,lotSize,Bid,4,Ask + SLPS*_Point,Ask - TPS1*_Point,NULL,3,0,Red);       
        sM = OrderSend (Symbol(),OP_SELL,lotSize,Bid,4,Ask + SLPS*_Point,Ask - TPS2*_Point,NULL,4,0,Red);   
}


 
&& res == false

Orderselect retournera vrai s'il a sélectionné une commande.

Vous pouvez peut-être utiliser un nombre magique en combinaison avec le nom du symbole.

Voici un exemple dans l'article que vous pouvez étudier: https://www.mql5.com/en/articles/1359

MagicNumber: "Magic" Identifier of the Order
MagicNumber: "Magic" Identifier of the Order
  • www.mql5.com
In МТ3, management of open positions was rather time-taking. Traders had at their disposal a rather limited tool set to work with the list of open and closed positions. The problem of distinguishing between "own" and "someone else's" positions was solved in rather complicated ways. In МТ4, the situation has cardinally changed. Now, trader can...
 
  1.        int b;int bM;int s;int sM;    
           bool res = (OrderSelect(b,SELECT_BY_POS));    
           bool resM = (OrderSelect(bM,SELECT_BY_POS));    
           bool ses = (OrderSelect(s,SELECT_BY_POS));    
           bool sesM = (OrderSelect(sM,SELECT_BY_POS));    

    b comme aucune valeur, OrderSelect échoue. bM comme aucune valeur, OrderSelect échoue. s comme aucune valeur, OrderSelect échoue. sM comme aucune valeur, OrderSelect échoue.

  2. Quel est l'intérêt de sélectionner plusieurs commandes ? Le résultat est la dernière sélection réussie.

  3.          b = OrderSend (Symbol(),OP_BUY,lotSize,Ask,4,Ask - SLPB*_Point, Ask + TPB1*_Point,NULL,1,0,Green);       
             bM = OrderSend (Symbol(),OP_BUY,lotSize,Ask,4,Ask - SLPB*_Point, Ask + TPB2*_Point,NULL,2,0,Green);       
    
    b et bM sont des variables locales. Les numéros de tickets sont perdus au retour.

  4. Pourquoi essayez-vous de sélectionner par position, mais de stocker les numéros de tickets ? Si vous sélectionnez par un numéro de ticket valide, cela ne signifie pas que l'ordre est ouvert.

  5. Vous achetez à l'Ask et vendez à l'Bid.

    1. Le TP/SL de votre ordre d'achat (ou l'entrée du Stop de vente/Limite de vente) est déclenché lorsque le Bid / OrderClosePrice l'atteint. L'utilisation de l'Ask±n rend votre SL plus court et votre TP plus long, par le spread. Ne voulez-vous pas que le montant spécifié soit utilisé dans les deux sens ?

    2. Le TP/SL de votre ordre de vente (ou l'entrée du Buy Stop/Buy Limit) sera déclenché lorsque le Ask / OrderClosePrice l'atteindra. Pour déclencher à un prix Bid spécifique, ajoutez le spread moyen.
      MODE_SPREAD (Paul) - MQL4 programming forum - Page 3 #25

    3. Les graphiques montrent uniquement les prix Bid. Activez la ligne Ask pour voir l'ampleur du spread(Outils → Options (control+O) → graphiques → Afficher la ligne ask).
      La plupart des courtiers avec un spread variable s'élargissent considérablement en fin de journée (17 heures ET) ± 30 minutes. Mon GBPJPY (OANDA) montre un spread moyen = 26 points, mais un spread maximum moyen = 134.