Erreurs, bugs, questions - page 2233

 
Alexey Viktorov:

Pourquoi voudrais-je répéter un code erroné ???? Pourquoi voudrais-je enchaîner un fichier .eh inconnu à ? ??? ?

Si vous rencontrez une erreur lors de l'ouverture d'un fichier avec les drapeaux FILE_SHARE_READ|FILE_SHARE_WRITE, veuillez reproduire ces problèmes sans erreurs superflues, créées artificiellement.

Qu'est-ce qui vous fait penser que le code est faux ?

Je peux utiliser toute forme de rapport d'erreur, et le fichier .ex n'est pas pour vous, mais pour les développeurs. Si vous voulez aider en reproduisant simplement l'erreur, vous pouvez suivre mes conseils. Si vous ne voulez pas aider, n'ennuyez pas les autres avec des messages vides de colère.

 
A100:

Qu'est-ce qui vous fait penser que le code est faux ?

Le formulaire dans lequel je peux signaler une erreur - donc je la signale, et le fichier .ex que j'ai posté non pas pour vous mais pour les développeurs. Si vous voulez aider en reproduisant simplement l'erreur, vous pouvez suivre mes conseils. Si vous ne voulez pas aider, n'embêtez pas les autres avec des messages vides de colère.

Vos messages sont plutôt malveillants. Ma demande

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

Bugs, bugs, questions

Alexey Viktorov, 2018.07.23 14:16

C'est étrange que ça n'aide pas. Je n'ai pu obtenir 5004 que sans le drapeau FILE_SHARE_WRITE.

Le fichier dans le conseiller en écriture s'ouvre à OnInit et ne se ferme qu'à OnDeinit. Dans le même temps, dans le conseiller en lecture, le fichier se lit et s'imprime sans aucun problème.

Il serait bon de clarifier la façon dont vous écrivez le fichier afin de reproduire vos actions de façon plus précise.


Ce n'est pas à vous que je m'adressais, mais vous vous êtes accroché et avez glissé des messages d'il y a deux ans, auxquels les développeurs n'ont pas prêté attention, à mon avis, à cause d'une erreur créée artificiellement.

Et je répète : pourquoi devrais-je reproduire une erreur créée artificiellement ???????????.

 
Alexey Viktorov:

Et encore une fois : pourquoi devrais-je reproduire une erreur créée artificiellement ???????????.

Expliquez ce qu'est une erreur créée artificiellement ? Je ne comprends pas cette phrase
 
TheXpert:

Essayez après avoir ouvert un fichier pour l'écriture (partie 1 du code) de le visualiser avec le visualiseur de Windows. Au moins, il sera clair quelle poignée est le problème.

S'il s'ouvre - le deuxième, sinon - le premier.

Windows ouvrira le premier fichier. Je vois au niveau du système que les drapeaux read, write, share_read sont activés. Mais dans le terminal, l'ouverture du même fichier en lecture produit 5004. Le premier conseiller expert écrit dans le fichier, c'est-à-dire qu'il ne l'ouvre pas simplement avec quelques drapeaux pour le plaisir.

Quand j'aurai le temps, j'essaierai de faire un script de démonstration. Mais à en juger par le fait que ce n'est pas le premier que j'écris à ce sujet et qu'il n'y a pas de développements relatifs aux fichiers dans le code, la courbure est présente.

PS. Peut-être qui a déjà écrit dans SD ? Quelles sont les réponses ?

 
A100:
Strictement parlant, l'erreur est causée par l'appel simultané deFileOpen( filename ) à partir de différents Expert Advisors (les drapeaux n'ont pas d'importance).
le drapeau FILE_SHARE_READ signifie en fait un accès non exclusif en lecture, du moins dans le winapi original.
 
Stanislav Korotky:

Windows ouvre le premier fichier.

La seconde poignée veut un accès exclusif en lecture ou tout autre accès non autorisé, malgré le drapeau.
 
A100:
Expliquez ce qu'est une erreur créée artificiellement ? Je ne comprends pas cette phrase.

Il n'y a pas de sous-entendu dans ce que je dis. Vous devez comprendre ce qu'est le cuir artificiel. Référez-vous à cet accord.

Afficher le code sans manipulation supplémentaire avec des modèles et autres bricolages, qui renvoie l'erreur ERR_CANNOT_OPEN_FILE avec les drapeaux FILE_SHARE_READ|FILE_SHARE_WRITE

Si l'erreur n'est pas reproduite sans les tambourins, cela signifie que l'erreur a été causée pendant les tambourins...

Je vais répéter la séquence d'actions :

EA 1 :

Dans OnInit, un fichier binaire est ouvert pour l'écriture.

Chaque minute écrit l'ouverture de la barre actuelle dans le fichier.

Le fichier est fermé UNIQUEMENT à OnDeinit.

Conseiller expert 2 :

Chaque minute ouvre ce fichier binaire.

Lit la dernière entrée, l'imprime.

Ferme le dossier.

Et le répète chaque minute.


Il n'y a pas d'erreur d'ouverture de fichier.

 

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;
}
 
Andrey Khatimlianskii:

Pour autant que je m'en souvienne, il fixe un délai après lequel le prix est considéré comme désespérément périmé. En d'autres termes, s'il n'a pas changé depuis 3 minutes, vous ne pouvez pas l'ouvrir.

J'ai écrit un script de test pour ce cas. NoPrice a été capturé 64 secondes après le dernier tick. Peut-être qu'un temps d'arrêt d'une minute vaut vraiment la peine. Je vais devoir faire une petite recherche...

 
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.

Il s'agit manifestement d'un bogue, car les applications tierces lisent le fichier avec les mêmes drapeaux sans aucun problème.