Erreurs, bugs, questions - page 445

 
komposter:

Assurer le suivi de la normalisation du lot.

Les gars, pourquoi faire des théories ?

Pour rire et pour ne pas se rouiller la tête.

Tout doit être modéré. Je travaille avec de l'argent réel depuis plus de 5 ans, avec différents courtiers, types de comptes et instruments, et je n'ai jamais fait d'erreur.
Je n'ai jamais fait d'erreur. Et je n'en ferai jamais. Peu importe, nous ne sommes pas sérieux.
 
komposter:

Le pas doit être un multiple du lot minimum.

Qu'est-ce qui vous rend si sûr ? La pratique - je comprends, mais pas la limitation du moteur.
Les arguments des parties sont clairs. En tout cas, j'apprécie sincèrement la sympathie. :)

Cygne:

Regardez, tous les instruments sont négociés en même temps dans les comptes du championnat. Registre)

Oui, ça semble avoir été enregistré. C'est celui sur lequel j'ai détecté cette erreur.

Cygne:

Je vais peut-être réessayer :

si(prix actuel == 0.0) retour ;

Merci pour l'idée ! Je vais devoir essayer cette option. :)

 

voix_kas:

Oui, je crois que je suis inscrit. C'est là que j'attrape cette erreur.

Il y a une barre de minutes sur GBPCHF 2011.01.03 à 00:00. N'avez-vous pas contacté Servicedesk ?
 
Swan:
Sur GBPCHF 2011.01.03 à 00:00 il y a une barre de minutes. Avez-vous contacté Servicedesk ?

Je ne suis pas allé au SD.

Voici la situation. Je suis en train d'écrire un EA multi-devises. Je l'ai placé sur le graphique Eurobucks et j'essaie de suivre toutes les paires de devises valides transmises au conseiller expert en tant que paramètre.

Manque de méthodologie/documentation. Voici quelques questions par exemple :

1. Pourquoi le prix peut-il être nul ? Après tout, à ce moment-là (2011.01.03 00:00:00), le dernier prix connu (à l'achat et à la vente) existait toujours ? Sur quels principes le terminal donne-t-il cela.

2. il y a une session de devis. En quoi est-elle, en principe, différente d'une séance de négociation ? Il est logique de supposer qu'il est possible d'effectuer des transactions pendant la seconde. Et si nous ne pouvons pas négocier pendant la première session (de cotation), alors pourquoi les cotations changent-elles ? Les cotes changent à cause, excusez-moi pour cette interprétation, du "déséquilibre de l'offre et de la demande".

3. Supposons que nous ayons reçu un Tick sur une paire de devises. Dans le même événement, nous essayons de "voir" l'état d'une autre paire. Où est la garantie que le dernier devis établi pour l'autre paire est toujours valable ? Quelle est la durée de vie d'un devis ? L'explication la plus rationnelle est la vérification de la dernière cotation avec la vérification simultanée du volume des lots sur le marché. C'est à dire que comme je le vois : N devis de eurusd est reçu. Elle n'est pas gratuite, mais une option est placée à cette cotation pour un certain volume. Ceux qui veulent acheter/vendre s'arrachent le gâteau. À un moment donné, il (le gâteau) se termine et cette citation "cesse de vivre". Ensuite, le terminal donne l'offre suivante (moins intéressante). Et s'il n'y a pas de cotation du tout (personne ne veut vendre/acheter de la monnaie) ? Alors le prix est égal à zéro ?

Quoi qu'il en soit, je ne suis pas un expert en bourse/forex.

Je serais reconnaissant si quelqu'un pouvait me donner une réponse détaillée aux questions posées. Comment cela se passe-t-il réellement, et comment ces situations sont-elles présentées dans le terminal MT5 ?

 
voix_kas:

Je ne suis pas allé au SD.

Voici la situation. Je suis en train d'écrire un EA multi-devises. Je l'ai placé sur le graphique Eurobucks et j'essaie de suivre toutes les paires de devises valides transmises au conseiller expert en tant que paramètre.

Manque de méthodologie/documentation. Voici quelques questions par exemple :

1. Pourquoi le prix peut-il être nul ? Après tout, à ce moment-là (2011.01.03 00:00:00), le dernier prix connu (à l'achat et à la vente) existait toujours ? Sur quels principes le terminal donne-t-il cela.

2. il y a une session de devis. En quoi est-elle, en principe, différente d'une séance de négociation ? Il est logique de supposer qu'il est possible d'effectuer des transactions pendant la seconde. Et si nous ne pouvons pas négocier pendant la première session (de cotation), alors pourquoi les cotations changent-elles ? Les cotes changent à cause, excusez-moi pour cette interprétation, du "déséquilibre de l'offre et de la demande".

3. Supposons que nous ayons reçu un Tick sur une paire de devises. Dans le même événement, nous essayons de "voir" l'état d'une autre paire. Où est la garantie que le dernier devis établi pour l'autre paire est toujours valable ? Quelle est la durée de vie d'un devis ? L'explication la plus rationnelle est la vérification de la dernière cotation avec la vérification simultanée du volume des lots sur le marché. C'est à dire que comme je le vois : N devis de eurusd est reçu. Elle n'est pas gratuite, mais une option est placée à cette cotation pour un certain volume. Ceux qui veulent acheter/vendre s'arrachent le gâteau. À un moment donné, il (le gâteau) se termine et cette citation "cesse de vivre". Ensuite, le terminal donne l'offre suivante (moins intéressante). Et s'il n'y a pas de cotation du tout (personne ne veut vendre/acheter de la monnaie) ? Alors le prix est égal à zéro ?

Quoi qu'il en soit, je ne suis pas un expert en bourse/forex.

Je serais reconnaissant si quelqu'un pouvait me donner une réponse détaillée aux questions posées. Comment cela se passe-t-il dans la réalité, et comment ces situations sont-elles représentées dans le terminal MT5 ?

Traitons-la point par point. Un conseiller expert est multidevise, il doit donc se comporter en conséquence.

1. Excluons le principal problème possible pour obtenir le prix 0 - la liste des symboles qui sont censés être négociés a été sélectionnée de manière sélective (c'est-à-dire que vous n'avez pas à vous soucier de la disponibilité des symboles nécessaires dans MarketWatch) ?

2. Concernant les sessions de négociation et de cotation, le commentaire a déjà été donné par les développeurs (en particulier, Rashid Umarov l'a commenté ici). Une situation où il y a une cotation, mais où vous ne pouvez pas négocier - c'est tout à fait normal (surtout pour le marché boursier). De même, personne ne garantit que les cotations seront mises à jour au cours d'une session de négociation. 3.

3. sur le verre - et où trouver le verre (et surtout, que mettre dedans) sur le marché du Forex ? Pour les questions, les réponses sont les suivantes (si tout va bien et qu'il y a une connexion au serveur) :

(a) Le "Last Quote" (information sur le dernier tick) est valable à partir du moment où un tick se produit jusqu'à ce qu'un nouveau tick apparaisse. Dans le terminal, l'heure de la dernière cotation peut être consultée dans l'"aperçu du marché".

b) Si vous recueillez des informations sur les ticks uniquement dans le gestionnaire OnTick() d'un conseiller expert multidevises, personne ne peut garantir qu'entre les ticks de la paire principale, il n'y aura pas une douzaine de ticks d'autres paires. Car selon la paire et l'activité de trading sur celle-ci, l'intervalle entre les ticks peut passer d'une fraction de seconde à plusieurs minutes.

Bien sûr, pour le marché Forex (en particulier pour l'EURUSD), ce n'est pas très essentiel, mais il faut s'en souvenir et en tenir compte dans la logique du Conseiller Expert.

c) Vous pouvez déterminer par programme l'heure de la dernière cotation en analysant la structure de MqlTick et en comparant l'heure de la dernière cotation avec une certaine valeur, vous pouvez facilement déterminer la pertinence d'une cotation.

struct MqlTick
  {
   datetime     time;          // Время последнего обновления цен
   double       bid;        // Текущая цена Bid
   double       ask;        // Текущая цена Ask
   double       last;       // Текущая цена последней сделки (Last)
   ulong        volume;     // Объем для текущей цены Last
  };

d) Comme je l'ai déjà mentionné plus haut, vous devez surveiller la connexion avec le serveur et, si possible, vérifier/recevoir les cotations non seulement dans OnTick(), mais aussi dans OnTimer().

 

Faisons l'inverse. Dans quelles circonstances le prix (bid/ask) peut-il prendre des valeurs nulles dans le terminal ?

Puis vient la deuxième question. Eh bien, nous avons découvert que la dernière cotation pour ce symbole a été reçue il y a 2 secondes/minutes/heure. La séance de négociation n'a pas été clôturée. Comment éviter l'erreur "pas de prix" ?

Документация по MQL5: Получение рыночной информации / SymbolInfoSessionQuote
Документация по MQL5: Получение рыночной информации / SymbolInfoSessionQuote
  • www.mql5.com
Получение рыночной информации / SymbolInfoSessionQuote - Документация по MQL5
 
voix_kas:

Faisons l'inverse. Dans quelles circonstances le prix (bid/ask) peut-il prendre des valeurs nulles dans le terminal ?

Puis vient la deuxième question. Eh bien, nous avons découvert que la dernière cotation pour ce symbole a été reçue il y a 2 secondes/minutes/heure. La séance de négociation n'a pas été clôturée. Comment ne pas obtenir l'erreur "no price" ?

Avez-vous, lorsque vous avez reçu un prix nul, demandé GetLastError ?
 
stringo:
Lorsque vous avez obtenu le prix zéro, avez-vous demandé GetLastError ?

Code d'erreur : 4756. Vous pouvez le voir dans la capture d'écran.

En outre. Voici la même erreur reçue. En même temps, le marketwatch montre la présence du prix et l'outil est synchronisé dans les logs.

 
voix_kas:

Code d'erreur : 4756. Vous pouvez le voir dans la capture d'écran.

En outre. Voici la même erreur reçue. Alors que la place de marché indique la disponibilité des prix et que l'outil est synchronisé dans les journaux.

Vous avez besoin d'un code d'erreur après "no price...", et non après "failed...".
 
uncleVic:
Vous avez besoin du code d'erreur après "no price...", et non après "failed...".
  ...
  // Формирование торгового приказа.
  MqlTradeResult TradeResult;
  MqlTradeRequest TradeRequest;

  TradeRequest.action = TRADE_ACTION_DEAL;
  TradeRequest.symbol = Instrumet;
  TradeRequest.volume = NormalizeDouble(Volume, 8);
  TradeRequest.price = SymbolInfoDouble(Instrumet, SYMBOL_ASK);
  TradeRequest.sl = 0;
  TradeRequest.tp = 0;
  TradeRequest.deviation = Deviation;
  TradeRequest.type = ORDER_TYPE_BUY;
  TradeRequest.type_filling = TypeFilling;

  // Отправка торгового приказа.
  ResetLastError();
  if (!IsTradeAllowed()) return;
  if (OrderSend(TradeRequest, TradeResult)) TradeResultAnalyse("Buy.OrderSend", TradeResult.retcode);
  else Print("Buy.OrderSend = false! Код ошибки: \'", _LastError, "\'.");

Et comment puis-je attraper le code d'erreur au point que vous indiquez ? J'enregistre l'erreur sur la dernière ligne du code ci-dessus.

Cette erreur n'apparaît pas si le terme suivant est ajouté juste avant ce code :

if(!NormalizeDouble(SymbolInfoDouble(Instrumet, SYMBOL_ASK), 8)) return;