Questions sur la POO dans MQL5 - page 42

 
Igor Makanu:

...

appelle tout dans des méthodes privées, mais existe-t-il un "esprit Jedi" pour éviter CheckPointer(m_order)==POINTER_INVALID dans le code source ?

...

Il est plus probable qu'il ne s'agisse pas d'une astuce, l'algorithme doit être tel, que cette partie du code n'est pas exécutée s'il n'y a pas d'ordre.

Ou peut-être que c'était prévu comme ça. Mais il est peu probable que s'il y a un pointeur, cela ne signifie pas qu'il y a un ordre, donc nous devons vérifier s'il y a un ordre.

 
Igor Makanu:

et si ma mémoire est bonne, au début de l'année, il était possible de désactiver NULL dans le journal et d'obtenir 0, maintenant il donne une erreur

Changements

Forum sur le trading, les systèmes de trading automatisés et le testeur de stratégie

Bugs, bugs, questions

Kirill Belousov, 2017.12.14 21:34

Print(NULL); // 'NULL' - expression of 'void' type is illegal
Alert(NULL); // 'NULL' - expression of 'void' type is illegal

L'heure de la retraite

 
A100:

Changements

Oui, en effet, mais je me suis souvenu de la façon dont j'avais l'habitude de le faire dans MT4, c'est ainsi que j'ai déréférencé les pointeurs :

class A {};

A *a;
void OnStart()
{  Print("1 : ",a);
   a= new A;
   Print("2 : ",a);
   a = NULL;
   Print("3 : ",a);

delete a;
}

2019.09.17 07:52:40.855 tst (EURUSD,H1) 1 : 0

2019.09.17 07:52:40.856 tst (EURUSD,H1) 2 : 1048576

2019.09.17 07:52:40.856 tst (EURUSD,H1) 3 : 0

2019.09.17 07:52:40.856 tst (EURUSD,H1) 1 objets non supprimés restants

2019.09.17 07:52:40.856 tst (EURUSD,H1) 1 objet de type A gauche

2019.09.17 07:52:40.856 tst (EURUSD,H1) 24 octets de mémoire perdue

Dmitry Fedoseev:

Ce n'est probablement pas le cas, l'algorithme devrait être tel que cette partie du code n'est pas exécutée s'il n'y a pas d'ordre.

Ou peut-être que c'est voulu ainsi. Mais c'est peu probable, s'il y a un pointeur, cela ne veut pas dire qu'il y a un ordre, donc nous devons vérifier l'existence d'un ordre.

En fonction du problème, j'ai déjà écrit en code comment créer un "objet ordre" qui regarderait lui-même ce qui se passe sur le marché - rechercher un ordre dans le concepteur en utilisant une magik, s'il est trouvé il le prendra, ouvrira un ordre à un prix, le type d'ordre lui-même compte (marché ou en attente), normalisation du lot, réessayer d'ouvrir un ordre si les requotes étaient sur un tick précédent, après un placement d'ordre réussi sur le tick suivant, placer un sl et ainsi de suite.... tout cela se fait tout seul sans aucune intervention de l'"objet de la commande".

Et si l'ordre a été fermé, il est en quelque sorte toujours là pour la stratégie - en fin de compte, la stratégie s'intéresse au profit de l'ordre (actuel ou déjà fermé - peu importe !) et à l'état de l'ordre lui-même (pas encore placé, actif ou déjà fermé).


tout fonctionne comme prévu, peut-être que tu as raison quelque part, mais pour l'instant le code est encore en test, les pointeurs doivent être vérifiés, plus tard on pourra essayer sans cette vérification... bien que la logique de travail implique les actions suivantes s'il n'y a pas un tel objet.... en principe il ne reste plus grand chose à refaire pour les commandes virtuelles, je dois encore réfléchir ))))

 
Igor Makanu:

Je voulais écrire ce que j'avais l'habitude d'avoir au lieu de...

c'était comme ça :

mais je me suis souvenu comment vérifier les substitutions de macro dans MQL

2019.09.16 22:57:42.837 tst (EURUSD,H1) a = 1

2019.09.16 22:57:42.837 tst (EURUSD,H1) POINTER_INVALID = 0

2019.09.16 22:57:42.837 tst (EURUSD,H1) NULL = 0


et si ma mémoire est bonne, au début de l'année, il était possible de désimprimer NULL dans le journal et d'obtenir 0, maintenant une erreur est affichée.

C'est-à-dire que le comportement NULL as if ne devrait pas changer dans le futur, mais ce qui est substitué là au lieu de NULL n'est pas clair, probablement si cette situation est vérifiée maintenant, comme écritif(CheckPointer(m_order)==POINTER_INVALID)) )) c'est pour ainsi dire le code correct)))

N'hésitez pas à poser votre candidature. Avec 98% de confiance, NULL dans le code source est quelque chose comme #define NULL nullptr
 
Vladimir Simakov:

Et puis il y a ça, pour le sucre :

Le premier test simple montre

void OnStart()
{
    A * const a = new A;
    DELETE(a); //Error: 'a' - constant cannot be modified
}

que ce n'est pas du sucre, mais un autre... une substance plus liquide

 
A100:

Le premier test simple montre

que ce n'est pas du sucre, mais un autre... une substance plus liquide.

Parce que ce n'est pas là.) NULL n'est ni ici ni là. Vous devez utiliser la fonction CheckPointer(). Le pointeur n'a pas besoin d'être remis à zéro par lui-même - après avoir été supprimé, il devient POINTER_INVALID par lui-même.

 
Dmitry Fedoseev:

Parce que ce n'est pas là que vous êtes)) NULL n'est ni ici ni là. Vous devez utiliser la fonction CheckPointer(). Vous n'avez pas besoin de remettre à zéro le pointeur par vous-même, il devient POINTER_INVALID par lui-même après la suppression.

Je suis tout à fait d'accord. Si vous lisez les admins, cela ressemble généralement à ceci : "Ecrivez vos codes correctement".

Le MQL en général est toujours difficile, nouvelle construction, nouveaux problèmes, vous commencez à découvrir si je l'ai utilisé de manière incorrecte, voilà et signez )))).

 
A100:

Le premier test simple montre

que ce n'est pas du sucre, mais un autre... une substance plus liquide

Un homme bon. Où sont les statistiques de votre travail en freelance, de vos produits sur le marché, de vos publications concernant la programmation ? Ou essayez-vous d'ouvrir les yeux de quelqu'un sur le sujet des pointeurs constants, ou d'étaler vos connaissances sur le sujet des types de substances... ? À l'avenir, veuillez tenir compte du contexte des exemples, plutôt que d'essayer de reproduire une erreur de compilation.
 
Vladimir Simakov:
Cher homme. Où sont les statistiques de vos travaux en freelance, des produits sur le marché, des publications liées à la programmation? Ou bien essayez-vous d'ouvrir les yeux de quelqu'un sur le sujet des pointeurs constants, ou bien d'étaler vos connaissances sur le sujet des types de substances ... ? À l'avenir, veuillez tenir compte du contexte des exemples, plutôt que d'essayer de reproduire une erreur de compilation.

J'ai un contexte simple : si le code (dans ce cas une macro) est écrit avec une erreur, je pense qu'il est possible de la signaler (et de donner un exemple pour le prouver). Et dans ce contexte, je ne vois pas bien ce queles statistiques ont à voir avec cela...

 
A100:

Et dans ce contexte, je ne vois pas très bien ce que les statistiques ont à voir avec cela.

Restez simple et les gens viendront à vous.

;)

SZZY : Vos postes sont presque toujours une bonne idée, mais la présentation du matériel, eh bien, pas tout à fait avec de bonnes intentions, bien sûr votre entreprise, mais imho, veulent aider - aider, veulent être intelligent, eh bien, souvent, il s'avère ainsi.

Tout dépend de vous, mais renforcer votre estime de soi grâce à des ressources en ligne - .... Je suis trop paresseux pour continuer à taper.

Raison: