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

 
Vinin:


Je n'ai pas demandé à quelqu'un en particulier.

Mais vous avez dû avoir raison de le prendre personnellement.

Je ne peux pas vous traiter d'idiot, mais vous êtes sourd, c'est sûr.

Vous n'entendez pas les autres. Je ne parle pas de mes remarques, mais des conseils qui vous ont été donnés.

Avez-vous déjà écrit des programmes interopérables ?

Ce que Ant_TL demande est "l'interopérabilité", mais elle ne peut pas être implémentée dans MQL.

 
PapaYozh:

Avez-vous déjà écrit un programme interopérable ?

Ce que Ant_TL demande est "l'interopérabilité", mais ce n'est pas faisable dans MQL.


Ce n'est pas difficile à mettre en œuvre. Et il existe une solution de principe. Trop paresseux pour lire davantage
 
Une telle solution peut être viable pour les postes fermés, qui ne changeront plus. Mais pour les postes ouverts, ce n'est pas la peine de le faire.
 
Vinin:

Il n'est pas difficile à mettre en œuvre. Et il y a une solution. Trop paresseux pour lire davantage

Vous ne serez pas en mesure d'exécuter des opérations avec des ordres et de vous assurer que l'environnement n'est pas affecté.

Cela a déjà été dit à propos de GetLastError(), vous ne pourrez pas restaurer le code qui devrait être retournépar la fonction GetLastError().

 
PapaYozh:

Vous ne pourrez pas exécuter des opérations avec des ordres et être sûr que l'environnement ne sera pas affecté.

Cela a déjà été dit à propos de GetLastError(), vous ne pourrez pas récupérer le code que la fonction GetLastError() aurait dû retourner.


Vous pouvez si vous voulez, il aura juste sa propre fonction ( je veux direGetLastError())
 

Ceci peut ressembler à une solution - OrderSelect() - Enveloppeur de MySelect() à utiliser dans les fonctions qui recherchent des commandes par index.

int last_select=0 ; // placez-le quelque part avant init et start

// ...... code de programme

bool MySelect(int i,int mode=MODE_TRADES){ // sélection de l'ordre - renvoie True si l'ordre est sélectionné et appartient à l'EA, False sinon
if(OrderSelect(i,SELECT_BY_POS,mode)){
last_select=OrderTicket() ;
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber)
return(true) ;
else
return(false) ;
}
return(false) ;
}

bool TickSelect(int tick){ // Sélection de l'ordre directement par tick
if(OrderSelect(tick,SELECT_BY_TICKET))
last_select=tick ;
else
return(false) ;
return(true) ;
}

void SomeFunc(){ // Un modèle de fonction qui peut casser la sélection des ordres et, par conséquent, casser la logique du programme, si la sélection actuelle des ordres n'est pas préservée
int tick=last_select ;

// ... effectuer les actions requises

if(tick>0)
TickSelect(tick) ;
}

 
Ant_TL:

Il ne le peut pas, sauf si vous modifiez vous-même cet état dans le programme.

On suppose que l'état de la commande est passé de MODE_TRADES à MODE_HISTOIRE. Et votre conseiller expert n'a rien fait avec l'ordre. Est-ce que c'est le même ordre ou est-ce qu'il est différent ?

 
Mislaid:

On a supposé que le statut de l'ordre est passé de MODE_TRADES à MODE_HISTOIRE. Et votre EA n'a rien fait avec l'ordre. Est-ce que c'est le même ordre ou est-ce qu'il est différent ?

C'est le même ordre

 
Je ne vois pas le problème. Et il y a beaucoup d'agitation... Vous devez sélectionner un ordre dans une fonction principale A(), et dans une autre fonction B(), appelée à partir de 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(), vous pouvez vérifier dans quelle liste l'ordre est sélectionné et décider ensuite où aller et quoi renvoyer à la fonction A()...
 
Ant_TL:

Ceci peut ressembler à une solution - OrderSelect() - Enveloppeur de MySelect() à utiliser dans les fonctions qui recherchent des commandes par index.

int last_select=0 ; // placez-le quelque part avant init et start

// ...... code de programme

bool MySelect(int i,int mode=MODE_TRADES){ // Sélection de l'ordre dont nous avons besoin - renvoie True si l'ordre a été sélectionné et appartient au Conseiller Expert ; sinon, False
if(OrderSelect(i,SELECT_BY_POS,mode)){
last_select=OrderTicket() ;
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber)
retour (vrai) ;
sinon
retour (faux) ;
}
retour (faux) ;
}

bool TickSelect(int tick){ // Ordonner la sélection directement par tick
if(OrderSelect(tick,SELECT_BY_TICKET))
last_select=tick ;
sinon
retour (faux) ;
retour (vrai) ;
}

void SomeFunc(){ // Un modèle de fonction qui peut interrompre la sélection de la commande et donc la logique du programme, si la sélection de la commande en cours n'est pas prise en charge.
int tick=last_select ;

// ... effectuer l'action requise

si(tick>0)
TickSelect(tick) ;
}

Imaginons ce qu'il adviendra de la variable last_select après le redémarrage du terminal (les méchants ont éteint la lumière).