[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 240

 
a1 = OrdersTotal() ;
for (i = 0 ; i < a1 ; i++)
{
OrderSelect(i,SELECT_BY_POS) ;
OrderDelete(OrderTicket()) ;

}

Voici un script simple comme celui-ci qui devrait supprimer tous les ordres en attente, mais il supprime exactement la moitié des ordres ... ? ??

 
        
FAQ 04.03.2011 12:56 

Подскажите, как найти цену последнего фрактала?


sergeev: Для этого можно воспользоваться индикатором iFractals. Он возвращает значение 0, если на баре нет фрактала и значение цены фрактала если он есть. Фракталы делятся на верхние и нижние. Если вам надо получить верхние, то в функцию iFractals передается MODE_UPPER, а для нижних - MODE_LOWER. Поэтому для поиска фрактала надо пройти в цикле по барам и первое не 0 значение и будет искомым фракталом.

пример:

double frac;
for (int i=3; i<Bars; i++)
{
   frac=iFractals(Symbol(), Period(), MODE_UPPER, i); if (frac>0) break;
   frac=iFractals(Symbol(), Period(), MODE_LOWER, i); if (frac>0) break;
}
if (frac>0) Print("Цена последнего фрактала: ", frac);


пример организации отдельной функции:

//---------------------------------------------------------------   GetLastFrac
double GetLastFrac(string smb, int tf, int iB)
{
   int n=iBars(smb, tf);  double frac;
   for (int i=iB; i<n; i++)
   {
      frac=iFractals(smb, tf, MODE_UPPER, i); if (frac>0) return(frac);
      frac=iFractals(smb, tf, MODE_LOWER, i); if (frac>0) return(frac);
   }
   return(0);
}
.....
Print("Последний фрактал: ", GetLastFrac("EURUSD", 60, 3));
C'était dans la FAQ, je l'ai feuilleté les premières fois et je n'ai pas remarqué.
 
Neo333:
a1 = OrdersTotal() ;
pour (i = 0 ; i < a1; i++)
{
OrderSelect(i,SELECT_BY_POS) ;
OrderDelete(OrderTicket() ;

}

Ce script simple devrait supprimer tous les ordres en attente mais il en supprime exactement la moitié ... ? ??

Disons qu'il y a eu 10 commandes.

Ici vous avez supprimé la moitié (zéro à cinq)

maintenant vous voulez sélectionner le sixième... et il n'en reste que 5. Il y a une erreur et il n'y a rien à supprimer. C'est la même chose pour les autres.

 
Neo333:
a1 = OrdersTotal() ;
pour (i = 0 ; i < a1 ; i++)
{
OrderSelect(i,SELECT_BY_POS) ;
OrderDelete(OrderTicket() ;

}

Ce script simple devrait supprimer tous les ordres en attente, mais il supprime exactement la moitié des ordres ... ? ??

Modifier la direction de la recherche de l'ordre :

for (i=a1-1 ; i>=0 ; i--) {....}

 
artmedia70:

Changer la direction de l'énumération de l'ordre :

for (i=a1-1 ; i>=0 ; i--) {....}

Travaux ... mais quelle est la logique - quelle différence fait i++ ou i-- ? ??
 
Zhunko:

1. Avez-vous vérifié ?

Rapport : Cela a aidé, mais il semble y avoir un problème.

Premier terminal. Suppression de tous les graphiques et symboles, ajout de symboles de 7 dollars, ajout de graphiques. Tous avec des recharges.

Étendre le téléscripteur aux 3/4 de l'écran. J'ai rempli les 6 premiers, le 7ème est arrivé à 5 cases.

Après le prochain redémarrage, les cases ne sont pas toutes remplies, la distribution est presque aléatoire - plus le symbole est bas dans la liste, moins il y a de cases.

Le deuxième terminal. Il y avait 7 paires de yens dessus. J'ai supprimé les caractères supplémentaires, j'ai recommencé - ils se remplissent beaucoup plus profondément, mais la profondeur du remplissage s'est avérée être distribuée de manière aléatoire.

Je penche pour le fait qu'il s'agit d'un bug en raison du petit cache - il n'y en a tout simplement pas assez pour tout le monde, alors que la distribution est soit aléatoire, soit "premier arrivé, premier servi".

En tout cas, pour une devise, la méthode fonctionne. Résumé : recette au fait :) Merci.

 
Neo333:
Ça marche... Mais quelle est la logique - quelle différence fait i++ ou i-- ? ??

On vous a déjà dit quelle était la raison. Il ne s'agit pas de i++ ou i--, il s'agit de savoir à partir de quelle extrémité de la liste vous commencez à supprimer des ordres - le début de la liste (comme vous l'avez fait) ou la fin de la liste (comme vous devez le faire dans ce cas).

Pour comprendre ce qui se passe lorsque des commandes sont supprimées, vous devez savoir et comprendre comment les commandes sont stockées dans le tableau.

Lorsque vous supprimez d'abord le premier ordre (il est indexé par i=0), les index de tous les ordres sont décalés dans le tableau - le premier ordre devient nul, le deuxième devient le premier, le troisième devient le deuxième et ainsi de suite. C'est pourquoi tous les ordres ne sont pas complètement supprimés - en fait, lorsque i devient 6, le sixième ordre est déplacé à la cinquième position dans le tableau des ordres et l'ordre n'est tout simplement pas sélectionné par l'indice 6.

Lorsque vous supprimez des commandes à la fin de la liste, le décalage ne se produit pas - la première commande a une position zéro dans la liste, et elle continuera à l'avoir. Le 10ème ordre avait la position 9, il a été supprimé, puis le 9ème ordre, qui a une position 8 dans la liste est supprimé, et ainsi de suite, jusqu'au premier ordre ayant une position zéro dans le tableau des ordres.

 
Neo333:
Travaux .... mais quelle est la logique - quelle différence cela fait-il i++ ou i-- ? ??
vous avez déjà été répondu par un utilisateur
152
ilunga à cette question
 
nadya:
vous avez déjà été répondu par un utilisateur
152
ilunga à cette question
Quelque chose me dit que j'aurais dû le mâcher et donner une réponse plus détaillée... :)
 
Zhunko:
... ouvrir l'horaire de manière autonome.
Le reste des graphiques sont "tic-tac". Ce n'est pas une option.
Raison: