Questions des débutants MQL5 MT5 MetaTrader 5 - page 1208

 
Vladpedro:

Cela ne fait aucune différence. Je soupçonne une différence, car lorsque j'ai défini des ordres et des positions, je leur ai donné des "commentaires" pour des positions qui m'appartiennent, pour des ordres qui m'appartiennent. Par conséquent, lorsqu'un ordre se déplace vers une position, il hérite du commentaire de l'ordre.

Ensuite, lorsque nous avons vérifié les positions à travers les commentaires, il y avait un désordre... les commentaires étaient différents. J'ai corrigé cela.

Dans votre code, je n'ai pas trouvé ou compris du tout comment les positions sont fermées pour la condition SELL_LIMIT a déclenché . L'équité.

Il semble que nous ayons vérifié si toutes les positions peuvent être fermées, et que le drapeau soit activé pour cela.

mais dans leCloseAllPositions() ;

il manque quelque chose.

Il n'y a pas de vérification de la fermeture de toutes les positions pour le cas - SELL_LIMIT s'est déclenché.

Peut-être que ce mêmem_compte.Equity()>= m_compte.Balance()+15est implémenté d'une autre manière ?

Ou peut-être est-ce parce que j'ai mal expliqué ce que signifie le terme "moyenne" dans mon contexte.

J'ai déjà mentionné ci-dessus que les ordres en attente n'ont rien à voir avec cela. Un ordre en attente ne peut pas avoir de profit. Du mot "du tout". Tant que tu ne l'auras pas dit clairement, tu ne pourras pas avancer.


Ajouté : J'ai montré un exemple de solution pour deux cas :

  1. Si nous n'avons que deux positions, alors nous devons chercher celle qui a le plus de profit et la fermer.
  2. Si nous avons plus de deux positions, si leur profit total est supérieur à celui spécifié, alors nous fermons toutes les positions.
Документация по MQL5: Константы, перечисления и структуры / Торговые константы / Свойства ордеров
Документация по MQL5: Константы, перечисления и структуры / Торговые константы / Свойства ордеров
  • www.mql5.com
Приказы на проведение торговых операций оформляются ордерами. Каждый ордер имеет множество свойств для чтения, информацию по ним можно получать с помощью функций Идентификатор позиции, который ставится на ордере при его исполнении. Каждый исполненный ордер порождает сделку, которая открывает новую или изменяет уже существующую позицию...
 
Vladimir Karputov:

Je l'ai déjà souligné plus haut - les ordres en attente n'ont rien à voir avec tout cela. Un ordre en attente ne peut pas avoir de profit. Du mot "du tout". Tant que vous ne l'aurez pas précisé, vous ne pourrez pas aller plus loin.

Vladimir. Bien sûr, un ordre en attente ne peut pas avoir de profit. Bien sûr, nous parlons du profit des positions ouvertes.

La seule différence réside dans la façon dont ces positions ont été ouvertes. Nous avons besoin d'une méthode de clôture différente pour elles.

Si la deuxième position est ouverte à partir d'un ordre SELL_STOP intelligent, alors l'une d'entre elles doit être fermée, celle qui a un plus grand bénéfice de la position. Cela a fonctionné pour vous et fonctionne.

Si la deuxième position a été ouverte à partir d'un ordre SELL_LIMIT, alors elles doivent toutes deux être fermées par Equity(m_account.Equity()>= m_account.Balance()+15), à moins que le SL de l'une d'entre elles ne soit déclenché en premier.

Ajouté.

J'ai montré un exemple de solution pour deux cas :

  1. Nous n'avons que deux positions - donc nous cherchons celle qui a le plus de profit et la fermons.
  2. Avoir plus de deux positions - si leur profit total est supérieur à la valeur spécifiée - fermer toutes les positions.

Tout semble aller bien avec la deuxième condition. Mais pour une raison quelconque, j'ai la deuxième condition qui ouvre la deuxième position et la ferme immédiatement à proximité de 0 -1,2.

Peut-être que je spécifie le bénéfice total à un mauvais endroit ?

InpProfitTarget = 15 ; Si ici, cela ne fonctionne pas.


 
Vladpedro:

Vladimir. Bien sûr, un ordre en attente ne peut pas avoir de profit. Nous parlons de bénéfices, bien sûr, de positions ouvertes.

Seulement il y a une différence dans la façon dont ces positions ont été ouvertes. Nous avons besoin d'une méthode de fermeture différente pour elles.

Si la deuxième position est ouverte à partir d'un ordre SELL_STOP intelligent, alors l'une d'entre elles doit être fermée, celle qui a un plus grand bénéfice de la position. Cela a fonctionné pour vous et fonctionne.

Si la deuxième position a été ouverte à partir d'un ordre SELL_LIMIT, alors elles doivent toutes deux être fermées par Equity(m_account.Equity()>= m_account.Balance()+15), à moins que le SL de l'une d'entre elles ne soit déclenché en premier.

Désolé :

J'ai montré un exemple de solution pour deux cas :

  1. Nous n'avons que deux positions - donc nous cherchons celle qui a le plus gros bénéfice et nous la fermons.
  2. Si nous avons plus de deux positions, si leur profit total est supérieur à celui spécifié, nous fermons toutes les positions.


Ensuite, faites quelque chose vous-même.

 
Vladimir Karputov:

Désolé :

J'ai montré un exemple de solution pour deux cas :

  1. Nous n'avons que deux positions, donc nous cherchons celle qui a le plus gros bénéfice et nous la fermons.
  2. Nous avons plus de deux positions - si leur profit total est supérieur au profit donné, nous fermons toutes les positions.


A partir de là, faites quelque chose vous-même.

Merci pour votre aide Vladimir, j'essaie.

2. nous avons plus de deux positions - si leur profit total est supérieur à celui spécifié, nous fermons toutes les positions.

Mais je n'en avais pas besoin, j'avais besoin de deux positions ou plus où la deuxième était ouverte avec le déclenchement deSELL_LIMIT.

Merci quand même pour votre patience et vos efforts. Bien sûr, je le résoudrai à ma façon, je souffrirai et je le résoudrai))).

 
Bonsoir les gars, je ne veux pas multiplier les sujets - ma question est la suivante - le script a placé un ordre stop en attente avec une prise et un stop bien définis, il n'est pas exécuté, et dans les commentaires est prescrit [illiquidité] - comment lutter - pour boucler le script avant l'exécution, définir un slippage plus élevé, ou prescrire le nombre de tentatives ou quoi ? Ou donnez-moi un indice pour savoir où creuser.
 
neitrino22:
Bonsoir les gars, pour ne pas multiplier les fils, voici une question - le script a placé un ordre stop en attente avec une prise et un stop bien précis, il n'est pas exécuté, et dans les commentaires il est écrit [illiquidité] - comment gérer cela - boucler le script avant l'exécution, définir un slippage plus élevé, ou spécifier le nombre de reprises ou quoi ? Ou donnez-moi un indice pour savoir où creuser.

Vous devriez toujours regarder dans la documentation

ORDER_TIME_GTC

La commande restera dans la file d'attente jusqu'à ce qu'elle soit retirée.

Документация по MQL5: Константы, перечисления и структуры / Торговые константы / Свойства ордеров
Документация по MQL5: Константы, перечисления и структуры / Торговые константы / Свойства ордеров
  • www.mql5.com
Приказы на проведение торговых операций оформляются ордерами. Каждый ордер имеет множество свойств для чтения, информацию по ним можно получать с помощью функций Идентификатор позиции, который ставится на ордере при его исполнении. Каждый исполненный ордер порождает сделку, которая открывает новую или изменяет уже существующую позицию...
 
Alexey Viktorov:

Vous devriez toujours regarder dans la documentation

ORDER_TIME_GTC

La commande restera dans la file d'attente jusqu'à ce qu'elle soit retirée.

Merci, ça doit être ça.

 

Bonsoir !

Il y a 1 poste ouvert.

Le conseiller expert ferme une position à l'aide de la méthode PositionClose() ;

Le résultat est imprimé ResultRetcode= 10009. Description du code : fait à 0.00

En dessous du code, il y a une vérification if(PositionSelect(_Symbol)), qui réussit.

C'est-à-dire qu'il s'écoule un certain temps entre l'exécution de PositionClose() et la disparition de la position ouverte, pendant lequel le programme parvient à effectuer une sortie erronée.

Comment résoudre correctement cette situation ?


 

Pourquoi dois-je redémarrer le terminal à chaque fois après un test pour exécuter un nouveau test ?

2020.04.27 15:19:08.415 Tester  XAUUSD: history data begins from 2014.02.12 00:00
2020.04.27 15:19:08.415 Tester  XAUUSD: history data begins from 2014.02.12 00:00
2020.04.27 15:19:08.415 Core 01 connecting to 127.0.0.1:3000
2020.04.27 15:19:08.415 Core 01 connected
2020.04.27 15:19:08.425 Core 01 authorized (agent build 2361)
2020.04.27 15:19:08.427 Tester  XAUUSD,M15 (Alpari-MT5-Demo): testing of Experts\ExpertTest.ex5 from 2017.07.26 00:00 to 2020.02.06 00:00
2020.04.27 15:19:08.466 Core 01 disconnected
2020.04.27 15:19:08.466 Core 01 connection closed

Je supprime tous les objets. Je ferme les dossiers. Voici le journal lorsque j'arrête les tests :

2020.04.27 15:15:43.188 Core 01 disconnected
2020.04.27 15:15:43.188 Core 01 connection closed
2020.04.27 15:15:43.189 Tester  stopped by user

Mais il ne démarre pas la fois suivante - je dois fermer le terminal et le rouvrir. Construire 2361.

 
Comment puis-je obtenir un commentaire sur une position fermée dans OnTradeTransaction?
Raison: