Nouveau terminal client MetaTrader 4 build 402 - page 6

 
dmmikl86:
C'est parce que la valeur du pip est différente pour les différentes paires...

Je pense que la valeur du pip est redondante dans le mode d'affichage "profit en pips".

 
olyakish:

Je pense que la valeur du point est redondante dans le mode d'affichage "profit en pips".

c'est un autre problème éternel de MT)
 

Glitches....

1) Si vous supprimez les instruments inutiles de Market Watch et que vous en ajoutez à nouveau, vous obtenez une chose intéressante.

Cliquez avec le bouton droit de la souris sur un instrument et sélectionnez "Chart Window" pour ouvrir un graphique.

Cela ouvrira un graphique d'un instrument différent de celui que vous avez sélectionné ! !!

Pour que cette erreur se produise, vous devez sélectionner un outil parmi ceux que vous venez d'ajouter. (voir les captures d'écran pic1, pic2, pic3)

2) dans ma capture d'écran, vous pouvez voir que l'instrument USDCHF est marqué comme sélectionné dans la fenêtre "Symboles", bien qu'il ne soit pas réellement dans le "Market Watch". (pic4)

Le premier problème est peut-être une conséquence du second, car la numérotation des instruments dans le Market Watch est erronée.

J'ai un très mauvais Internet, c'est pourquoi toutes les captures d'écran sont dans les archives.

Voici le lienhttp://www.sendspace.com/file/tbav73

 
dimonsky:

Glitches....

1) Si vous supprimez les instruments inutiles de Market Watch et que vous en ajoutez à nouveau, vous obtenez une chose intéressante.

Cliquez avec le bouton droit de la souris sur un instrument et sélectionnez "Chart Window" pour ouvrir un graphique.

Cela ouvrira un graphique d'un outil autre que celui que vous avez sélectionné ! !!

J'ai aussi remarqué ça dans la version 401.
 

Aujourd'hui (ou plutôt hier) dans la matinée, j'ai eu un étrange problème dans MT4 - OrderSelect n'a pas trouvé un ordre par numéro de ticket dans un conseiller expert.

Deux ordres en attente sont placés dans l'EA - BUY_STOP et SELL_STOP, sur des côtés opposés du prix actuel. Les tickets de ces commandes sont stockés dans t1 et t2. Le code où l'erreur s'est produite, comme indiqué ci-dessous, fait ce qui suit : lorsque l'un de ces ordres en attente est ouvert, le second est supprimé et l'ordre en attente suivant avec le numéro t3 est placé à la place. S'il y a eu une erreur lorsque t1 et t2 ont été placés à l'origine, le ticket erroné ne devrait pas figurer sur la liste des commandes. C'est ce qui est vérifié avec if (OrderSelect ...) et, en cas d'erreur, nous écrivons un message dans le journal et quittons la série en utilisant restart().

Aujourd'hui, t1 a ouvert à 6h30. L'ordre t2 a été immédiatement supprimé par le conseiller expert (il a été supprimé du marché, mais il est resté dans l'historique - "annulé", j'ai vérifié). Après cela, t3 a été placé. Ces événements figurent tous dans les journaux de MT et EA. Ensuite, le contrôle "OrderSelect(t2, SELECT_BY_TICKET)" renvoie FALSE et la série s'arrête avec l'erreur "Unknown order t2". C'est étrange, car t2 a été défini et supprimé sans erreur et est resté dans l'historique. Le mode historique dans MT est "Tout l'historique". Comment OrderSelect a-t-il pu ne pas le trouver ?

L'ordinateur est autonome, utilisé uniquement pour le trading, rien d'autre. Personne n'y touche sauf moi. La charge du CPU est en moyenne de 10%. La mémoire, l'espace disque, etc. sont suffisants.
La version de MT4 est 402. Depuis plusieurs mois, le conseiller expert fonctionne dans différentes variations en temps réel sur un compte de démonstration dans un MT parallèle à trois paires différentes (sur trois graphiques). Il n'y avait aucun problème avec cette partie du code jusqu'à ce matin. Ensuite, tout s'est déroulé sans problème l'après-midi et le soir pour les autres paires sur la même EA. C'est-à-dire que l'erreur ne peut pas être reproduite à volonté.

Question : comment cela a-t-il pu se produire ? Est-ce un problème dans MT ou quelque chose que je n'ai pas pris en compte dans le code ?

Ce code utilise les fonctions OrderDeleteX et OrderSendX - des enveloppes pour les fonctions standard OrderDelete et OrderSend, qui ajoutent des vérifications de l'absence d'occupation d'un fil commercial et enregistrent des événements tels que "Suppression de l'ordre ..." et "Envoi de l'ordre ..." dans le journal de l'EA.
J'ai supprimé les calculs de prix pour rendre le code plus simple et plus clair.

if (OrderSelect(t1, SELECT_BY_TICKET)) {
  if (OrderType() == OP_BUY) {
    Print("--------------------------------------------------");
    if (t2 > 0) OrderDeleteX(t2);
    // Расчёты цены, стоплосса и тейкпрофита
    // .....
    t3 = OrderSendX(Symbol(), OP_SELLSTOP, 0.02, Price1, slip, StopLoss, TakeProfit, "step 2", Magic, 0, ColorOrderSendSell);
  }   
} else {
  Print("ERROR: Unknown order t1 in step 1");
  restart(3);
}
 

if (OrderSelect(t2, SELECT_BY_TICKET)) {     
  if (OrderType() == OP_SELL) {
    Print("--------------------------------------------------");
    if (t1 > 0) OrderDeleteX(t1);
    // Расчёты цены, стоплосса и тейкпрофита
    // .....
    t3 = OrderSendX(Symbol(), OP_BUYSTOP, 0.02, Price1, slip, StopLoss, TakeProfit, "step 2", Magic, 0, ColorOrderSendBuy);
  }
} else {
  Print("ERROR: Unknown order t2 in step 1");
  restart(4);
}


Numéros d'ordre dans les variables :
t2 = 119732180
t3 = 119733656

Лог эксперта:
06:30:43 CheMurom v3.4.real EURUSD,H1: --------------------------------------------------
06:30:43 CheMurom v3.4.real EURUSD,H1: Deleting order #119732180; attempt number: 1
06:30:43 CheMurom v3.4.real EURUSD,H1: delete #119732180 sell stop 0.01 EURUSD at 1.46432 sl: 1.47032 tp: 1.43432 ok
06:30:43 CheMurom v3.4.real EURUSD,H1: Sending order cmd=SELL_STOP, lot=0.02, price=1.46032, slip=3, sl=1.46932, tp=1.44082; attempt number: 1
06:30:44 CheMurom v3.4.real EURUSD,H1: open #119733656 sell stop 0.02 EURUSD at 1.46032 sl: 1.46932 tp: 1.44082 ok
06:30:44 CheMurom v3.4.real EURUSD,H1: ERROR: Unknown t2 in step 1

Лог терминала:
06:30:43 '2871084': delete pending order #119732180 sell stop 0.01 EURUSD at 1.46432 sl: 1.47032 tp: 1.43432
06:30:44 '2871084': request was accepted by server
06:30:44 '2871084': request in process
06:30:44 '2871084': pending order #119732180 was deleted
06:30:44 '2871084': pending order sell stop 0.02 EURUSD at 1.46032 sl: 1.46932 tp: 1.44082
06:30:44 '2871084': request was accepted by server
06:30:45 '2871084': request in process
06:30:45 '2871084': order was opened : #119733656 sell stop 0.02 EURUSD at 1.46032 sl: 1.46932 tp: 1.44082
 

Je ne trouve aucun ordre. Nous pouvons voir dans le rapport DC que la commande 67930924 était ouverte...

Ce sont des transactions fermées dans l'historique du compte depuis le 08.06.11. Comme nous pouvons le voir, cet ordre n'est pas là.

Il doit donc s'agir d'un commerce ouvert. L'image ci-dessous, des échanges ouverts.

Mais il n'est pas là non plus. Je me demande quel rapport sera envoyé demain par la DC, mais je veux entendre la version des développeurs de logiciels, comment cela peut être.

Et une dernière chose, peut-être que ce n'est pas important, mais ma date n'est pas enregistrée et je n'ai aucune information à ce sujet.


 
voinG:

Je ne trouve aucun ordre. Nous pouvons voir dans le rapport DC que la commande 67930924 était ouverte...

Ce sont des transactions fermées dans l'historique du compte depuis le 08.06.11. Comme nous pouvons le voir, cet ordre n'est pas là.

Il doit donc s'agir d'un commerce ouvert. L'image ci-dessous, des échanges ouverts.

Mais il n'est pas là non plus. Je me demande quel rapport sera envoyé demain par la DC, mais je veux entendre la version des développeurs de logiciels, comment cela peut être.

Et une dernière chose, peut-être que ce n'est pas important, mais ma date n'est pas enregistrée et je n'ai aucune information à ce sujet.



C'est là. J'ai ouvert "whole story" et c'est visible dans cette version.
 

Dans la continuité du thème "OrderSelect n'a pas trouvé de commande par numéro de ticket".

Ce matin, la même erreur s'est produite dans le même Expert Advisor sur une autre paire. L'ordre en attente t2=#119899844 a été placé avec succès, puis il a été supprimé avec succès également, après quoi l'ordre en attente t3=#119903758 a été placé, et après cela t2 n'a pas été trouvé par la fonction OrderSelect.

Entre l'erreur d'hier et celle d'aujourd'hui, le code donné dans mon message précédent dans l'Expert Advisor a fonctionné plusieurs fois sans erreur et les ordres supprimés ont été retrouvés sans problème.

Depuis plusieurs mois auparavant, le conseiller expert fonctionnait dans la version MT4 229. Rien de tel n'a été observé auparavant. Le week-end dernier, il y a 4 jours, je suis passé à la version 402. Je ne sais pas si les erreurs sont liées à la nouvelle version. Je ne peux pas revenir à l'ancienne version, car Alpari, où ce conseiller-expert est utilisé, a changé le fuseau horaire des cotations, et seule la version 402 reflète correctement ces changements (selon Alpari).

Les questions sont restées ouvertes :
Comment cela a-t-il pu se produire, pourquoi OrderSelect n'a-t-il pas trouvé la commande dans l'historique, alors que l'historique est affiché dans son intégralité, la commande perdue y est visible ? Est-ce un problème de MT ou est-ce que je manque quelque chose dans le code ?

Лог эксперта:
10:15:33 CheMurom v3.4.real EURCHF,H1: --------------------------------------------------
10:15:33 CheMurom v3.4.real EURCHF,H1: Deleting order #119899844; attempt number: 1
10:15:34 CheMurom v3.4.real EURCHF,H1: delete #119899844 sell stop 0.01 EURCHF at 1.22245 sl: 1.22945 tp: 1.19735 ok
10:15:34 CheMurom v3.4.real EURCHF,H1: Sending order cmd=SELL_STOP, lot=0.02, price=1.21745, slip=3, sl=1.22845, tp=1.20015; attempt number: 1
10:15:36 CheMurom v3.4.real EURCHF,H1: open #119903758 sell stop 0.02 EURCHF at 1.21745 sl: 1.22845 tp: 1.20015 ok
10:15:36 CheMurom v3.4.real EURCHF,H1: ERROR: Unknown t2 in step 1

Лог терминала:
10:15:35 '2871084': delete pending order #119899844 sell stop 0.01 EURCHF at 1.22245 sl: 1.22945 tp: 1.19735
10:15:35 '2871084': request was accepted by server
10:15:35 '2871084': request in process
10:15:36 '2871084': pending order #119899844 was deleted
10:15:36 '2871084': pending order sell stop 0.02 EURCHF at 1.21745 sl: 1.22845 tp: 1.20015
10:15:36 '2871084': request was accepted by server
10:15:36 '2871084': request in process
10:15:37 '2871084': order was opened : #119903758 sell stop 0.02 EURCHF at 1.21745 sl: 1.22845 tp: 1.20015
 
J'ai décrit le problème à Renate avec une capture d'écran, dans la version 399 ils l'ont supprimé, mais dans les versions 401 et 402 ce problème est réapparu, j'ai dû revenir à la version 399.
 

Il existe une DLL écrite en Delphi7. Il n'a qu'une seule fonction - vérifier s'il existe un fichier dans le chemin spécifié.

Voici son code.

library FileGDV;

uses
  SysUtils,
  Classes;

//{$R *.res}

function FileExists(s:pchar):boolean; StdCall;
begin
   result:=sysutils.fileexists(s);
end;

exports FileExists;

begin
end.

Rien de compliqué, rien de spécial, juste une fonction.

Voici le code de l'Expert Advisor qui utilise cette fonction :

if (FileExists(s))
      {
         handleM=FileOpen(fn,FILE_BIN|FILE_WRITE|FILE_READ);
         
      }
      else
      {
         Alert("File not found   "+s);         
         handleM=FileOpen(fn,FILE_BIN|FILE_WRITE);
         s="Time;;M1;M5;M15;M30;H1;H4;D1\n";
         FileWriteString(handleM,s,StringLen(s));
      } 

et voici le code du fichier d'en-tête

#import "FileGDV.dll"


bool FileExists(string s);

 
#import


Voici le code du fichier d'en-tête. S'il n'y a qu'un seul conseiller expert dans le terminal, tout fonctionne comme sur des roulettes.

Si j'en ai deux dans le terminal, dans des fenêtres différentes, et qu'ils appellent cette fonction, toutes les quelques heures, les deux EA cessent de fonctionner et des messages apparaissent dans le journal.

2011.06.09 14:33:57     gdv_e_MultiMACD_a_KSP_GBP_v082 GBPCHF,M5: expert stopped
2011.06.09 14:33:57     gdv_e_MultiMACD_a_KSP_GBP_v082 GBPCHF,M5: function 'FileExists' call from dll 'FileGDV.dll' critical error