Caractéristiques du langage mql5, subtilités et techniques - page 24

 
Alexey Viktorov:
Qu'est-ce que cela va changer ?
La déclaration concernant les événements liés au commerce s'inscrit parfaitement dans le cadre du sujet du fil de discussion.
 

Une simple panne de réseau à court terme annule la logique de négociation basée UNIQUEMENT sur l'écoute des événements commerciaux.

Par conséquent, les adeptes de OnTradeTransaction vont un peu loin dans leur raisonnement.

C'est le mécanisme de la logique de trading qui servira fidèlement sur n'importe quelle plateforme.

Forum sur le trading, les systèmes de trading automatisés et les tests de stratégies de trading

Bon exemple de travail avec des ordres limités dans un EA

fxsaber, 2017.01.02 23:12

Je ne négocie qu'avec des ordres en attente la plupart du temps. Je ne fais pas de traitement du tout. OrderSend a retourné -1 (MT4 ou MT5+MT4Orders) - cela n'a pas fonctionné et c'est correct, car l'étape suivante consiste encore à examiner complètement l'environnement de trading. Et s'il n'y a pas d'attente/de position mais qu'il devrait y en avoir, nous le synchronisons avec l'état dans lequel il devrait être - l'OrderSend correspondant est envoyé.

Avec cette approche, toutes les nuances des régressions, des exécutions partielles, etc. sont prises en compte. Et la mise en œuvre est très simple et efficace. Il n'a jamais échoué.

Je n'ai pas essayé les méthodes asynchrones et ici ce n'est pas beaucoup plus difficile, mais je ne peux pas en être sûr.

 
fxsaber:

Une simple panne de réseau à court terme annule la logique de négociation basée UNIQUEMENT sur l'écoute des événements commerciaux.

Les adeptes de OnTradeTransaction sont donc un peu excessifs dans leur raisonnement.

C'est le mécanisme de la logique commerciale qui servira fidèlement sur n'importe quelle plateforme.

Oui, le seul moyen fiable est de vérifier le statut du compte de trading. Tous les événements OnTrade* ne peuvent pas fournir un mécanisme fiable de gestion des ordres de transaction.

Quant aux opérations asynchrones, leur seul avantage est que vous pouvez envoyer des ordres de transaction à la suite, sans attendre les résultats des ordres précédents. Mais le contrôle de leur exécution ne peut pas non plus s'appuyer sur des événements, à cet égard il n'y a pas de différence avec le contrôle des résultats des ordres synchrones.

L'état du compte de trading est celui que nous avons au moment de la demande (nous faisons la demande nous-mêmes), s'il y a des problèmes avec le réseau - pas de problème, nous pouvons faire des demandes jusqu'à ce que le réseau se rétablisse. S'en remettre aux événements, en revanche, nous rend complètement dépendants de facteurs extérieurs.

 

fxsaber:
Cette situation avec Trade-events est tout à fait cohérente avec le sujet de cette branche.

Je ne suis pas du tout en désaccord, je dis simplement que peu de gens ont besoin de saisir de telles subtilités.

fxsaber:

Une simple panne de réseau à court terme annule la logique de négociation basée UNIQUEMENT sur l'écoute des événements commerciaux.

Par conséquent, les adeptes de OnTradeTransaction vont un peu loin dans leur raisonnement.

C'est le mécanisme de la logique commerciale qui servira fidèlement sur n'importe quelle plateforme.

Et je ne vais pas décourager quiconque de le faire. D'autant plus que je pense qu'il est très nécessaire de contrôler le retour du serveur. Seulement, il existe différentes approches. Ce que vous suggérez est correct, mais ce n'est pas une panacée.

C'est peut-être mon principe de vie : "Je peux faire pire, mais à ma façon. Si quelque chose arrive, il n'y aura personne à blâmer."

 

J'ai pris l'habitude d'utiliser la fonction MarketInfo(_Symbol, MODE_TICKVALUE) pour la valeur du point d'un symbole dans 4. Je n'ai pas encore rencontré de problèmes.

Il n'est pas aussi uniforme chez les différents courtiers de MT5. J'ai exécuté un petit script sur EURUSD et USDJPY sur deux comptes différents. Notez la valeur du point et la taille du contrat.

Il s'agit d'un compte de démonstration de MQ.

Il s'agit d'uncompte de démonstration de Just2Trade:

Quelqu'un a-t-il une fonction universelle qui ferait en sorte que la valeur des points soit la même ?
Je comprends que la taille d'un tick et la taille du contrat doivent être prises en compte, mais peut-être y a-t-il autre chose ?

Par exemple, s'il s'agit d'EURUSD et que le dépôt est libellé en dollars - alors 1 point à cinq chiffres pour le rendre égal à 1 dol.

Et dans quels cas devons-nous utiliser SYMBOL_TRADE_TICK_VALUE_PROFIT ou SYMBOL_TRADE_TICK_VALUE_LOSS?
 
Vasiliy Pushkaryov:

J'ai pris l'habitude d'utiliser la fonction MarketInfo(_Symbol, MODE_TICKVALUE) pour la valeur du point d'un symbole dans 4. Je n'ai pas encore rencontré de problèmes.

Il n'est pas aussi uniforme chez les différents courtiers de MT5. J'ai exécuté un petit script sur EURUSD et USDJPY sur deux comptes différents. Notez la valeur du point et la taille du contrat.

Il s'agit d'un compte de démonstration de MQ.

Il s'agit d'uncompte de démonstration de Just2Trade:

Quelqu'un a-t-il une fonction universelle qui ferait en sorte que la valeur des points soit la même ?
Je comprends que la taille d'un tick et la taille du contrat doivent être prises en compte, mais peut-être y a-t-il autre chose ?

Par exemple, s'il s'agit d'EURUSD et que le dépôt est libellé en dollars - alors 1 point à cinq chiffres pour le rendre égal à 1 dol.

Quand est-il correct d'utiliser SYMBOL_TRADE_TICK_VALUE_PROFIT ou SYMBOL_TRADE_TICK_VALUE_LOSS?
Lorsque le "Bureau de Nikonor" aura la taille d'un contrat comme dans la normale, des CENTAINES de milliers, alors la valeur des points sera comme dans la normale. En attendant, vous pouvez multiplier ce que vous avez par 100 000 et obtenir ce que vous voulez.
 
Alexey Viktorov:
Lorsque le "bureau de Nikonor" aura une taille de contrat comme les contrats normaux, une centaine de milliers, alors la valeur des points sera comme les contrats normaux. En attendant, vous pouvez multiplier ce que vous avez par 100 000 et obtenir ce que vous voulez.
J'ai aussi lutté une fois avec cela. MetaQuotes-Demo a une taille de contrat ; Just2Trade en a une autre. Pour les forex, c'est un, pour les actions, etc. - un autre pour le Forex, etc. Ce qui est écrit dans la référence sur la façon de tout calculer ne s'additionne pas, pour l'amour du ciel. Et le client attend... Nous avons donc convenu qu'il ne le calculera pas automatiquement, mais qu'il le multipliera simplement par 100. Et seulement sur son Just2Trade. Je ne comprends toujours pas ce tour... :((
 
Artyom Trishkin:
J'ai aussi lutté une fois avec cela. Pour MetaQuotes-Demo la taille du contrat est une, pour Just2Trade c'est une autre. Pour le forex, c'est un seul et pour les actions, etc. c'est différent. - pour le Forex, une pour les actions, etc. Ce qui est écrit dans la référence sur la façon de tout calculer ne s'additionne pas, pour l'amour du ciel. Et le client attend... Nous avons donc convenu qu'il ne le calculera pas automatiquement, mais qu'il le multipliera simplement par 100. Et seulement sur son Just2Trade. Je ne comprends toujours pas ce tour... :((

Qu'est-ce qui pourrait ne pas être clair ?

Taille du contrat standard = 1 Acheté 1000 lots a obtenu 0.00001*1000/1 = 0.01 pour 1 pip

Autre option, taille du contrat = 100000 acheté 0.01 lot (100000*0.01=1000) obtenu 1 point 1*1000/100000 = 0.01

C'est pour les chiffres 5/3.

ps ; Et dans insta, la taille du contrat standard était de 10000.
 
Alexey Viktorov:

Qu'est-ce qui pourrait ne pas être clair ?

Taille de contrat standard = 1, achat de 1000 lots, réception de 0,00001*1000/1 = 0,01 pour 1 pip.

Autre option, taille du contrat = 100000 acheté 0.01 lot (100000*0.01=1000) obtenu 1 point 1*1000/100000 = 0.01

C'est pour les chiffres 5/3.

ps ; Et dans Insta la taille standard des contrats était de 10000.
Je vois, je ne suis pas habitué à des lots de 3000 ou 5000. Je dois m'y habituer.
 
Vasiliy Pushkaryov:
Je vois, je ne suis pas habitué à utiliser des lots de 3000 ou 5000. Tu devras t'y habituer.

Si vous n'avez pas l'habitude, vous pouvez l'écrire comme ceci

input double               lot         =  0.1;
input int                  take        =  100;   // TakeProfit

double takePips, contract;

/*******************Expert initialization function*******************/
int OnInit()
{
   contract = 100000/SymbolInfoDouble(_Symbol, SYMBOL_TRADE_CONTRACT_SIZE)*lot;
    takePips = take*_Point;
   return(INIT_SUCCEEDED);
}/*******************************************************************/

Et dans la fonction OrderSend(), envoyez une variable de contrat indépendamment du caprice du croupier.