Questions des débutants MQL5 MT5 MetaTrader 5 - page 321

 
C-4:

Encore une fois (lisez attentivement) :

Dans MetaTrader4, vous ne pouvez clôturer les ordres que de manière séquentielle : envoyez un ordre pour clôturer un ordre, attendez son exécution, passez à l'ordre suivant, etc. Pour cette raison, le temps de clôture d'un lot d'ordres dans MetaTrader4 est important et ne peut être réduit par des moyens triviaux. Cependant, vous pouvez télécharger plusieurs Expert Advisors sur vos propres graphiques et leur faire échanger des informations entre eux et fermer des ordres par une commande commune. Chaque expert ne clôture les ordres que sur son symbole. Comme il existe plusieurs fils de transaction dans MetaTrader4, ils ne se bloquent pas mutuellement et ne s'envoient pas d'ordres. Cependant, l'organisation d'un tel groupe d'experts est compliquée, et à en juger par votre niveau de connaissances, je ne vous conseillerais pas une telle chose.

Si vous pensez encore que j'ai écrit trop de mots, voici un bref résumé :

1) La réponse à votre question est non, vous ne pouvez pas exécuter un script depuis un Expert Advisor.

2. Vous ne pouvez pas augmenter la vitesse d'exécution des ordres de transaction dans MetaTrader4 sans utiliser des méthodes complexes.

La seule façon de résoudre votre question normalement est la fonction OrderSendAsync, qui n'existe pas dans MetaTrader4.

Merci beaucoup pour votre réponse détaillée ! Si cela ne vous dérange pas, veuillez nous faire part de vos réflexions sur une telle idée :

Ajouter 2 paramètres à l'Expert Advisor qui ferme tous les ordres au profit total, pour trier les ordres :
(1 paramètre - 1-tri par mag par ordre décroissant ou 2 - ordre croissant et 2 - 0-vente et achat, 1-ordre de vente, 2-ordre d'achat)
Ouvrez 4 terminaux avec 1 compte et 1 graphique commun de la même paire, de sorte que les ticks coïncident et définissez différents paramètres comme 1-1, 1-2, 2-1, 2-2.
qui les divisera en 4 flux : vente minimum de magicien, achat minimum de magicien, vente maximum de magicien, achat maximum de magicien.

Ou est-ce que je suis encore stupide ? Et oui, vous avez raison concernant mon niveau de connaissances !

 
Novikov:

Merci beaucoup pour cette réponse détaillée ! Si cela ne vous dérange pas, veuillez nous faire part de vos réflexions sur cette idée :

Ajouter 2 paramètres à l'Expert Advisor qui ferme tous les ordres au profit total, pour trier les ordres :
(1 paramètre - 1-tri par mag par ordre décroissant ou 2 - ordre croissant et 2 - 0-vente et achat, 1-ordre de vente, 2-ordre d'achat)
Ouvrez 4 terminaux avec 1 compte et 1 graphique commun de la même paire, de sorte que les ticks coïncident et définissez différents paramètres comme 1-1, 1-2, 2-1, 2-2.
qui les divisera en 4 flux : vente minimum de magicien, achat minimum de magicien, vente maximum de magicien, achat maximum de magicien.

Ou est-ce que je suis encore stupide ? Et oui, vous avez raison concernant mon niveau de connaissances !

Oui, on peut le faire de cette façon. Mais il n'est pas nécessaire de faire fonctionner plusieurs terminaux. Lancez un terminal, et il a 4 fenêtres. Mettez un robot sur chaque fenêtre. Utilisez les chiffres comme l'un des paramètres de ce robot : 1-4. En d'autres termes, vous devez affecter le robot avec le paramètre 1 à la première fenêtre, avec le paramètre 2 à la deuxième fenêtre et ainsi de suite. Lorsque le moment est venu de clôturer les ordres, chacun des robots compare le nombre magique de l'ordre sélectionné avec le nombre magique du paramètre et le clôture. Les ordres avec d'autres majuscules seront donnés à d'autres Expert Advisors pour être clôturés.
 
C-4:
Oui, nous pouvons le faire. Mais il n'est pas nécessaire de faire fonctionner plusieurs terminaux. Vous devez lancer un terminal, et il a 4 fenêtres. Mettez un robot sur chaque fenêtre. Utilisez les nombres comme l'un des paramètres de ce robot : 1-4. En d'autres termes, vous devez affecter le robot avec le paramètre 1 à la première fenêtre, avec le paramètre 2 à la deuxième fenêtre et ainsi de suite. Lorsque le moment est venu de clôturer les ordres, chacun des robots compare le nombre magique de l'ordre sélectionné avec le nombre magique du paramètre et le clôture. Les ordres avec d'autres majuscules seront donnés à d'autres Expert Advisors pour être clôturés.

Sur le forum mt5, lorsque j'ai initialement envisagé 4 fenêtres, comme vous le suggérez, un programmeur m'a répondu : "Le terminal en est une. Cela signifie qu'il n'y a qu'un seul "trou", c'est-à-dire qu'il n'y a qu'un seul petit "trou" dans le terminal pour l'accès au serveur, de la taille d'une requête, qui est utilisé par tous les EA et les scripts, qui sont exécutés dans le terminal. Personne ne peut accéder au serveur tant que la demande unique n'a pas été traitée.

Alors, qu'est-ce qui est le mieux et le plus vrai - 4 cartes dans 1 terminal ou 4 terminaux ?

 
Novikov:

Sur le forum mt5, lorsque j'ai initialement envisagé 4 fenêtres, comme vous le suggérez, un programmeur m'a répondu : "Le terminal en est une. Cela signifie qu'il n'y a qu'un seul "trou", c'est-à-dire qu'il n'y a qu'un seul petit "trou" dans le terminal pour l'accès au serveur, de la taille d'une requête, qui est utilisé par tous les EA et les scripts, qui sont exécutés dans le terminal. Tant qu'une demande n'est pas traitée, personne d'autre ne peut accéder au serveur.

Alors, qu'est-ce qui sera le mieux et le plus correct - 4 cartes dans 1 terminal ou 4 terminaux ?

Réfléchissez vous-même à la réponse de ce "programmeur". Si c'était le cas, il serait impossible de trader avec plusieurs Expert Advisors dans un seul terminal. Ils étaient constamment occupés par le contexte, c'est-à-dire qu'ils se bloquaient mutuellement. Auparavant, dans les versions plus anciennes de MT4, une telle erreur existait et on pouvait la rencontrer, mais maintenant elle a même été supprimée car elle n'est plus pertinente. Le multithreading de l'exécution des ordres dans MT4 a été considérablement étendu et existe depuis longtemps.

Dans tous les cas, vous devriez suivre mes conseils et si quelque chose ne va pas, il sera facile de déplacer certains EAs vers un autre terminal.

 
Novikov:

Sur le forum mt5, lorsque j'ai initialement envisagé 4 fenêtres, comme vous le suggérez, un programmeur m'a répondu : "Le terminal en est une. Cela signifie qu'il n'y a qu'un seul "trou", c'est-à-dire qu'il n'y a qu'un seul petit "trou" dans le terminal pour l'accès au serveur, de la taille d'une requête, qui est utilisé par tous les EA et les scripts, qui sont exécutés dans le terminal. Personne ne peut accéder au serveur tant que la demande unique n'a pas été traitée.

Alors, qu'est-ce qui est le mieux et le plus vrai - 4 cartes dans 1 terminal ou 4 terminaux ?

Où trouvez-vous de tels "programmeurs" ?
 

Chère, une autre question : la fonction OrderCloseBy permettrait-elle d'accélérer la fermeture d'une grande pile d'ordres ?

Par exemple : lorsqu'un profit donné est atteint, ouvrez un ordre supplémentaire sur la (les) paire(s) pour égaliser la taille du lot des ordres d'achat et de vente, puis exécutez "fermer les ordres superposés".

Les citations sont composées de 5 chiffres.

 

Les gars, pouvez-vous me conseiller sur cette question, elle peut être de nature organisationnelle. Je ne peux pas vous montrer le code de l'indicateur. Il est écrit de manière compétente, tout a été testé auparavant.

Début de la question à partir d'ici : https://www.mql5.com/ru/forum/6343/page323

J'ai installé le terminal à partir du site web de MQ - il proposait un serveur de démonstration Alp par défaut. J'ai fini par faire le test sur Eurobucks :

Je crois savoir qu'il attend les données de la livre-dollar. Aucun commerce n'est ouvert nulle part.

Ensuite, quand on court sur les livres sterling, ça dit :

données en suspens pour USDJPY.

 

Et seulement lorsqu'il fonctionne sur USDJPY - il n'y a pas de données en attente - mais toujours pas de trades ouverts.

Je n'ai pas spécifié explicitement une paire pour ouvrir des transactions dans le code, c'est-à-dire que par exemple

Tous pour tout symbole _Symbol. Et il ne s'agit pas d'ouvrir des commandes... Quelle pourrait être la raison ? Merci.

 for(int i=0;i<10;i++)
     {
      volume=NormalizeDouble(volume,1);
      if(volume<=0) break;
      if(Type==POSITION_TYPE_SELL)
        {
         request.type=ORDER_TYPE_SELL;
         request.price=SymbolInfoDouble(_Symbol,SYMBOL_BID);
         if(TP!=0) takeprofit = request.price-TP*_Point;
         if(SL!=0) stoploss = request.price+SL*_Point;
        }
      if(Type==POSITION_TYPE_BUY)
        {
         request.type=ORDER_TYPE_BUY;
         request.price=SymbolInfoDouble(_Symbol,SYMBOL_ASK);
         if(TP!=0) takeprofit = request.price+TP*_Point;
         if(SL!=0) stoploss = request.price-SL*_Point;
        }
      request.action = TRADE_ACTION_DEAL;
      request.symbol = _Symbol;
      request.volume = MathMin(volume,SymbolInfoDouble(_Symbol,SYMBOL_VOLUME_MAX));
      request.sl = stoploss;
      request.tp = takeprofit;
      request.deviation=SymbolInfoInteger(_Symbol,SYMBOL_SPREAD);
      request.type_filling=ORDER_FILLING_FOK;
      request.comment=" ";//DoubleToString(Money,2)+"$";
      if(!OrderCheck(request,check))
        {
         if(check.margin_level<100) volume-=SymbolInfoDouble(_Symbol,SYMBOL_VOLUME_STEP);
 

L'indicateur attribue des pondérations à chaque instrument, ce qui donne lieu à une sorte d'analyse en grappes. Il ne veut pas fonctionner dans le testeur. Quelle peut en être la raison ? Je vous remercie.

Et les agents fonctionnent bien, tout est chargé et prêt à partir...


 
R0MAN:

L'indicateur attribue des pondérations à chaque instrument, ce qui donne lieu à une sorte d'analyse en grappes. Il ne veut pas fonctionner dans le testeur. Quelle peut en être la raison ? Je vous remercie.

Et les agents fonctionnent bien, tout est chargé et prêt à partir...


Écrivez à Servicedesk. Ils devront vous donner le code, cependant.
Raison: