Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas à côté. Nulle part sans toi - 6. - page 1060

 
abeiks:

Vous trouverez ici une partie des réponses : https://www.mql5.com/ru/forum/131859


1. Merci, mais je n'ai pas trouvé la réponse. Il existe une fonction SetOrder(), mais elle est essentiellement identique à OrderSend(). Vous ne pouvez pas ouvrir plusieurs commandes en même temps avec cette fonction.
 
smart_man:
1. Merci, mais je n'ai pas trouvé la réponse. Il existe une fonction SetOrder(), mais elle est essentiellement identique à OrderSend(). Vous ne pouvez pas ouvrir plusieurs commandes en même temps avec cette fonction.

Vous ne pouvez pas ouvrir plusieurs ordres en même temps avec une fonction quelconque, car le serveur exécute les ordres un par un et non en parallèle, et les ordres proviennent de tous les clients, pas seulement du vôtre.

Au mieux, les ordres seront ouverts avec quelques millisecondes d'écart l'un après l'autre, mais seulement s'il existe une demande sur le marché.

 
evillive:

Vous ne pouvez pas ouvrir plusieurs ordres en même temps avec une fonction quelconque, car le serveur exécute les ordres un par un et non en parallèle, et les ordres proviennent de tous les clients, pas seulement du vôtre.

Dans le meilleur des cas, les ordres s'ouvriront avec quelques millisecondes d'écart les uns après les autres, mais uniquement s'il existe une demande sur le marché.

Je vois que vous avez compris le problème ! La seule chose qui me vient à l'esprit est d'ouvrir ces ordres en attente. Est-il alors possible de les ouvrir en même temps ?
 
smart_man:
Voilà, je vois que vous comprenez le problème ! La seule chose à laquelle je pense est que vous ouvrez ces ordres de manière différée. Est-il alors possible de les ouvrir en même temps ?
Non, le serveur les exécute toujours un par un, en attente ou sur le marché.
 
evillive:
Non, le serveur les exécutera toujours un par un, en attente ou sur le marché.

1. alors la question de la "simultanéité" est supprimée. Dans ce cas, il n'y a aucune différence entre l'ouverture d'un marché et un marché en suspens.

2. Est-il correct de vérifier manuellement à chaque tick si l'ordre a été clôturé, afin d'attraper le moment de cette même clôture (par TP ou SL) ou existe-t-il des fonctions prêtes à l'emploi ?

 
smart_man:

1) La question de la "simultanéité" est alors supprimée. Dans ce cas, il n'y a pas de différence entre le marché d'ouverture et le marché en suspens.

2. Est-il correct de vérifier manuellement à chaque tick si l'ordre est fermé, afin de déterminer le moment de cette fermeture même (par TP ou SL) ou existe-t-il des fonctions prêtes ?

2 Regardez attentivement : https://www.mql5.com/ru/forum/131859

isCloseLastPosByStop() ;
isCloseLastPosByTake() ;
 
Que signifie cette ligne : PostMessageA(hwnd, WM_COMMAND, 0x822c, 0) ? Je n'arrive pas à en trouver l'utilité.
 

Pouvez-vous me conseiller sur la société de courtage à choisir ? Intéressé par les problèmes de dépôt/retrait ainsi que par la fiabilité des devis. Par exemple, les résultats des tests du serveur Alpari sont très différents de ceux des méta-citations, en faveur de ces dernières. Les paramètres des chandeliers sur différents serveurs ont des valeurs différentes, etc.

Il est intéressant de noter qu'Alpari et le club de forex n'avaient pas de licence la semaine dernière, il y a eu des recherches sur Teletrade. Comment continuer à vivre ?

 

Bonjour à tous. Je veux créer une fonction personnalisée entièrement autonome. Pas de problème avec l'émulation OnInit(). La fonction utilisateur elle-même est exécutée par définition. Mais j'ai des problèmes avec le pseudoOnDeinit(const int reason).

Clarifier la tâche. La fonction utilisateur doit supprimer ses objets graphiques lors du dernier passage et, par exemple, sauvegarder certaines données dans des variables globales du terminal.

Dans un programme bouclé, le signe de la fin du programme peut être IsStopped()==true. Dans un programme non bouclé, c'est toujours=0. Ce n'est pas une méthode universelle.

J'ai essayé d'appeler la fonction UninitializeReason() depuis OnTick(). Le résultat est toujours=0. Pourtant, il serait logique de lui faire donner la valeur de la raison de la désinitialisation imminente lors de la dernière passe.

Ainsi, la fonction UninitializeReason() est tronquée et ne peut être utilisée qu'à l'intérieur de OnDeinit(const int reason).

Toutes les fonctions utilisateur peuvent être écrites en plus dans la fonction de désinitialisation OnDeinit(const int reason) et l'un des paramètres obligatoires transmis à la fonction utilisateur doit être reason - la raisonde la désinitialisation.

La présence d'une valeur non nulle passée de OnDeinit(const int reason) à la fonction utilisateur sera le signe de l'arrêt du programme principal.

Il existe peut-être d'autres moyens et d'autres variables système dont vous avez besoin à cette fin. Ecris-moi. Partagez vos expériences. Si vous n'êtes pas désolé. ;-)

 
kosmos0975:

J'ai essayé d'appeler la fonction UninitializeReason() depuis OnTick(). Le résultat est toujours 0, bien qu'il serait logique de lui faire donner la raison de la désinitialisation à venir lors de la dernière passe.

Comment pourrait-il en être autrement ? Si vous fermez le terminal entre les ticks, OnTick() n'est pas exécuté, et donc aucun événement qui appelle UninitializeReason() n'est traité.
Raison: