Erreurs, bugs, questions - page 662

 

Bonjour !

Veuillez vérifier l'exactitude de la fonction qui doit déterminer si une position ouverte est "gelée".

En particulier, n'en ai-je pas fait trop avec Ask/Bid ?

bool IsPositionFrozen(const string Symbol) {
  if (!PositionSelect(Symbol)) return false;
  bool FreezTP = true, FreezSL = true;
  double FreezLevel = SymbolInfoInteger(Symbol, SYMBOL_TRADE_FREEZE_LEVEL) * SymbolInfoDouble(Symbol, SYMBOL_POINT);
  switch (PositionGetInteger(POSITION_TYPE)) {
    case POSITION_TYPE_BUY:
        if ((NormalizeDouble(PositionGetDouble(POSITION_TP), (int)SymbolInfoInteger(Symbol, SYMBOL_DIGITS)) == 0) ||
            (PositionGetDouble(POSITION_TP) - SymbolInfoDouble(Symbol, SYMBOL_BID) > FreezLevel))
          FreezTP = false;
        if ((NormalizeDouble(PositionGetDouble(POSITION_SL), (int)SymbolInfoInteger(Symbol, SYMBOL_DIGITS)) == 0) ||
            (SymbolInfoDouble(Symbol, SYMBOL_BID) - PositionGetDouble(POSITION_SL) > FreezLevel))
          FreezSL = false;
        break;
      case POSITION_TYPE_SELL:
        if ((NormalizeDouble(PositionGetDouble(POSITION_TP), (int)SymbolInfoInteger(Symbol, SYMBOL_DIGITS)) == 0) ||
            (SymbolInfoDouble(Symbol, SYMBOL_ASK) - PositionGetDouble(POSITION_TP) > FreezLevel))
          FreezTP = false;
        if ((NormalizeDouble(PositionGetDouble(POSITION_SL), (int)SymbolInfoInteger(Symbol, SYMBOL_DIGITS)) == 0) ||
            (PositionGetDouble(POSITION_SL) - SymbolInfoDouble(Symbol, SYMBOL_ASK) > FreezLevel))
          FreezSL = false;
      break;
    default: return false;
  }
  if (FreezTP || FreezSL) return true;
  else return false;
}
 
tol64:

Non, tout a fonctionné correctement sur le serveur ( compte de démonstration MQ). C'est-à-dire que les arrêts ont été déclenchés lorsque je n'étais pas connecté. Mais, quand je me suis connecté, le marché était déjà fermé. Dans la fenêtre Market Watch, l'heure du dernier tick avant la coupure de ma connexion a été enregistrée. Lorsque j'ai demandé l'historique des transactions en spécifiant TimeCurrent() comme deuxième valeur, je n'ai pas obtenu l'historique complet. Bien que l'aide pour TimeCurrent() indique que :

C'est-à-dire que je comprends que cette fonction doit renvoyer la valeur de la dernière arrivée de la cotation d'un des instruments dans la fenêtre Market Watch depuis le serveur, même si la connexion a été interrompue et que la connexion a eu lieu alors que le marché était déjà fermé. Dans mon cas, cela ne s'est pas produit et je n'ai pas eu toute l'histoire. Je ne sais pas si le Market Watch doit synchroniser l'heure avec le serveur lorsque le marché est fermé ou non, cela n'est pas mentionné dans l'aide.

Dans ce cas, si vous avez besoin d'un historique complet, vous pouvez simplement ajouter un jour supplémentaire et vous aurez la garantie que toutes les offres seront choisies. :)

Dans le testeur, il y a un bug avec la fonction HistoryDealsTotal(), et il apparaît dans le mode Visualisation. Le temps y est correctement modélisé. Une simple béquille peut aider dans certains cas.


Oui, je me souviens de l'essentiel, qu'il y a eu une rupture de communication. Il semble que le terminal ne commence à vérifier et à télécharger l'historique supplémentaire qu'à la réception du tick pour un instrument et il n'y a pas de tick le week-end. Bien sûr, vous pouvez mettre à jour les graphiques manuellement, et alors la dernière heure du serveur sera mise à jour. Et si vous êtes en mode automatique, vous devez réparer la rupture de la connexion et, si elle est rétablie pendant le week-end, lancer la fonction de vérification et de téléchargement de l'historique, CheckLoadHistory(). Utilisez un minuteur.

En général, des choses "étonnantes" arrivent parfois au terminal. Voici ce qui s'est passé hier, l'ordinateur portable fonctionnait par téléphone comme un modem. L'Expert Advisor multidevises fonctionnait en mode tracking (autotrading désactivé). Je suis parti 15 minutes avec le téléphone, je suis revenu, je me suis reconnecté. Le terminal a rétabli la connexion avec le serveur. Il semblait que je pouvais facilement télécharger les citations manquées. Mais le terminal a commencé à télécharger furieusement l'historique - qu'y a-t-il d'autre à faire ? Tout a gelé : vue d'ensemble du marché, onglet de négociation, graphiques. Le téléphone ne supporte pas la 3G, il fonctionne via EDGE, donc la procédure a été retardée. Lorsqu'il a atteint 20 Mo, j'ai décidé de vérifier si je pouvais échanger quelque chose manuellement dans une telle condition. J'ai essayé de fermer la position, j'ai eu un refus dû à un manque de connexion et c'est là que le téléchargement s'est arrêté. Après la reconnexion, tout s'est bien passé. Voici un extrait du journal du terminal :

OK 0 Réseau 09:45:09 '709704' : autorisé sur MetaQuotes-Demo via Access Point Singapore
IR 0 Network 09:45:09 '709704' : autorisation précédente réussie effectuée à partir de 77.35.11.181 le 2012.03.04 06:10:12
KP 0 Network 09:45:12 '709704' : terminal synchronisé avec MetaQuotes Software Corp.
GI 0 Experts 09:45 :12 expert Fractals_ (EURUSD,H1) chargé avec succès
OI 0 Trades 10:43:29 '709704' : deal #8671794 sell 0.10 GBPJPY à 129.268 fait (basé sur la commande #9494984) // ce trade a été exécuté par un Expert Advisor travaillant sur un autre ordinateur
RM 0 Trades 10 :51:22 '709704' : transaction #8671842 vendre 0.10 USDJPY à 81.586 fait (basé sur la commande #9495037)// De même
KL 1 Réseau 12 :00:38 '709704' : connexion à MetaQuotes-Demo perdue// Parti
IE 0 Réseau 12 :16:15 '709704' : Autorisé sur MetaQuotes-Demo via Access Point Hong Kong// Venu
IS 0 Réseau 12 :16:15 '709704' : autorisation précédente réussie à partir de 80.83.239.67 le 2012.03.04 23:45:03
OS 0 Network 12:16:18 '709704' : terminal synchronisé avec MetaQuotes Software Corp.// Communication restaurée
IQ 0 Trades 12 :18:12 '709704' : transaction #8672388 vendre 0.10 GBPCHF à 1.44540 fait (basé sur la commande #9495596) // ce trade a été exécuté par un Expert Advisor travaillant sur un autre ordinateur
DF 0 Trades 12 :35:37 '709704' : achat instantané 0.10 EURGBP à 0.83422 // J'ai essayé de fermer la position manuellement, avant que l'historique ne soit téléchargé
IN 2 Trades 12 :35:44 '709704' : échec de l'achat instantané 0.10 EURGBP à 0.83422 [Demande rejetée en raison de l'absence de connexion réseau] // Refusé
JP 1 Network 12 :35:44 '709704' : connexion à MetaQuotes-Demo perdue
EI 0 Network 12 :36:00 '709704' : autorisé sur MetaQuotes-Demo via le point d'accès Hong Kong
IG 0 Network 12:36:00 '709704' : autorisation précédente réussie effectuée depuis 80.83.239.67 sur 2012.03.05 02:16:12
PG 0 Network 12:36:08 '709704' : synchronisation du terminal avec MetaQuotes Software Corp.// Communication rétablie, poursuite du fonctionnement normal
MS

 
Le journal montre qu'avant l'interruption, le terminal fonctionnait avec un serveur, mais qu'après l'interruption, il s'est connecté à un autre serveur et a commencé à télécharger l'historique. On peut en conclure que l'historique entre les différents serveurs n'est pas synchronisé.
 
Valmars:

Oui, je me souviens de l'essentiel, il y a eu une rupture de communication. Il semble que le terminal ne lance la réconciliation et le téléchargement de l'historique que lorsqu'un tick est reçu pour l'instrument, et il n'y a pas de ticks le week-end. Bien sûr, vous pouvez mettre à jour les graphiques manuellement, et alors la dernière heure du serveur sera mise à jour. Et si vous voulez utiliser le mode automatique, vous devez alors réparer la rupture de connexion et, si elle est rétablie pendant le week-end, lancer la vérification et télécharger l'historique, fonction CheckLoadHistory(). Utilisez un minuteur.

...

Oui, il semble qu'il y ait une mise à jour du temps lorsque le tic-tac arrive, mais l'historique était déjà là et il pouvait être visualisé. Merci pour les options de solution. Je vais essayer de reproduire à nouveau une situation similaire avant le week-end pour essayer les options de solution.
 

Connecté au serveur AlpariFS-MT5 pour tester l'Expert Advisor dans différentes conditions. Le type d'exécution était initialement EXECUTION_MARKET - Exécution des ordres par marché. J'ai réussi à ouvrir/fermer des positions en utilisant mes panneaux de négociation. J'ai ensuite découvert que la profondeur de marché était disponible dans le menu contextuel du graphique. Je l'ai ouvert et j'ai découvert qu'il était possible d'effectuer des opérations d'achat/vente. A titre de test, j'ai acheté une position et je l'ai fermée dans la profondeur du marché. Après cela, le type d'exécution du compte a été changé en EXECUTION_EXCHANGE. Ceci est clarifié dans MQL5 et il n'y a que deux options dans la liste déroulante de la fenêtre d'ordre (F9) : Exécution d'échange et Ordre en attente. Essayer de se connecter à nouveau ou recharger le terminal n'a pas résolu le problème. Et maintenant le type d'exécution sur le compte de démonstration reste toujours EXECUTION_EXCHANGE.

J'ai contacté le service d'assistance d'Alpari, décrit le problème et apporté des précisions :

//---

Anatoly | 17:55
Ai-je bien compris que sur les comptes de démonstration pour MT5, à l'heure actuelle, l'option EXECUTION_MARKET doit être en place ?

Sergey | 17:56
Oui, c'est exact.

//---

On dirait que c'est un bug.

 

Certains identifiants ne sont pas décrits dans l'aide :

ORDER_FILLING_FOK, ORDER_FILLING_IOC et ORDER_FILLING_RETURN sont présents maisORDER_FILLING_AON et ORDER_FILLING_CANCEL ne le sont pas, bien qu'ils mènent tous à la même liste avec une description.

 
tol64: etORDER_FILLING_AON et ORDER_FILLING_CANCEL ne le sont pas, bien qu'ils mènent tous à la même liste avec description.
Ils sont déjà supprimés, nous les supprimerons également des index.
 
Rosh:
Ils ont déjà été supprimés, nous les supprimerons également des indices.

Merci.

//---

Cette question s'est posée. Le serveur du concours est-il maintenant disponible pour les tests avec les mêmes restrictions que sur le concours(Volume Limit 15 lot / Volume Max 5 lot) ? J'ai essayé de me connecter à l'ancien compte, mais il n'y a pas de connexion au serveur. J'ai cherché sur tous les serveurs où Metatrader 5 est disponible pour le trading, mais je n'ai trouvé lalimite de volume nulle part, et j'ai besoin de la tester. Ou suffira-t-il de répondre à la question, en utilisant un exemple avec des valeurs de concours :

J'ai une position ouverte et son volume est de 14 lots. Si j'essaie de placer un ordre en attente avec un volume de 2 lots, la demande sera rejetée ? Ou bien, l'ordre sera placé avec la même taille, mais il sera partiellement exécuté, c'est-à-dire 1 lot, à condition que la position reste de la même taille(14 lots).

Et vice versa. Nous avons un ordre en attente de 14 lots. Si j'essaie d'ouvrir une position avec 2 lots, la demande sera refusée ?

 

Je vais tenter ma chance ici, parce qu'il y a du silence sur Kettles...

Veuillez préciser: https://www.mql5.com/ru/forum/3775/page113#comment_160125. Je suis également intéressé par le logiciel qui effectue les calculs requis.

 

Bon après-midi.

Comment puis-je accéder à la valeur de l'indicateur iADX intégré ? C'est-à-dire à sa valeur il y a un nombre donné de barres ? Dans mql4, cela se fait en réglant le paramètre shift.

Merci déjà.

Документация по MQL5: Технические индикаторы / iADX
Документация по MQL5: Технические индикаторы / iADX
  • www.mql5.com
Технические индикаторы / iADX - Документация по MQL5
Raison: