Besoin d'aide ? - page 8

 
qgmql:

Est-ce que ce code est correct ? Si non, veuillez écrire du code au lieu du lien, je suis toujours confus.


NON https://www.mql5.com/en/forum/133792/page3#550831

donne la valeur du pip pour un lot négocié sur un symbole spécifique

 

1. Il y a quelques ordres d'achat ouverts et un ordre d'achat en attente placé. Tous les ordres sont dans la même paire de devises. Comment un EA va-t-il sélectionner seulement le dernier ordre ouvert pour vérifier ses limites d'arrêt ?

2. chaque ordre ouvert a été placé à des prix différents avec un tp de 20. est-il possible pour l'EA de modifier tous les ordres ouverts, sauf le dernier, et de changer leurs limites d'arrêt par les limites d'arrêt du dernier ordre ouvert ?

EXEMPLE :

Sr    type   price     tp
1     buy    1.23950   1.23750
------------------------------
#  buylimit   1.23750   1.23550

//////////////////////////////

1    buy     1.23950   1.23550 // tp modified and now equal to 2nd tp
2    buy     1.23750   1.23550 // 2nd tp
------------------------------
#  buylimit   1.23550   1.23350

//////////////////////////////

1    buy     1.23950   1.23350 // tp modified and now equal to 3rd tp
2    buy     1.23750   1.23350 // tp modified and now equal to 3rd tp
3    buy     1.23550   1.23350 // 3rd tp
------------------------------
#  buylimit   1.23350   1.23150
 

Un peu de confusion avec...

//Signal Filter
#define  XXX   0
#define  AAA   1
#define  BBB   2

int SignalS = XXX;

if(SignalS & AAA !=0)
OrderSend(NULL, OP_BUY, LotSize, Ask, Slippage, SL, TP, WindowExpertName(), MagicID, 0, Blue);

L'ancien éditeur accepte les lignes surlignées, mais le nouvel éditeur donne un avertissement "Expression not boolean".

J'ai essayé alors...

if(SignalS && AAA !=0)
//or
if(SignalS !=0 & AAA !=0)

Le nouvel éditeur accepte les deux, mais... lequel fonctionnera de la même manière que la ligne surlignée ? si les deux sont vrais, lequel dois-je utiliser ? (plus pratique ?)

PS : Le code ci-dessous est également accepté par le nouvel éditeur...

if((SignalS & AAA) !=0)

Le nouvel éditeur accepte les trois, mais... lequel fonctionnera de la même manière que la ligne surlignée ? si tous sont vrais, alors lequel sera le plus pratique pour moi ?

 
qgmql: Le nouvel éditeur accepte les trois, mais... lequel fonctionnera de la même manière que la ligne surlignée ? Si tous sont vrais, lequel sera le plus pratique pour moi ?
  1. N'utilisez pas de masque de bits
    //Signal Filter
    #define  XXX   0
    #define  AAA   1
    #define  BBB   2
    
    int SignalS = XXX;
    
    if(SignalS & AAA !=0)
    enum eSignals = {XXX, AAA, BBB};
    
    eSignals SignalS = XXX;
    
    if(SignalS == AAA)
    
    Code auto-documenté.

  2. Utiliser un masque binaire :
    Sur la version 600+ != a une priorité plus élevée que bitwise et, vous DEVEZ utiliser
    (SignalS & AAA) !=0
    Dans les versions précédentes, l'opération bit à bit était supérieure à la multiplication.

    Opération

    Description

    Ordre d'exécution

    ()

    []

    .

    Appel de fonction

    Référence à un élément de tableau

    Référencement à un élément de structure

    De gauche à droite

    !

    ~

    ++

    --

    (type)

    sizeof

    Négation logique

    Négation par bit (complément)

    Changement de signe

    Incrémentation par un

    Décrémentation d'une unité

    Typecasting

    Détermination de la taille en octets

    De droite à gauche

    *

    /

    %

    Multiplication

    Division

    Division de modules

    De gauche à droite

    +

    Addition

    Soustraction

    De gauche à droite

    <<

    >>

    Décalage à gauche

    Décalage à droite

    De gauche à droite

    <

    <=

    >

    >=

    Inférieur à

    Inférieur ou égal

    Supérieur à

    Supérieur ou égal

    De gauche à droite

    ==

    !=

    Egale

    Non égal

    De gauche à droite

    &

    Opération ET par bit

    De gauche à droite

    ^

    Opération OU exclusif par bit

    De gauche à droite

    |

    Opération OU par bit

    De gauche à droite

    &&

    Opération ET logique

    De gauche à droite

    ||

    Opération OU logique

    De gauche à droite

    ? :

    Opérateur conditionnel

    De droite à gauche

    =

    *=

    /=

    %=

    +=

    -=

    <<=

    >>=

    &=

    ^=

    |=

    Assignation

    Multiplication avec affectation

    Division avec affectation

    Module avec affectation

    Addition avec affectation

    Soustraction avec affectation

    Décalage à gauche avec affectation

    Décalage à droite avec affectation

    ET par bit avec affectation

    OU exclusif avec affectation

    OU par bit avec affectation

    De droite à gauche

    ,

    Virgule

    De gauche à droite

    () Appel de fonction de gauche à droite [] Référence à un élément de tableau
    !      Négation logique De droite à gauche - Opération de changement de signe ++ Incrémentation -- Décrémentation ~ Négation par bit (complément)
     Opération par bit ET De gauche à droite | Opération par bit OU ^ Opération par bit OU exclusif << Décalage à gauche >> Décalage à droite
    * Multiplication De gauche à droite / Division % Division modulaire
    + Addition De gauche à droite - Soustraction
    < Moins que De gauche à droite <= Moins que ou égal > Plus que >= Plus que ou égal == Egal!= Non égal
    || && OU logique De gauche à droite
    && ET logique De gauche à droite
    = Assignation De droite à gauche += Addition de l'assignation -= Soustraction de l'assignation *= Multiplication de l'assignation /= Division de l'assignation %= Module de l'assignation >>= Décalage de l'assignation vers la droite <<= Décalage de l'assignation vers la gauche &= Assignation bitwise AND |= Assignation bitwise OR ^= Assignation exclusive OR
    Virgule De gauche à droite
 

WHRoeder j'ai trouvé votre code (select last market order) et j'ai ajouté des lignes en surbrillance pour vérifier son prix tp et pour fixer le même prix tp sur les ordres précédents :

int PositionIndex;    //  <-- this variable is the index used for the loop

int TotalNumberOfOrders;   //  <-- this variable will hold the number of orders currently in the Trade pool
double Ord_TP=0;
TotalNumberOfOrders = OrdersTotal();    // <-- we store the number of Orders in the variable

for(PositionIndex = TotalNumberOfOrders - 1; PositionIndex >= 0 ; PositionIndex --)  //  <-- for loop to loop through all Orders . .   COUNT DOWN TO ZERO !
   {
   if( ! OrderSelect(PositionIndex, SELECT_BY_POS, MODE_TRADES) ) continue;   // <-- if the OrderSelect fails advance the loop to the next PositionIndex
   
   if( OrderMagicNumber() == MagicNo       // <-- does the Order's Magic Number match our EA's magic number ? 
      && OrderSymbol() == Symbol()         // <-- does the Order's Symbol match the Symbol our EA is working on ? 
      && ( OrderType() == OP_BUY           // <-- is the Order a Buy Order ? 
      ||   OrderType() == OP_SELL ) )      // <-- or is it a Sell Order ?
   if(OrderTakeProfit()>0) 
   Ord_TP = OrderTakeProfit(); break;
   if(OrderTakeProfit() == Ord_TP) continue;
    OrderModify(OrderTicket(),0,0,Ord_TP,0,CLR_NONE);
      //if ( ! OrderClose( OrderTicket(), OrderLots(), OrderClosePrice(), Slippage ) )               // <-- try to close the order
         //Print("Order Close failed, order number: ", OrderTicket(), " Error: ", GetLastError() );  // <-- if the Order Close failed print some helpful information 
      
   } //  end of For loop

Une ligne supplémentaire...

if(OrderTakeProfit()>0) 
   Ord_TP = OrderTakeProfit(); break;
   if(OrderTakeProfit() == Ord_TP) continue;
   if(OrderTakeProfit() != Ord_TP)
    OrderModify(OrderTicket(),0,0,Ord_TP,0,CLR_NONE);

S'il vous plaît guidez, si je me trompe.

(Tous les ordres de marché + en attente sont uniquement des ordres d'achat et non de vente ou uniquement des ordres de vente et non d'achat et je veux que le prix de tous les ordres de marché soit modifié à chaque fois qu'un nouvel ordre de marché est ouvert).

C'EST VRAIMENT DIFFICILE POUR MOI, MAIS JE VEUX LE FAIRE.

 
Votre indentation est fausse car vous n'avez pas utilisé d'accolades
if(OrderTakeProfit()>0) 
   Ord_TP = OrderTakeProfit(); break;
   if(OrderTakeProfit() == Ord_TP) continue;
   if(OrderTakeProfit() != Ord_TP)
    OrderModify(OrderTicket(),0,0,Ord_TP,0,CLR_NONE);
Ce qu'est réellement votre code
if(OrderTakeProfit()>0) 
   Ord_TP = OrderTakeProfit(); 
break;
/*NOTREACHED
   if(OrderTakeProfit() == Ord_TP) continue;
   if(OrderTakeProfit() != Ord_TP)
    OrderModify(OrderTicket(),0,0,Ord_TP,0,CLR_NONE);
*/
 
Les choses deviennent compliquées pour moi. Je pense que je devrais écrire le code depuis le début. et je vais coller chaque partie du code ici. peut-être que je pourrais mieux comprendre cela.
Raison: