[ARCHIVE] Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas à côté. Nulle part sans toi - 3. - page 436

 

Il existe un tableau ArrayTemp[100] dans lequel tous les éléments sont de type entier et triés par ordre croissant de 1 à 100.

Je dois supprimer les 1 à 50 premiers éléments et réduire la taille du tableau à [50].

J'ai pensé le faire en copiant la seconde moitié du tableau vers le tableau temporaire, en redimensionnant l'original et en recopiant le tableau temporaire vers l'original.

- Existe-t-il un moyen plus simple ?

Merci !

 
chief2000:

Il existe un tableau ArrayTemp[100] dans lequel tous les éléments sont de type entier et triés par ordre croissant de 1 à 100.

Je dois supprimer les 1 à 50 premiers éléments et réduire la taille du tableau à [50].

J'ai pensé le faire en copiant la seconde moitié du tableau vers le tableau temporaire, en redimensionnant l'original et en recopiant le tableau temporaire vers l'original.

- Y a-t-il un moyen plus simple ?

Merci !



Vous pourriez trier par ordre décroissant, puis redimensionner le tableau. Je pense que ce serait plus rapide. Mais qui sait ?)
 
Figar0:

Vous pourriez trier par ordre décroissant, puis redimensionner le tableau. Je pense que ce serait plus rapide. Mais qui sait ?)

Merci !

 
Vinin:

Bons premiers pas, Olga Alexandrovna. 330 lignes de code


Bonne journée ! Je ne sais pas comment le juger - comme un éloge ou vice versa, mais en tout cas, merci pour la réponse.

Je ne trouve pas la solution, malheureusement, c'est pourquoi je le considère ainsi - l'essentiel est la qualité et la compétence, et avec lui, comme je le comprends, j'ai une lacune, car le code ne fonctionne pas.

J'attends avec impatience une réponse à ma question......

 

Les bonnes personnes aident qui peut

Voici le code dans lequel le mandat doit être supprimé après l'expiration du temps, c'est la condition

MyCurrentTime >= OrderExpiriation && OrderMagicNumber() == MagicNumber

Pourquoi, si j'insère cette condition dans le premier opérateur if, l'autre opérateur qui se trouve à l'intérieur ne tient-il pas compte de cette condition ?

C'est-à-dire que ce code ne fonctionne pas et supprime tous les ordres en attente en une seule fois.

  for(int counter=0;counter<OrdersTotal();counter++)
    {
    if(OrderSelect(counter,SELECT_BY_POS,MODE_TRADES) == false) break;

    if(MyCurrentTime >= OrderExpiriation && OrderMagicNumber() == MagicNumber) //Если текущее время больше чем время истечения
      {
        
        
      if(OrderType() == OP_BUYLIMIT || OrderType() == OP_SELLLIMIT || OrderType() == OP_BUYSTOP || OrderType() == OP_SELLSTOP)
        {
        OrderDelete(OrderTicket());
        }
        
      }
    }

Et ce code fonctionne et ne supprime pas les commandes en une seule fois.

  for(int counter=0;counter<OrdersTotal();counter++)
    {
    if(OrderSelect(counter,SELECT_BY_POS,MODE_TRADES) == false) break;

    if(MyCurrentTime >= OrderExpiriation && OrderMagicNumber() == MagicNumber) //Если текущее время больше чем время истечения
      {
        
        
      if(OrderType() == OP_BUYLIMIT || OrderType() == OP_SELLLIMIT || OrderType() == OP_BUYSTOP || OrderType() == OP_SELLSTOP && MyCurrentTime >= OrderExpiriation && OrderMagicNumber() == MagicNumber)
        {
        OrderDelete(OrderTicket());
        }
        
      }
    }
 

Pouvez-vous me dire à quoi servent les points d'arrêt ? J'ai cherché sur le forum mais je n'ai trouvé aucune information. Comment l'utiliser ?

 
chief2000:

Il existe un tableau ArrayTemp[100] dans lequel tous les éléments sont de type entier et triés par ordre croissant de 1 à 100.

Je dois supprimer les 1 à 50 premiers éléments et réduire la taille du tableau à [50].

J'ai pensé le faire en copiant la seconde moitié du tableau vers le tableau temporaire, en redimensionnant l'original et en recopiant le tableau temporaire vers l'original.

Vous pourriez ne rien faire et considérer le 50e élément comme l'élément de départ. ArrayCopy prendra un certain temps de toute façon.
 
sss2019:

Les bonnes personnes aident qui peut

Voici le code dans lequel le mandat doit être supprimé après l'expiration du temps, c'est la condition

Pourquoi, si j'insère cette condition dans le premier opérateur if, l'autre opérateur qui se trouve à l'intérieur ne tient-il pas compte de cette condition ?

C'est-à-dire que ce code ne fonctionne pas et supprime tous les ordres en attente en une seule fois.

Et ce code fonctionne et ne supprime pas les commandes en une seule fois.

Il est généralement bon de passer en revue les commandes en commençant par la dernière. Dans le second cas, n'ayez pas peur d'ajouter des parenthèses dans la condition.

 
fore-x:

Pouvez-vous me dire à quoi servent les points d'arrêt ? J'ai cherché sur le forum mais je n'ai trouvé aucune information. Comment l'utiliser ?

Ça ne marche pas. Je l'ai fait en pensant que ce serait un bon débogueur, mais ce n'est pas le cas.
 
splxgf:
Vous pouvez ne rien faire et considérer le 50e élément comme l'élément initial. ArrayCopy prendra un certain temps dans tous les cas.

Le fait est que le tableau doit périodiquement inclure plus d'éléments (s'étendre), ce qui affecte la vitesse d'optimisation/de test. Par conséquent, aux moments "favorables", je le ramène à l'état initial.

La solution de Figar0: s'est avérée plus simple que la mienne et fonctionne bien.

Merci !

Raison: