Comment vérifier si une commande est sélectionnée - page 10

 
artmedia70:
Je ne vois pas de problème. C'est quoi le problème... Vous devez sélectionner un ordre dans une fonction principale A(), et dans une autre fonction B(), appelée depuis la fonction principale A(), traiter l'ordre sélectionné dans la fonction A(). Et nous devrions savoir avec certitude dans la fonction B() si l'ordre est toujours sélectionné ou non... Passez donc à la fonction B() le ticket de l'ordre sélectionné dans la fonction A(). Dans la fonction B(), nous pouvons vérifier à partir de quelle liste l'ordre est sélectionné et ensuite décider où aller et quoi renvoyer à la fonction A()...

Vous vous trompez sur moi. Comme la moitié des gens pour une raison quelconque. Je n'ai pas besoin, dans la fonction B(), de traiter cet ordre, qui est sélectionné dans la fonction A(). La fonction B() fonctionne avec d'autres ordres, peu importe lesquels, elle n'a rien à voir avec la fonction A() ; la fonction B() a sa propre logique. Il peut compter le nombre d'ordres, leur profit total, consulter leurs commentaires, TP SL, etc. La tâche consiste à retourner de la fonction B() à la fonction A() de telle sorte que, quoi que la fonction B() ait fait avec les ordres, la logique de la fonction A() au moment de l'appel de la fonction B() ne soit pas violée du fait que l'ordre sélectionné par la fonction A() avant l'appel de la fonction B() n'est plus sélectionné et que l'ordre sélectionné est un autre ordre aléatoire traité par la fonction B() qui recherche très probablement aussi des ordres dans la boucle.

artmedia70:
Imaginons maintenant ce qui va arriver à la variable last_select après le redémarrage du terminal (les lumières sont éteintes par des méchants)

Après le redémarrage, la variable last_select sera initialisée à 0, si nécessaire.

 

Il y a 10 pages de bla, bla, bla. Voici le code qui permet à la fonction de fonctionner avec un autre ordre (non mis en évidence) :

//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
//|  Автор : TarasBY, taras_bulba@tut.by                                              |
//+-----------------------------------------------------------------------------------+
//|        Получаем актуальную информацию об ордере                                  |
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
bool fGet_OrderDetails (int fi_Ticket)              // OrderTicket()
{
    int lia_cmd[] = {1,-1,-1,1,1,-1};
//----
    //---- На текущий момент может быть выделенным другой ордер
    int li_LastTicket = OrderTicket();
    if (li_LastTicket != fi_Ticket)
    {   
        if (!OrderSelect (fi_Ticket, SELECT_BY_TICKET))
        {fSet_Comment (fi_Ticket, fi_Ticket, 100, "fGet_OrderDetails()", True, GetLastError()); return (false);}
    }
    if (bi_curTicket != fi_Ticket)
    {
        bi_Type = OrderType();
        bd_OpenPrice = NDD (OrderOpenPrice());
        bd_Lots = OrderLots();
        bi_cmd = lia_cmd[bi_Type];
        bi_curTicket = fi_Ticket;
    }
    bd_curSL = NDD (OrderStopLoss());
    bd_curTP = NDD (OrderTakeProfit());
    //---- Выделяем первоначальный ордер
    if (li_LastTicket != fi_Ticket) {if (li_LastTicket > 0) OrderSelect (li_LastTicket, SELECT_BY_TICKET);}
//----
    return (true);
}
Il ne s'agit que d'un exemple. Une personne qui comprend l'essentiel comprendra.
 
TarasBY:

Il y a 10 pages de bla, bla, bla. Voici le code qui prévoit que la fonction fonctionne avec un autre ordre (non attribué) :

Il ne s'agit que d'un exemple. Une personne qui comprend l'essentiel comprendra.

Ce n'est pas la question. Il y a des variables, locales ou globales, dans l'EA et il y a des variables terminales. En ce qui concerne le programme, ces variables sont interactives, et leur valeur peut changer de manière absolument inexplicable pour l'EA à tout moment. Le signe de sélection de l'ordre est justement une telle variable. Si Metaquotes permettait l'accès à l'attribut "select" d'un objet graphique, il en serait de même. Cela conduirait inévitablement à la conclusion suivante : nous devrions sélectionner un ordre chaque fois que nous avons besoin de connaître le numéro de l'ordre sélectionné ou nous souvenir de l'ordre sélectionné si et seulement si cela est requis par la logique du conseiller expert. Alors ça se passe comme ça...
 
tara:
Ce n'est pas la question. Il y a des variables, locales ou globales, dans l'EA et il y a des variables du terminal. Ces variables sont interactives du point de vue du programme, et leur valeur peut changer de manière inexplicable pour l'EA à tout moment. Le signe de sélection de l'ordre est justement une telle variable. Si Metaquotes permettait l'accès à l'attribut "select" d'un objet graphique, il en serait de même. Cela conduirait inévitablement à la conclusion suivante : nous devrions sélectionner un ordre chaque fois que nous avons besoin de connaître le numéro de l'ordre sélectionné ou nous souvenir de l'ordre sélectionné si et seulement si cela est requis par la logique du conseiller expert. Alors ça se passe comme ça...

Je suis tout à fait d'accord avec vous :

  • Tout d'abord, nous devons prendre en compte ce dont nous disposons (capacités de MQL4) ;
  • Deuxièmement, j'utilise moi-même la structure de traitement de TOUS lesordres commerciaux avec les ordres ouverts en un seul endroit : je fais une énumération des ordres et j'effectue toutes les actions nécessaires avec chaque ordre (dans l'ordre).

P.S. Et je fais la vérification ci-dessus dans le code "juste au cas où"... :)

 

:)

Joyeuses fêtes ! Pour moi - 20 ans, pas le pire de ma vie.

 
TarasBY:

Il y a 10 pages de bla, bla, bla. Voici le code qui permet à la fonction de fonctionner avec un ordre différent (non mis en évidence) :

Ce n'est qu'un exemple. Une personne qui comprend l'essentiel comprendra.

Yup. Juste là :

int li_LastTicket = OrderTicket() ;

Votre code générera une erreur d'exécution 4105 s'il n'y a pas eu d'appel à OrderSelect avant qu'il ne soit effectué. Il suffit de mettre une vérification GetLastError à la fin de chaque tick et de détecter cette erreur.

 
tara:

:)

Joyeuses fêtes ! Pour moi - 20 ans, pas le pire de ma vie.

Félicitations ! Avez-vous servi Foi et Vérité pendant 20 ans ?
 
borilunad:
Félicitations ! Avez-vous servi Foi et Vérité pendant 20 ans ?
C'est vrai.
 
tara:
Elle, ma chère.
Donc, sur-liste, comme on m'appelait à mon époque, ou peut-être même maintenant, un morceau de... ? :)
 
borilunad:
Donc, la sur-liste, comme on m'appelait à mon époque, ou peut-être même maintenant, un morceau de... ? :)
Tu te sentirais mieux si je le disais ? :)