Toute question des nouveaux arrivants sur MQL4 et MQL5, aide et discussion sur les algorithmes et les codes. - page 1143

 
Alexey Viktorov:

L'un d'entre eux est moi. Et je n'ai jamais étudié le C# ou le C++ et je n'ai jamais su ce qu'est la POO.

Veuillez comprendre la simple vérité, que mql5 ne diffère de mql5 que par la fonction OrderSend() et peut-être quelques autres fonctions dont je ne me souviens pas. Une autre différence importante est le sens de l'indexation des tampons indicateurs. Cependant, il peut être résolu très rapidement, mais vous feriez mieux de vous habituer aux nouvelles fonctionnalités. Et l'obtention des valeurs indicatrices reste la même. Je n'ai pas lu le livre de Kovalev, je ne sais pas ce qu'il contient, mais je doute que toute solution de ce livre ne puisse être écrite en utilisant le MetaEditor mql4 mis à jour.

Cool. )))) Ça n'a pas marché pour moi, très chargé en Fortran et Basic procéduraux. C'est un bon tutoriel, bien structuré, suffisamment clair et qui peut vraiment être pris comme base, si les créateurs ont besoin d'étudiants bien sûr. Malheureusement, il n'y en a pas d'autres. Je n'ai pas assez de PLO, donc je dois lire des articles. J'ai essayé une grande partie du tutoriel sur le terminal MT4 mis à jour. Il y a beaucoup de remarques sur les types de données qui ne sont pas données. Le compilateur n'a pas vu d'erreurs même dans la vérification stricte.

 
Valeriy Yastremskiy:

Cool. )))) Je ne l'ai pas eu, cependant, avec le Fortran procédural et le Basic dans la charge. Bon tutoriel, bien structuré, suffisamment clair et qui pourrait vraiment être pris comme base, si les créateurs ont besoin d'étudiants bien sûr. Malheureusement, il n'y en a pas d'autres. Je n'ai pas assez de PLO, donc je dois lire des articles. J'ai essayé une grande partie du tutoriel sur le terminal MT4 mis à jour. Il y a beaucoup de remarques sur les types de données qui ne sont pas données. Le compilateur n'a pas vu d'erreurs même dans la vérification stricte.

Voici ce que je pense de la POO. Et ça ne ferait pas de mal de lire le fil entier depuis le début.

ООП для школьников.
ООП для школьников.
  • 2019.10.04
  • www.mql5.com
======================================================================================================================== В этой теме будет нескольк...
 

Salutations. Veuillez me conseiller, après avoir sélectionné une commande, il n'est pas clair pour quelle raison le ticket change. Code :

      for(int i=OrdersTotal()-1; i>=0; i--){
         if(OrderSelect(i ,SELECT_BY_POS, MODE_TRADES)){
            if(OrderSymbol()==Symbol() && OrderMagicNumber()==magic && OrderType()==OP_BUYSTOP){
               Print("111  OrderTicket() ", OrderTicket(), "  OrderType() ", StringType(OrderType()));
               temp=OrderTicket();
               if( OrderOpenPrice()>start_bid
               +((MathCeil( (Bid-start_bid)/(bs_distance*Point) )+bs_orders+Orders("bs")+1)*bs_distance*Point) ){
                  Print("222 OrderDelete bs Bid ", Bid, "  OrderOpenPrice() ", OrderOpenPrice()); 
                  if(!OrderDelete(OrderTicket(), clrBlack)){
                     Print("333 OrderDelete bs Bid ", Bid, "  OrderTicket() ", OrderTicket(), "  OrderType() ", StringType(OrderType()));
                  }
               }
            }
         } 
      }

Il y a deux ordres sur le marché,BUYSTOP ticket 10 etBUY ticket 9 .

Journal :


 
Alexey Viktorov:

Voici ce que je pense de la POO. Et ça ne ferait pas de mal de lire le fil entier depuis le début.

Merci, je suis d'accord))))

 
Andrey Sokolov:

Salutations. Veuillez me conseiller, après avoir sélectionné une commande, il n'est pas clair pour quelle raison le ticket change. Code :

Il y a deux ordres sur le marché,BUYSTOP ticket 10 etBUY ticket 9 .

Journal :


Je suppose que l'une des fonctions écrites par moi-même passe en revue les ordres (par exempleOrders("bs")) et exécute donc à nouveau OrderSelect(). Au moment où elle revient à la boucle présentée, toutes les données sont données pour le dernier ordre sélectionné à cet endroit.

 
Igor Zakharov:

Je suppose qu'une des fonctions écrites par moi-même passe en revue les ordres (par exempleOrders("bs")), et en conséquence re OrderSelect(). Au moment de retourner à la boucle soumise, toutes les données sont données pour le dernier ordre sélectionné là.

merci

 
Andrey Sokolov:

Salutations. Veuillez me conseiller, après avoir sélectionné une commande, il n'est pas clair pour quelle raison le ticket change. Code :

Il y a deux ordres sur le marché,BUYSTOP ticket 10 etBUY ticket 9 .

Journal :


Votre code de travail ne correspond pas au code affiché.

Print("222 OrderDelete bs Bid ", Bid, "  OrderOpenPrice() ", OrderOpenPrice());

Où est imprimé dans ce code "OrderTicket()" ?

Faites attention aux appels à d'autres fonctions utilisateur qui peuvent inclure la sélection des commandes.

 
Alexey Viktorov:

Vous êtes au bon endroit. Voici un conseil sur la façon de faire mql4 correctement, guidé par la nouvelle documentation mql4.

Si vous avez du mal à écrire quelque chose, posez une question concrète : ce que vous avez écrit et ce que vous n'avez pas réussi à obtenir. Gardez simplement à l'esprit que personne ne lira un code d'un kilomètre de long avec une seule ligne incompréhensible. Je ne le ferai certainement pas.

Vous êtes la personne à qui ma question était destinée. Parce que sur la base de votre demande, j'ai fait mon code Mql4 pour le testeur court, juste pour montrer mon problème clairement. Mais malheureusement, Artem ne l'a pas compris.

Je vous serai très reconnaissant si vous pouvez modifier le code pour résoudre mon problème. Une fois de plus, je vais vous en dire l'essentiel.

Lorsque je ferme chaque ordre (et il y en a beaucoup d'ouverts en même temps), j'ai besoin d'imprimer () certains paramètres d'un ordre fermé. J'ai appris à le faire avec beaucoup de succès. Mais..... il y a un problème que mon esprit ne suffit pas à résoudre. Certains ordres sont fermés par stop sur le même tick et au même prix. Dans ce cas, le programme ignore le premier ordre clôturé et imprime Print() uniquement le dernier ordre clôturé. Et il ne s'imprime pas après le premier.

Q : .

Quelle construction linguistique peut-on utiliser pour que le programme imprime () dans les cas que j'ai décrits ci-dessus même après le premier ordre fermé par le stop?

int H;
int L;
int TP;  
int start()
{
int Ht = OrdersHistoryTotal();
if (OrderSelect (Ht-1,SELECT_BY_POS, MODE_HISTORY))                                             
if (TP!=OrderTicket( ))
{
Print("---------------------------------------------------------------=",TimeToString(OrderOpenTime()) );
TP=OrderTicket( );
}

if (TimeCurrent()==1262598040)
if (H==0)
{
OrderSend(Symbol(),OP_SELL,0.1,Bid, 3,1.6217,1.60919,"300",10 );
H=1;
}
if (TimeCurrent()==1262601140)
if (L==0)
{
OrderSend(Symbol(),OP_SELL,0.1,Bid, 3,1.62199,1.61758,"300",10 );
L=1;
}
return(0);


 
ANDREY:

Vous êtes exactement la personne à qui ma question était destinée. Parce que sur la base de votre demande, j'ai fait mon code Mql4 pour le testeur court, juste pour démontrer clairement mon problème. Mais malheureusement, Artem ne l'a pas compris.

Je vous serai très reconnaissant si vous pouvez modifier le code pour résoudre mon problème. Une fois de plus, je vais vous en dire l'essentiel.

Lorsque je ferme chaque ordre (et il y en a beaucoup d'ouverts en même temps), j'ai besoin d'imprimer () certains paramètres d'un ordre fermé. J'ai appris à le faire avec beaucoup de succès. Mais..... il y a un problème que mon esprit ne suffit pas à résoudre. Certains ordres sont fermés par stop sur le même tick et au même prix. Dans ce cas, le programme ignore le premier ordre clôturé et imprime Print() uniquement le dernier ordre clôturé. Et il ne s'imprime pas après le premier.

Q : .

Quelle construction linguistique peut-on utiliser pour que l'application imprime Print () même après la clôture du premier ordre au stop, dans les cas décrits ci-dessus ?


Que fait votre code à part ouvrir deux positions de vente, chacune à un moment strictement spécifié, et imprimer le moment de l'ouverture de la dernière position lorsque cela est autorisé ? C'est tout. L'utilisation de variables non initialisées, qui peuvent conduire à des "miracles" dans le comportement du code, et très, très vieux gestionnaire start(), qui a été tiré de l'étagère poussiéreuse avec des années de toiles d'araignée, et sur le marché (un jour vous voulez vendre quelque chose) avec des gestionnaires anciens ne manquera jamais validateur - il dira que le mauvais type de programme.

 
ANDREY:

Vous êtes exactement la personne à qui ma question était destinée. Parce que sur la base de votre demande, j'ai fait mon code Mql4 pour le testeur court, juste pour démontrer clairement mon problème. Mais malheureusement Artem ne l'a pas compris.

Je vous serais très reconnaissant si vous pouviez modifier le code pour résoudre mon problème. Une fois de plus, je vais vous en dire l'essentiel.

Lorsque je ferme chaque ordre (et il y en a beaucoup d'ouverts en même temps), j'ai besoin d'imprimer () certains paramètres d'un ordre fermé. J'ai appris à le faire avec beaucoup de succès. Mais..... il y a un problème que mon esprit ne suffit pas à résoudre. Certains ordres sont fermés par stop sur le même tick et au même prix. Dans ce cas, le programme ignore le premier ordre clôturé et imprime Print() uniquement le dernier ordre clôturé. Et ça ne s'imprime pas après le premier.

Q : .

Quelle structure de langage peut-on utiliser pour que le programme imprime () même après la clôture du premier ordre au stop dans les cas que j'ai décrits ci-dessus ?

Je ne me souviens pas de la réponse d'Artem. Tous les codes figurant dans ses articles sont soit multiterminaux, soit comportent deux versions, l'une pour mql5 et l'autre pour mql4. J'ai vérifié ces versions sur mql4, tout fonctionne correctement et détecte la fermeture par stop ou take et ne fait aucune erreur.

Oui, ces articles sont difficiles à comprendre, mais cela en vaut la peine si vous n'êtes pas plus âgé que moi. Et moi, pour un programmeur, je suis obscènement vieux.

L'autre option est plus simple, mais fonctionnera beaucoup plus lentement. Ecrire les tickets de commande dans un tableau, et à l'aide de ce tableau sélectionner la commande, vérifier l'heure de clôture de la commande. Si elle est supérieure à zéro, cela signifie qu'elle est fermée. Si le commentaire d'un ordre fermé contient les lettres "sl", cela signifie que l'ordre est fermé en utilisant un stop. Si l'ordre est clôturé, il est supprimé du tableau. Ou, une fois le tableau complété, il est rechargé avec les ordres ouverts restants. L'imagination vole en général.

C'est à vous de choisir l'option qui vous convient le mieux. Et lisez certains de mes posts sur le manuel de Kovalev. Le tutoriel suggère d'écrire int start(), alors que dans la mise à jour de mql4, void OnTick() devrait être écrit pour les Expert Advisors.

Pour les indicateurs et les scripts, veuillez vous référer à la documentation. Et d'ailleurs, il est beaucoup plus facile d'écrire des indicateurs dans la version actualisée de mql4 que lorsque Sergey a écrit ce tutoriel.

Raison: