Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas à côté. Nulle part sans toi - 6. - page 1109

 
LRA:
La question est pertinente, par exemple, pour un système de formation. Pour obtenir la distribution, installez MT4 sur un lecteur flash. Ou copiez le dossier du terminal sur un lecteur flash. Ce dossier peut ensuite être copié sur un nombre illimité d'ordinateurs, un nombre illimité de fois. Une telle distribution est utile à des fins de sauvegarde, d'archivage, de restauration... Il vaut mieux démarrer le terminal avec le commutateur /portable, sinon il créera des dossiers inutiles et gênants sur votre ordinateur. Cette question est traitée plus en détail dans un autre fil de discussion au lien suivant

Comment le mettre en place ?

L'installateur que je télécharge n'installe rien à partir d'Internet.

 

Lorsque je lance le programme d'installation, une fenêtre apparaît et affiche un indicateur de téléchargement de fichiers.

Une autre fenêtre apparaît alors

Le programme d'installation me demande de spécifier les paramètres du proxy, que je n'ai pas.

 
 
polpolpol:

Lorsque je lance le programme d'installation, une fenêtre apparaît et affiche un indicateur de téléchargement de fichiers.

Une autre fenêtre apparaît alors

Le programme d'installation me demande de spécifier des paramètres de proxy, que je n'ai pas.

Je dois désactiver l'antivirus et le réinitialiser à partir de la mémoire.
 

Bonjour, l'entrée suivante sera-t-elle correcte ? La fonction, lorsqu'elle est appelée, doit supprimer tous les ordres en attente.

void DeletedOrders()
         {
         for (int i=0; i<=OrdersTotal(), i++)
             {
             if (OrderSelect(i,SELECT_BY_POS))
                type=OrderType();
             if (type==2 || type==3 || type==4 || type==5)
                OrderDelete(i,clrNONE);
             }
         return();
         }  
 
bobrush:

Bonjour, l'entrée suivante sera-t-elle correcte ? La fonction doit supprimer tous les ordres en attente lorsqu'elle est appelée.

Non, bien sûr que non. Nous devrions spécifier le ticket, et non le numéro de commande dans la boucle :OrderDelete(OrderTicket(),clrNONE);

Et la condition est suffisante :if(type>1).

Je vous recommande également d'imprimer le code d'erreur plus souvent - cela aide.

Oh, oui, les fonctions de type "void" ne doivent rien retourner, nous n'avons pas besoin de return() en exécution normale, seulement lorsque la sortie prématurée de la fonction est prévue par une condition quelconque.

 
bobrush:

Bonjour, l'entrée suivante sera-t-elle correcte ? La fonction, lorsqu'elle est appelée, doit supprimer tous les ordres en attente.

Gardez à l'esprit qu'il existe encore des types d'ordre non documentés avec le type=6 et avec le type=7 respectivement pour les opérations sur solde et sur crédit de compte.

Au lieu de i<=OrdersTotal(), i<OrdersTotal() serait mieux, sans appeler OrderSelect inutilement

Et la boucle doit être passée de la fin au début, sinon, si le tableau d'ordres a le temps d'être mis à jour après que le i-ème élément qui le compose ait été retiré, l'ancien i+1ème élément à la i-ème place sera sauté. Il est préférable de commencer par la fin.

Si l'on considère que les développeurs ne garantissent aucun ordre dans le tableau des commandes, on ne peut effectivement pas garantir que la séquence des commandes dans leur tableau restera la même après la suppression de l'une d'entre elles. Ce serait tout à fait fiable. Nous parcourons la boucle jusqu'à ce que l'ordre en attente soit détecté. La boucle est terminée. Supprimer l'ordre que nous avons trouvé. Nous attendons que Sleep (100) mette à jour le tableau des commandes. Puis nous revenons à la boucle pour trouver l'ordre en attente mais avec un nouveau tableau d'ordres. Nous effectuons une recherche complète, mais pas en reprenant la boucle précédente. La boucle de trois (la boucle de recherche, la suppression d'un ordre, l'attente de la mise à jour du tableau) jusqu'à ce que l'ordre en attente soit introuvable.

 
evillive:

Non, bien sûr que non. Le ticket doit être spécifié, pas le numéro de commande dans la boucle :OrderDelete(OrderTicket(),clrNONE);

Et la condition est suffisante :if(type>1).

Je vous recommande également d'imprimer le code d'erreur plus souvent - cela aide.

Oh, oui, les fonctions de type "void" ne doivent rien retourner, nous n'avons pas besoin de return() en exécution normale, seulement lorsque la sortie prématurée de la fonction est prévue par une condition quelconque.


Merci !
 
Vlad143:

Notez qu'il existe encore des types d'ordre non documentés avec type=6 et avec type=7 respectivement pour les transactions sur solde et sur crédit de compte.

Au lieu de i<=OrdersTotal(), i<OrdersTotal() serait mieux, sans appeler OrderSelect inutilement

Et la boucle doit être passée de la fin au début, sinon, si le tableau d'ordres a le temps d'être mis à jour après que le i-ème élément qui le compose ait été retiré, l'ancien i+1ème élément à la i-ème place sera sauté. Il est préférable de commencer par la fin.

Si l'on considère que les développeurs ne garantissent aucun ordre dans le tableau des commandes, on ne peut effectivement pas garantir que la séquence des commandes dans leur tableau restera la même après la suppression de l'une d'entre elles. Ce serait tout à fait fiable. Nous parcourons la boucle jusqu'à ce que l'ordre en attente soit détecté. La boucle est terminée. Supprimer l'ordre que nous avons trouvé. Nous attendons que Sleep (100) mette à jour le tableau des commandes. Puis nous revenons à la boucle pour trouver l'ordre en attente mais avec un nouveau tableau d'ordres. Nous effectuons une recherche complète, mais pas en reprenant la boucle précédente. Et nous devons faire cela en trois fois (boucle pour trouver, supprimer un ordre, attendre que le tableau soit mis à jour) jusqu'à ce que l'ordre en attente ne puisse être trouvé.


C'est à dire, for(OrdersTotal()-1,i=0,i--) et à la fin de la boucle, sleep et break ?
 
Vlad143: Nous attendons que Sleep (100) rafraîchisse le tableau des commandes.
IMHO, IMHO, mon avis personnel au lieu de Sleep (100) c'est mieux while(!RefreshRates()) ; point-virgule à la fin.