Fonctions utiles de KimIV - page 126

 
khorosh:
Mettez-vous à sa place. La vie dans un pays étranger, loin de votre patrie, ne disparaît pas. Je suis irritable, en colère contre moi-même pour avoir commis une erreur irréparable en devenant travailleur invité).
Le contrôle d'erreurs fonctionne correctement, mais jusqu'à présent, il n'y a pas d'erreurs, malgré les nombreuses tentatives d'entraver le fonctionnement normal. Je suis suffisamment protégé contre toutes les éventualités. Là encore, l'avenir nous le dira !
 
artmedia70:

J'ai délibérément fait de if(OrderSelect(i,SELECT_BY_POS)) un bloc séparé. Afin de renvoyer la valeur d'erreur pendant le débogage. else {// écrire l'erreur de sélection comme vous le souhaitez et revenir de celle-ci, par exemple EMPTY}.

Et pensons à une situation où il y a une erreur de sélection d'un ordre à placer sur le marché. Discutons-en. Je n'en ai pas encore rencontré.

Roger:

Et citez au moins une raison pour laquelle une boucle de commande correctement créée peut renvoyer "faux".

Oups, je n'ai pas remarqué qu'Artem avait déjà posé la question, oups. Et pourtant.

Quelle différence cela fait-il ?

Dans le cas général, il peut revenir. Et si l'observation de certaines conditions ou même d'un ensemble de conditions différentes montre qu'il ne retourne pas faux ?

Nous ne connaissons pas les détails de l'implémentation de cette fonction et la documentation ne fournit aucune "supposition" à son sujet. Que se passe-t-il si, au prochain ensemble de conditions, au prochain courtier, la fonction renvoie soudainement faux ?

Je vais quand même répondre à la question posée sur la raison/situation, car c'est simple : la raison pourrait être une erreur d'implémentation de cette fonction faite par l'équipe de développement lors de la sortie de la prochaine version de MT. J'espère qu'il s'agit d'un événement suffisamment probable pour être sérieusement envisagé ?

Supposons qu'à cause de ce bogue hypothétique, la fonction ait commencé de manière aléatoire, mais, en moyenne, seulement pour une demande sur cinq, à renvoyer faux.

En général, on ne peut pas penser à l'avance à des choses qu'on ne connaît pas. Il n'y a donc pas lieu de se demander à quoi cela peut être dû. Lorsque cela se produit, vous pouvez alors facilement expliquer pourquoi.

Mais ne pas savoir ce qui pourrait se passer à l'avenir n'empêche pas de s'en défendre. Il peut s'avérer que certains algorithmes de haut niveau auront beaucoup de mal à cause d'une fausse valeur reçue. Ils ne sauront pas que la valeur est fausse.

Mais s'ils savent qu'il n'y a pas de valeur et que s'il y en a une, elle est vraie, ils ne feront pas de dégâts s'il n'y a pas d'erreurs de leur part. Et c'est pourquoi l'information sur l'impossibilité de calculer la valeur doit être donnée non seulement en mode débogage mais aussi en mode combat.

 

Est-il possible de charger des données externes dans l'indicateur, par exemple à partir d'un fichier texte ?

Par exemple, il y a un prix quotidien et il faut construire une ligne sur un graphique à n'importe quelle échelle temporelle ?

DATE Prix

04.12.2014 100,00

03.12.2014 101.12

02.12.2014 102,45

01.12.2014 103.23

28.11.2014 102.43

27.11.2014 101.90

 
De bonnes fonctionnalités, merci à Igor pour son travail acharné.
 
KimIV:

Exemples d'utilisation de la fonction OpenPosition().

1. Acheter 0,1 lot de l'instrument actuel

2. Vendre 0.2 lots d'EURUSD

3. Vendre 0.12 lots de USDCAD avec un stop de 20 pips

4. Acheter 0.15 lot de USDJPY avec un stop de 40 pips

5. Vendez 0.1 lot de GBPJPY avec un stop de 23 et un takeaway de 44 pips.

Vous trouverez ci-joint le script de test de la fonction OpenPosition(). Les 4 premiers exemples sont commentés.
Je ne sais pas si vous allez me répondre ou non. Je suis assis ici, je ne sais pas comment rendre mon EA multi-devises !
 
logut:
Je ne sais pas si vous allez me répondre ou non. Je suis assis ici et je ne sais pas comment rendre mon EA multi-devises !
Dmitry, j'écris habituellement toute la logique sur un morceau de papier. Que faire et quand, et avec quoi.
 
Roger:

Et donnez-moi une raison pour laquelle une boucle de commande correctement créée pourrait retourner "false".

Oups, je n'ai pas remarqué qu'Artem avait déjà posé la question, oups. Et pourtant.

Facile !

Après une autre mise à jour, le terminal s'est rechargé et n'a commencé à afficher que les commandes du dernier jour. Vous ne pouvez pas voir l'historique des commandes. La fonction doit renvoyer quelque chose - comme aucun historique.

Le courtier a supprimé certains ordres.

Il y a un trou dans la mémoire des opérations. Votre mémoire s'est plantée et la fonction prend une cellule de mémoire poubelle. Il peut apparaître sur le moniteur. Il peut apparaître ou non. Il peut y avoir d'autres problèmes matériels.

Le terminal redémarre et "perd" la communication avec le serveur. J'avais l'habitude d'utiliser Mt3 en utilisant un serveur proxy. J'avais l'internet par ligne commutée avec une bande passante et un temps très limités et la qualité de l'internet était horrible. Je vois des tics arriver et le graphique bouge. Lorsque j'ai essayé d'ouvrir un ordre, le terminal a essayé d'écrire "aucune connexion avec le serveur".

J'ai été confronté à un problème dans MT4 et il existe toujours : j'ai obtenu un tick et un écran graphique noir (vide). Si je tire le graphique à l'aide de ma souris ou si le robot présente une erreur, j'obtiendrai un message d'erreur et le robot se plantera. Si je tire le graphique avec la souris ou si un nouveau tick apparaît, tout est normal. Par conséquent, lorsque je divise, je vérifie d'abord par quoi diviser et si ce n'est pas égal à zéro, je passe à autre chose !

 

Cher KimIV, j'utilise votre fonction pour fermer toutes les positions lorsqu'un certain profit a été atteint et j'ai rencontré une situation où un ordre en attente a déclenché une autre position qui n'a pas été fermée. J'ai maintenant mis en place une vérification supplémentaire d'une telle situation et un appel répété de votre fonction. Pensez-vous que cette amélioration devrait être mise en œuvre à l'intérieur de la fonction après la fin du cycle de fermeture principal ?

Il s'agit des fonctions ClosePosBySortLots() et ClosePositions() ;

 

Il existe des codes de fonction permettant de supprimer les commandes en attente, tant pour les tests en ligne que pour les tests historiques - https://forum.mql4.com/ru/38949#434195.

Pouvez-vous nous expliquer la différence entre les tests et les tests en ligne ?

 
Les fonctions isCloseLastPosByStop() et isCloseLastPosByTake() ne fonctionnent pas toujours correctement, car le prix de clôture de l'ordre et le Stop Loss (TakeProfit) ne coïncident pas toujours. Je l'ai refait dans le mien. J'ai remplacé la condition d'égalité de ces valeurs par la condition : la valeur absolue de la différence de ces valeurs (aux guillemets de 5 bits) doit être inférieure à 5*Point.
Raison: