Erreurs, bugs, questions - page 2237

 
Stanislav Korotky:
L'indicateur FILE_SHARE_WRITE semble fonctionner dans cette combinaison, mais une autre question se pose : quel est l'intérêt de cette écriture particulière ? Logiquement, si nous activons la séparation en écriture, elle devrait être ajoutée au drapeau d'écriture :

C'est exactement ce que j'ai essayé, et ça donne aussi une erreur.

J'ai allumé MetaTrader, retrouvé mon ancien exemple, ajouté FILE_SHARE_WRITE (bien qu'il ne soit pas nécessaire ici) - le résultat n'a pas changé... Peut-être pour une autre raison, ça n'a pas marché pour moi.
 

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

La plateforme de trading MetaTrader 5 est mise à la disposition des clients d'AMP Futures.

fxsaber, 2018.07.23 22:34

Exemple où il est impossible de passer un ordre au marché, même lorsque l'offre et la demande sont un multiple de la taille du téléscripteur.

Ici, le dernier prix n'est pas un multiple de TickSize. Cela n'a rien à voir avec les ordres de marché, mais OrderCheck continue de poser des problèmes - il ne permet pas de passer un ordre de marché.

 
fxsaber:

Certains caractères ont un délai d'attente et d'autres non. Comment puis-je connaître l'âge maximum de la coche qui peut encore être acceptée par OrderSend (pas de [No price]) ?

Il arrive que le dernier tick reçu il y a 16 secondes ne soit pas perçu comme pertinent pour OrderSend. Ce doit être un bug après tout.

 
A100:
J'ai activé MetaTrader, retrouvé mon ancien exemple, ajouté FILE_SHARE_WRITE (alors que je n'en avais pas besoin à cet endroit) - le résultat n'a pas changé... Peut-être pour une autre raison, ça n'a pas marché pour moi.

Vous pouvez également placer le fichier en mémoire (MemMap) et y travailler via un sémaphore, puis transférer les données dans le fichier via un sémaphore.

Au fait, cette méthode vous donnera un avantage considérable en termes de vitesse.

 
Konstantin:

Vous pouvez également placer le fichier en mémoire (MemMap) et y travailler via un sémaphore, puis transférer les données dans le fichier via un sémaphore.

Au fait, cette méthode vous donnera un avantage considérable en termes de vitesse.

Le problème est que j'ai un petit fichier de configuration et que chaque EA doit le lire une fois avant de commencer à travailler - l'opération la plus simple - voir l'exemple sur les liens ci-dessus... et vous dites sémaphores)
 
A100:
Le fait est que j'avais un petit fichier de configuration et que chaque Conseiller Expert n'avait à le lire qu'une seule fois avant de démarrer - l'opération la plus simple - voir l'exemple dans les liens ci-dessus... et vous dites sémaphores)

Je dis que l'écriture sur ce problème pour plusieurs pages, et étant donné que le problème avec la barbe et le fixer développeurs apparemment ne peuvent pas ou ne veulent pas parce que Je vous ai proposé l'un d'entre eux, si vous ne l'aimez pas utilisez winapi quel est le problème ;)) mais c'est mieux que d'écrire la même chose sans rien faire, vous pouvez utiliser les mêmes sémaphores pour lire un fichier physique, le même signal de sémaphore qui est occupé et doit attendre !

 
Stanislav Korotky:

Sur ce script simple, exécuté d'abord avec writing = true et ensuite sur un autre graphique avec writing = false, j'obtiens une erreur.


#property script_show_inputs

input bool writing = false;

int OnStart()
{
  int handle = FileOpen("xyz.foo", FILE_READ|FILE_BIN|FILE_SHARE_READ|(writing?FILE_WRITE:0));
  if(handle == INVALID_HANDLE)
  {
    Print("FileOpen failed: ", GetLastError());
    return INIT_FAILED;
  }
  
  if(writing) FileWriteInteger(handle, 0);
  
  Print("handle=", handle);
  
  while(!IsStopped())
  {
    Sleep(1000);
  }

  Print("Closing");
  FileClose(handle);

  return 0;
}

L'ouvreur pour la lecture n'a pas le drapeau FILE_SHARE_WRITE (autoriser l'écriture), car il y a un écrivain.

Il s'agit d'une limitation du système (WinAPI).

Voici les drapeaux corrects avec lesquels votre code fonctionnera :

int handle = FileOpen("xyz.foo", FILE_READ|FILE_BIN|FILE_SHARE_READ|(writing?FILE_WRITE:FILE_SHARE_WRITE));
 
Ilyas:

Voici les drapeaux corrects pour que votre code fonctionne :

Veuillez corriger FileLoad

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

Bugs, bugs, questions

fxsaber, 2018.07.10 19:26

Erreur dans FileLoad. Si, avec l'indicateur FILE_COMMON, deux agents locaux essaient de lire des données via FileLoad, l'un des agents se plante.

Il est possible de définir les drapeaux appropriés dans FileOpen, mais pas dans FileLoad. Par conséquent, veuillez autoriser l'accès au fichier via FileLoad si l'autre FileLoad le lit.

 
TheXpert:

Pourquoi ? )

Parce qu'il n'y a pas de zéro dans la liste des drapeaux

Identifiant

Valeur

Description

FICHIER_LIRE

1

Le fichier est ouvert à la lecture. Cet indicateur est utilisé lors de l'ouverture d'un fichier (FileOpen()). FILE_WRITE et/ou FILE_READ doivent être définis lors de l'ouverture d'un fichier.

FILE_WRITE

2

Le fichier est ouvert à l'écriture. Cet indicateur est utilisé pour ouvrir un fichier (FileOpen()). Lorsqu'un fichier est ouvert, les drapeaux FILE_WRITE et/ou FILE_READ doivent être activés.

FILE_BIN

4

Mode lecture-écriture binaire (pas de conversion de ou vers une chaîne de caractères). Cet indicateur est utilisé pour ouvrir les fichiers (FileOpen())

FILE_CSV

8

Fichier de type csv (tous les éléments écrits sont convertis en une chaîne de caractères du type approprié, unicode ou ansi, et séparés par un séparateur). Cet indicateur est utilisé lors de l'ouverture d'un fichier (FileOpen())

FILE_TXT

16

Fichier texte simple (identique au csv, mais sans séparateur). Cet indicateur est utilisé lors de l'ouverture des fichiers (FileOpen())

FILE_ANSI

32

Chaînes de caractères ANSI (caractères à un octet). Cet indicateur est utilisé lors de l'ouverture de fichiers (FileOpen())

FILE_UNICODE

64

Chaînes UNICODE (caractères à deux octets). Cet indicateur est utilisé lors de l'ouverture de fichiers (FileOpen())

FICHIER_PARTAGÉ_LECTURE

128

Accès en lecture partagé par plusieurs programmes. Cet indicateur est utilisé lors de l'ouverture d'un fichier (FileOpen()), mais ne remplace pas la nécessité de FILE_WRITE et/ou FILE_READ lors de l'ouverture d'un fichier.

FICHIER_PARTAGÉ_ÉCRIT

256

Ce drapeau est utilisé pour le partage de l'accès en écriture par plusieurs programmes. Cet indicateur est utilisé pour ouvrir des fichiers (FileOpen()), mais ne remplace pas FILE_WRITE et/ou FILE_READ lors de l'ouverture d'un fichier.

FILE_REWRITE

512

Le fichier peut être écrasé par FileCopy() et FileMove(). Le fichier doit exister ou être accessible en écriture. Sinon, le fichier ne sera pas ouvert

FICHIER_COMMON

4096

Emplacement du fichier dans le dossier partagé de tous les terminaux clients\Terminal\Common\Files. Cet indicateur est utilisé pour ouvrir des fichiers (FileOpen()), copier des fichiers (FileCopy(), FileMove()) et vérifier si les fichiers existent (FileIsExist()).


Et si les développeurs corrigent tous leurs défauts, beaucoup de gens ne l'aimeront pas. Plus de la moitié du code cessera de fonctionner.

Документация по MQL5: Константы, перечисления и структуры / Константы ввода/вывода / Флаги открытия файлов
Документация по MQL5: Константы, перечисления и структуры / Константы ввода/вывода / Флаги открытия файлов
  • www.mql5.com
Файл открывается для чтения. Флаг используется при открытии файлов (FileOpen()). При открытии файла обязательно должен быть указан флаг FILE_WRITE и/или флаг FILE_READ Файл открывается для записи. Флаг используется при открытии файлов (FileOpen()). При открытии файла обязательно должен быть указан флаг FILE_WRITE и/или флаг FILE_READ Файл...
 
fxsaber:

Il arrive que le dernier tick reçu il y a 16 secondes ne soit pas considéré comme pertinent pour OrderSend. Ce doit être un bug après tout.

Ce bug

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

Bibliothèques : MT4Orders

fxsaber, 2018.07.24 09:46

Mise à jour du script dans l'application. On trouve rapidement, par exemple, des problèmes comme celui-ci
2018.07.24 10:24:19.177 Trades  '35247942': market buy 0.01 USDHKD
2018.07.24 10:24:19.246 Trades  '35247942': failed market buy 0.01 USDHKD [No prices]
2018.07.24 10:24:19.246 Trades  '35247942': buy limit 0.01 USDHKD at 7.83618
2018.07.24 10:24:19.315 Trades  '35247942': failed buy limit 0.01 USDHKD at 7.83618 [No prices]
2018.07.24 10:24:19.316 Trades  '35247942': buy stop 0.01 USDHKD at 7.85618
2018.07.24 10:24:19.384 Trades  '35247942': failed buy stop 0.01 USDHKD at 7.85618 [No prices]

En une minute environ, vous pouvez reproduire avec ce script sur ForexTimeFXTM-Demo01 si vous activez tous les symboles dans Market Overview avant de l'exécuter.