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

 
artmedia70:
Pour clôturer une position avec un ticket, vous devez d'abord connaître le numéro exact du ticket de la position à clôturer. Vous devez ensuite sélectionner la commande à l'aide de la fonction OrderSelect(ticket,SELECT_BY_TICKET), avec vérification de la réussite de la sélection. Ensuite, nous devons vérifier l'heure de clôture de l'ordre sélectionné avec succès. Pourquoi ? Parce que lorsque nous sélectionnons par ticket, le paramètre pool de la fonction OrderSelect(..., ..., pool) est ignoré (il n'est utilisé que lorsque nous sélectionnons par index). Et cela signifie que même si nous avons réussi à sélectionner un ordre, nous devons encore savoir dans quelle liste nous l'avons choisi - la liste des positions fermées ou ouvertes. C'est la vérification de l'heure de clôture qui nous permet de savoir "si l'ordre est toujours sur le marché". Si l'heure de clôture est égale à zéro, l'ordre est toujours sur le marché. Si l'heure est différente de zéro, l'ordre a déjà été clôturé plus tôt. Et après toute cette procédure, nous pouvons envoyer un ordre pour clôturer cet ordre.

J'ai un graphique devant moi. je vois qu'un ordre est ouvert dessus. je décide de le fermer. c'est tout. rien d'autre n'est nécessaire.

(Je demande parce que. Je peux fermer avec une croix "one-click trade", mais je suis très à l'aise avec les touches de raccourci)

 
evillive:

int OrdersTotal() ; - renvoie un nombre, pas un vrai-faux, c'est ce qui est faux. S'il n'y a pas d'ordres, cela signifie 0, et s'il y a des ordres, ce n'est pas seulement 1.

Et il n'y a pas d'ordres fermés uniquement sur un compte fraîchement ouvert sur lequel nous n'avons pas encore négocié. Là encore, il s'agit d'une utilisation incorrecte de la fonction.

Et pourquoi RefreshRates() ; APRÈS que la commande ait été envoyée au serveur ? C'est comme si on payait d'abord quelque chose et qu'on demandait ensuite "combien ça coûte ?".

Merci, je l'ai.
 
evillive:

int OrdersTotal() ; - renvoie un nombre, pas un vrai-faux, c'est ce qui est faux. S'il n'y a pas d'ordres, cela signifie 0, et s'il y a des ordres, ce n'est pas seulement 1.

Et il n'y a pas d'ordres fermés uniquement sur un compte fraîchement ouvert sur lequel nous n'avons pas encore négocié. Là encore, il s'agit d'une mauvaise application de la fonction.

Mais pourquoi devrait-on utiliser RefreshRates() ; APRÈS que la commande ait été envoyée au serveur ? C'est comme payer quelque chose et demander ensuite "combien ça coûte ?

J'ai entendu une fois l'expression "Le nom de la capitale russe fait deux erreurs" et j'ai été choqué. Où pourraient-ils se trouver ? Puis j'ai réalisé qu'on pouvait faire deux erreurs.

Ce que je veux dire, c'est qu'il y a aussi plus d'une erreur dans la ligne de code dont nous parlons.

if (!OrdersTotal()==true)

if(négation -> expression == true) Bien sûr on peut comprendre, comme l'explique Artem, si 0 alors faux tout le reste est vrai Puis il s'avère que si on nie qu'il y ait des ordres ouverts alors... Oups... il est plus facile d'écrire Moscou avec deux erreurs.

 
Escapee:

J'ai un graphique devant moi. je vois qu'un ordre est ouvert dessus. je décide de le fermer. c'est tout. rien d'autre n'est nécessaire.

(Je demande parce que. Je peux le fermer avec une croix "commerce en un clic", mais je trouve très pratique d'utiliser les touches de raccourci)

Ici, je vous explique comment le faire de manière programmatique.

1. Vous avez devant vous un tableau avec une commande. Vous pouvez voir son numéro de ticket, et le programme ? Le programme doit connaître ce numéro.

2. Vous voulez le fermer. Vous pouvez donc voir que la commande avec un tel ticket est ouverte. Et le programme ? Le programme ne le sait pas. Le programme doit donc savoir si la commande avec un tel ticket est ouverte ou non.

3. Vous pouvez cliquer sur la croix, et c'est tout. Et le programme doit donner une commande.

Par conséquent, la conclusion est la suivante :

1. Nous nous renseignons pour savoir s'il y a un poste à pourvoir

2. Si c'est le cas, nous cherchons le ticket de l'ordre requis

3. Nous sélectionnons la commande en fonction du billet trouvé. Si nous l'avons sélectionné avec succès, alors...

4. Vérifier l'heure de clôture de l'ordre sélectionné par le ticket. Si le temps de fermeture est égal à zéro, alors...

5. Nous la fermons.

 

Je corrigerais votre réponse comme suit.

artmedia70:


1. Devant vous se trouve un tableau avec une commande. Vous pouvez voir son numéro de ticket

2. Vous voulez le fermer.

3. Vous pouvez cliquer sur la croix et le point...

5. Fermez ça.

 
AlexeyVik:

Je corrigerais votre réponse comme suit.

Tu plaisantes encore ?
 
artmedia70:
Tu plaisantes toujours ?

Oui. C'est le jour de congé.


 
artmedia70:


c'est-à-dire qu'il n'est pas possible de faire un script de fermeture similaire au script d'ouverture ? Parce que c'est si simple... Je pensais...
 
Escapee:
Donc, nous ne pouvons pas faire un script de fermeture similaire à celui de l'ordre d'ouverture ? Parce que c'est si simple... Je pensais...

L'ouverture d'un ordre n'est pas non plus si simple - pas avec une seule commande d'envoi d'ordre de bourse. Toutes ces commandes doivent être "enveloppées" dans une fonction complète avec vérification des codes de retour du serveur commercial et réaction à ces réponses. Vérification des niveaux valides, recalcul de ceux-ci si un niveau calculé incorrect est donné dans la commande, etc.

Et la fermeture - c'est la même chose : une fonction distincte de recherche de la bonne commande, qui appelle une fonction à part entière de fermeture, plutôt qu'une simple ligne de code avec l'envoi d'une commande au serveur.

 
artmedia70:

L'ouverture d'un ordre n'est pas non plus si simple - pas avec une seule commande d'envoi d'ordre de bourse. Toutes ces commandes doivent être "enveloppées" dans une fonction complète avec vérification des codes de retour du serveur commercial et réaction à ces réponses. Vérification des niveaux valides, recalcul de ceux-ci si l'ordre spécifie un niveau calculé incorrect, etc.

Attendez... Je comprends enfin ce dont j'ai besoin...

Voici l'ouverture d'ordre dont j'avais besoin - OrderSend(Symbol(),OP_SELL,0.1,Bid,3,0,0) ; . Et ce script fonctionne.

Maintenant je dois fermer......

Raison: