Répartir les postes ouverts en groupes - page 7

 

À mon avis, existe-t-il un algorithme plus rapide et plus efficace pour ajouter une nouvelle position (et ses 6 propriétés) à la structure de la position ? Chez moi, cela fonctionne comme suit : j'utilise la force brute pour m'assurer que la position est vraiment nouvelle, je récupère les valeurs des paramètres requis, j'augmente le tableau de 1 et j'écris un nouvel élément. J'ai lu dans l'article que l'élargissement et l'écriture peuvent et doivent être faits différemment. Je n'ai pas trouvé la fonction spécifiée ici dans mon terminal et je ne sais pas comment la remplir.

 
Sergey Voytsekhovsky:

À mon avis, existe-t-il un algorithme plus rapide et plus efficace pour ajouter une nouvelle position (et ses 6 propriétés) à la structure de la position ? Chez moi, cela fonctionne comme suit : j'utilise la force brute pour m'assurer que la position est vraiment nouvelle, je récupère les valeurs des paramètres requis, j'augmente le tableau de 1 et j'écris un nouvel élément. J'ai lu dans l'article que l'élargissement et l'écriture peuvent et doivent être faits différemment. Je n'ai pas trouvé la fonction spécifiée ici dans mon terminal et je ne sais pas comment la remplir.

N'essayez pas de rechercher des postes pour déterminer "que le poste est vraiment nouveau". Trouvez un autre moyen. Par exemple dans OnTradeTransaction. Et essayez d'utiliser la fonction ArrayRemove au lieu du débordement du tableau.

 
Alexey Viktorov:

N'essayez pas de nombreuses positions pour déterminer "que la position est vraiment nouvelle". Trouvez un autre moyen. Par exemple dans OnTradeTransaction. Et essayez d'utiliser la fonction ArrayRemove au lieu du débordement du tableau.

Respect, merci pour votre soutien rapide et vos conseils utiles, je vais m'y mettre. Et comment ajouter à la queue du tableau des données sans +1 à la taille, formule à partir de classes prêtes à l'emploi terminal jeter sur ? ?? Bien, maintenant pour le développement général, afin de ne pas laisser de trous dans ma tête, s'il vous plaît ?

 
Sergey Voytsekhovsky:

Et comment ajouter à la queue du tableau de données sans +1 à la taille, une formule à partir de classes prêtes à l'emploi terminal jeter ? ?? Bien, maintenant pour le développement général, afin de ne pas laisser de trous dans ma tête, s'il vous plaît ?

J'ai trouvé la méthode moi-même, mais comment l'attacher, je ne comprends pas, pas assez d'expérience. Il est difficile de maîtriser une langue étrangère quand on ne sait même pas qu'elle existe. C'est une digression.

//+------------------------------------------------------------------+
//| Adding an element to the end of the array                        |
//| Добавление элемента в конец массива                              |
//+------------------------------------------------------------------+
bool CArrayInt::Add(const int element)
  {
//--- check/reserve elements of array
//--- проверка / резерв элементов массива
   if(!Reserve(1))
      return(false);
//--- add
   m_data[m_data_total++]=element;
   m_sort_mode=-1;
//--- successful
//--- успешный
   return(true);
  }

Comment je le visse ? Où mettez-vous le type de tableau que vous voulez faire pousser ? Et si le tableau est une structure ?

 
Sergey Voytsekhovsky:

Respect, merci pour votre soutien rapide et vos conseils utiles, je vais m'y mettre. Et comment ajouter à la queue du tableau des données sans +1 à la taille, formule à partir de classes prêtes à l'emploi terminal jeter sur ? ?? Bien, maintenant pour le développement général, afin de ne pas laisser de trous dans ma tête, s'il vous plaît ?

J'essaie de ne pas utiliser de classes toutes faites. Je n'utilise CTrade que pour créer des panneaux de négociation. Je suis trop paresseux pour réécrire CTrade pour mes propres besoins, alors que les panneaux sont compliqués pour moi et je n'ai aucune envie de les comprendre. C'est pourquoi je suis sûr que +1 au tableau et le remplissage des éléments de la structure n'est pas un tel délai par rapport à trois boucles.
 
Sergey Voytsekhovsky:

J'ai trouvé la méthode elle-même, mais je n'arrive pas à savoir comment l'appliquer, car je ne suis pas assez expérimenté. Il est difficile de maîtriser une langue étrangère quand on ne sait même pas qu'elle existe. C'est une digression.

Alors comment je le visse ? ??

Pour votre réseau de structures - pas question.

 
Sergey Voytsekhovsky:

J'ai trouvé la méthode elle-même, mais je n'arrive pas à savoir comment l'appliquer, car je ne suis pas assez expérimenté. Il est difficile de maîtriser une langue étrangère quand on ne sait même pas qu'elle existe. C'est une digression.

Alors comment je le visse ? ??

Et ceci, si je comprends bien, concerne plutôt les tableaux d'objets OOP.
 
Alexey Viktorov:
Et ceci, si je comprends bien, concerne plutôt les tableaux d'objets OOP.

Pas "plus", mais "de là".

 
Alexey Viktorov:
J'essaie de ne pas utiliser de classes toutes faites. J'utilise CTrade uniquement pour créer des panneaux de négociation. Je suis trop paresseux pour réécrire CTrade pour mes propres besoins, tandis que les panneaux sont trop compliqués pour moi et je suis réticent à les comprendre. C'est pourquoi je suis sûr que +1 à un tableau et le remplissage des éléments de la structure n'est pas un retard si important par rapport à trois boucles.

L'idée est claire, on ne sait pas pourquoi on ne devrait pas utiliser des algorithmes déjà éprouvés, mais à propos des "trois boucles" - très compréhensible, merci. Lorsque vous obtenez des solutions simples de haute qualité, je me demande toujours pourquoi je ne l'ai pas compris moi-même, car c'est tellement évident. Merci.

 
Artyom Trishkin:

Pas "plus", mais d'ici.

S'il vous plaît dites-moi, l'article https://www.mql5.com/ru/articles/567 a le code suivant et mentionne

Этот класс находятся в файле "CDynamicArray.mqh" приложения. Файл должен располагаться в каталоге "MQL5\Include" каталога данных терминала.
class CDynamicArray
  {
private:
   int               m_ChunkSize;    // Размер блока
   int               m_ReservedSize; // Реальный размер массива
   int               m_Size;         // Количество занятых элементов массива
public:
   double            Element[];      // Собственно массив. Находится в секции public, 
                                     // чтобы в случае необходимости работать с ним напрямую
   //+------------------------------------------------------------------+
   //|   Конструктор                                                    |
   //+------------------------------------------------------------------+
   void CDynamicArray(int ChunkSize=1024)
     {
      m_Size=0;                            // Количество занятых элементов
      m_ChunkSize=ChunkSize;               // Размер блока
      m_ReservedSize=ChunkSize;            // Реальный размер массива
      ArrayResize(Element,m_ReservedSize); // Подготовка массива
     }
   //+------------------------------------------------------------------+
   //|   Функция добавления в конец массива                             |
   //+------------------------------------------------------------------+
   void AddValue(double Value)
     {
      m_Size++; // Увеличение количества занятых элементов
      if(m_Size>m_ReservedSize)
        { // Требуемое количество больше реального размера массива
         m_ReservedSize+=m_ChunkSize; // Рассчитываем новый размер массива
         ArrayResize(Element,m_ReservedSize); // Увеличиваем реальный размер массива
        }
      Element[m_Size-1]=Value; // Добавляем значение
     }
   //+------------------------------------------------------------------+
   //|   Функция получения количества занятых элементов массива         |
   //+------------------------------------------------------------------+
   int Size()
     {
      return(m_Size);
     }
  };
Этот класс находятся в файле "CDynamicArray.mqh" приложения. Файл должен располагаться в каталоге "MQL5\Include" каталога данных терминала.

Сравним быстродействие при последовательном увеличении массива на 1 и при увеличении размера массива блоками:

int n=50000;
   double ar[];
   CDynamicArray da;

//--- Вариант 1 (увеличение размера по 1-му элементу)
   long st=GetTickCount(); // Запомним время начала 
   ArrayResize(ar,0); // Установка нулевого размера массива 
   for(int i=0;i<n;i++)
     {
      ArrayResize(ar,i+1); // Последовательное изменение размера массива
      ar[i]=i;
     }
   Alert("Вариант 1: "+IntegerToString(GetTickCount()-st)+" мс"); // Сообщение о времени, затраченном на первый вариант

//--- Вариант 2 (увеличение размера блоками)
   st=GetTickCount(); // Запомним время начала 
   for(int i=0;i<n;i++)
     {
      da.AddValue(i); // Добавляем элемент
     }
   Alert("Вариант 2: "+IntegerToString(GetTickCount()-st)+" мс"); // Сообщение о времени, затраченном на второй вариант

  }

Mais je ne l'ai pas trouvé dans le paquet standard. Je n'ai pas assez cherché ou l'article est périmé ? ??