Aidez-moi à apprendre à programmer.

 

Comment est-ce que je collecte et utilise les informations sur les métiers ? J'ai besoin de collecter des informations sur toutes les positions de l'EA, leur volume, leur profit, leur type, leur prix d'ouverture. Et ensuite se référer aux informations sur la position la plus récente, ou la plus importante. Je trouve difficile d'écrire dans des tableaux.

1. Est-il nécessaire d'utiliser des tableaux ?

2. est-il préférable d'utiliser un tableau de structures ou des tableaux différents ?

3. Pourquoi ai-je besoin d'un tableau dynamique si je dois de toute façon allouer de la mémoire ? N'est-il pas plus simple d'utiliser un tableau statique ? Ou ne pouvons-nous pas nous passer d'une version dynamique, parce qu'elle peut faire l'objet d'une indexation inverse ?


Exemple de code sans oop, parce que je ne pourrais même pas écrire cette construction, si cela ne vous dérange pas, merci.

 
pribludilsa:

Comment est-ce que je collecte et utilise les informations sur les métiers ? J'ai besoin de collecter des informations sur toutes les positions de l'EA, leur volume, leur profit, leur type, leur prix d'ouverture. Et ensuite se référer aux informations sur la position la plus récente, ou la plus importante. Je trouve difficile d'écrire dans des tableaux.

1. Est-il vraiment nécessaire d'utiliser des tableaux ?

2. est-il préférable d'utiliser un tableau de structures ou des tableaux différents ?

3. Pourquoi ai-je besoin d'un tableau dynamique si je dois de toute façon allouer de la mémoire ? N'est-il pas plus simple d'utiliser un tableau statique ? Ou ne pouvons-nous pas nous passer d'une version dynamique, car elle peut être indexée en sens inverse ?


Exemple de code sans oop, car je ne pourrais même pas écrire cette construction, si ce n'est pas trop difficile, merci.

Pourquoi construire quoi que ce soit ? Vous devez passer en revue les postes et traiter les informations - et vous n'avez pas besoin de les assembler. Tout ce que vous recueillez au même moment est une information obsolète.

 

1. Lorsqu'on traite de l'historique des échanges, on se passe généralement de tableaux. C'est à peu près comme dans l'exemple: https://www.mql5.com/ru/docs/trading/historyselect. Cela vaut la peine d'explorer toutes les fonctions dans la colonne à gauche du lien (et tous les exemples qui s'y trouvent).

2. Un tableau de structures est très pratique. Mais les fonctions intégrées qui peuvent être appliquées aux tableaux multidimensionnels - ArraySort() etc - ne fonctionnent pas avec lui.

Si vous êtes sûr que la taille initiale du tableau spécifié est suffisante, vous pouvez également utiliser des tableaux statiques. Si leur taille est raisonnable.

 
Vladimir Karputov:

Pourquoi collecter quoi que ce soit ? Vous devez parcourir les éléments et traiter l'information - et vous n'avez pas besoin de la collecter. Tout ce que vous collectez en même temps est une information obsolète.

J'essaie d'écrire une grille sans oop. J'ai donc décidé de m'entraîner pour commencer, et je n'arrive pas à construire une entrée dans le tableau. Ou peut-être que je n'en ai pas besoin ? Quelle est la meilleure façon de procéder ? Eh bien, je pensais en boucle. C'est comme ça que j'ai commencé.
int OnInit()
{
ENUM_POSITIONS_TYPE ar [1000]; //проинициализирую нулем еще, просто я не копирую, а вручную всё пишу, и некоторые очевидные куски не пишу.
 return(INIT_SUCCEEDED);
}
void OnDeinit(const int reason)
{}
void OnTick()
{
for(int index=PositionsTotal()-1; index>=0; index--)
{
ulong ticket=PositionGetTicket(index);
PositionSelectByTicket(ticket); // И вот я готов вызывать функции для выуживания данных, только я не знаю //как их вписывать в массив. 
 
Dmitry Fedoseev:

1. Lorsqu'on traite de l'historique des échanges, on se passe généralement de tableaux. C'est à peu près comme dans l'exemple: https://www.mql5.com/ru/docs/trading/historyselect. Cela vaut la peine d'explorer toutes les fonctions dans la colonne à gauche du lien (et tous les exemples qui s'y trouvent).

2. Un tableau de structures est très pratique. Mais les fonctions intégrées qui peuvent être appliquées aux tableaux multidimensionnels - ArraySort() etc - ne fonctionnent pas avec lui.

Si vous êtes sûr que la taille initiale du tableau spécifié est suffisante, vous pouvez également utiliser des tableaux statiques. Si leur taille est raisonnable.

Ce n'est pas moi qui ai l'histoire, ce sont les postes que je veux analyser qui sont ouverts. Quelle est la meilleure façon de procéder ?
 
J'écris une grille sans OOP. J'ai besoin de savoir laquelle des positions ouvertes est la plus importante, et de quel type de transaction il s'agit, achat ou vente. Je comprends que je dois d'abord collecter les données à chaque position de la boucle, les écrire dans un tableau, puis analyser le tableau, ou prendre l'élément le plus récent, s'il est dynamique avec indexation inverse.
 
pribludilsa:
Ce n'est pas avec l'histoire, je veux analyser les positions ouvertes. Quelle est la meilleure façon de procéder ?

Presque la même chose, mais sans HistorySelect(). Nous commençons par la fonction PositionsToatal() puis, par ce lien, nous explorons toutes les fonctions qui commencent par Position

 
pribludilsa:
J'écris une grille sans OOP. J'ai besoin de savoir laquelle des positions ouvertes est la plus importante, et ce par quel type de transactions, achat ou vente. Je comprends que je dois d'abord collecter les données à chaque position de la boucle, les écrire dans un tableau et ensuite analyser le tableau ou prendre l'élément le plus récent s'il est dynamique avec une indexation inverse.

Vous n'avez pas besoin de passer par toute une série de positions et de rechercher les hauts et les bas au fur et à mesure.

 
Dmitry Fedoseev:

Vous n'avez pas besoin de parcourir le tableau et de rechercher le maximum et le minimum au fur et à mesure.


Merci. Mais pouvez-vous nous donner un petit exemple ? Nous avons besoin de l'écrire pour le comparer, n'est-ce pas ? Et l'écrire ailleurs que dans un tableau ? Je n'arrive pas à trouver comment le faire sans écrire. Nous travaillons avec une position dans un passage de boucle, comment pouvons-nous comparer une autre position si elle se trouve dans un autre passage de boucle ?

 
pribludilsa:

Merci. Pouvez-vous nous donner un petit exemple ? Nous avons besoin de l'écrire pour comparer, n'est-ce pas ? Et l'écrire où mais dans un tableau ? Je n'arrive pas à trouver comment le faire sans écrire. Nous travaillons avec une position dans un passage de boucle, comment pouvons-nous comparer une autre position si elle se trouve dans un autre passage de boucle ?

int Magic=123;

double maxBuyPrice=0;
ulong maxBuyTicket=0;
double minSellPrice=DBL_MAX;
ulong minSellTicket=0;   

for(int i=0;i<PositionsTotal();i++){
   ulong ticket=PositionGetTicket(i);
   if(ticket!=0){
      long magic=PositionGetInteger(POSITION_MAGIC);
      string symbol=PositionGetString(POSITION_SYMBOL);
      if(magic==Magic && symbol==Symbol()){
         long type=PositionGetInteger(POSITION_TYPE);
         if(type==POSITION_TYPE_BUY){
            if(PositionGetDouble(POSITION_PRICE_OPEN)>maxBuyPrice){
               maxBuyPrice=PositionGetDouble(POSITION_PRICE_OPEN);
               maxBuyTicket=ticket; // тут можно и другие данные позиции запоминать в переменные
            }
         }
         else if(type==POSITION_TYPE_SELL){
            if(PositionGetDouble(POSITION_PRICE_OPEN)<minSellPrice){
               minSellPrice=PositionGetDouble(POSITION_PRICE_OPEN);
               minSellTicket=ticket; // и тут
            }      
         }
      }
   }
}

if(maxBuyTicket!=0){
   
}
if(minSellTicket!=0){

}
 
Dmitry Fedoseev:

Merci pour cet exemple.

      long magic=PositionGetInteger(POSITION_MAGIC);
      string symbol=PositionGetString(POSITION_SYMBOL);
      if(magic==Magic && symbol==Symbol())

Je pensais être le seul à préférer le dire ainsi, plutôt que d'écrire "je ne sais pas".

      if(PositionGetInteger(POSITION_MAGIC)==Magic && PositionGetString(POSITION_SYMBOL)==Symbol())

hz signifie "j'aimerais savoir"... ne vous méprenez pas...


ps ; Cela permet de garder une trace de tout pendant le débogage du programme.

Raison: