[ARCHIVE]Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas à côté. Je ne peux aller nulle part sans toi - 5. - page 391

 
Zhunko:
Le système n'a pas besoin de le savoir. C'est un problème de flux. Il sera traité de toute façon. Il est garanti par le système. À moins, bien sûr, que vous ne l'arrêtiez vous-même à cause d'un bug dans le code.


Il est clair depuis longtemps que vous ne savez pas du tout de quoi vous parlez.
 

Junko, pourquoi est-ce que tu essaies d'argumenter ici... et tu ne sais même pas de quoi tu parles. Vous voulez le système, vous ne voulez pas le système... Tu ne sais même pas de quoi tu parles. Il s'agit de résoudre le problème qui a été exposé précédemment... et maintenant vous allez commencer à dire que ce n'est pas nécessaire... Vous avez déjà dit qu'il ne devrait pas y avoir une telle tâche. Vous tournez dans votre tête sans vous en rendre compte, et vous vous mettez dans le rôle d'un gourou.

 
Ce n'est pas le flux qui compte, mais ce qu'il fait, et il ne le fait pas toujours. Et tu dois diriger ce qu'il fait.
 
Integer:
Ce n'est pas le fil qui compte mais ce qu'il fait et il ne le fait pas tout le temps. Et vous devez gérer ce qu'il fait.

J'ai écritici:

Zhunko:

Il existe un autre cas où une file d'attente est nécessaire. Il ne s'agit pas d'une file d'attente pour l'exécution des threads, mais d'un ordre de traitement des données reçues des threads (résultats du travail des threads). Il s'agit de la tâche la plus fréquente pour les files d'attente.

Ça ?

 
Zhunko:

Écritici:

Ça ?

A peu près similaire. Mais avant cela, il y a eu des déclarations telles que l'ordre n'est pas du tout important. Et ici, il a été généralement indiqué que non seulement les tâches doivent être exécutées de manière régulière, mais aussi dans un certain ordre (si ce n'est pas exécuter, mais de recueillir des données pour un traitement ultérieur, parce que vous ne pouvez pas creuser jusqu'à l'inexactitude des déclarations). Maintenant, c'est à vous de répondre - je sais que je l'ai fait... alors que se passe-t-il depuis 10 pages ?
 
Veuillez me conseiller, est-il normal que lorsque vous exécutez 1 fois par année d'historique (300-400 transactions) le testeur crée un fichier journal qui pèse jusqu'à un gigaoctet... ?
 
lottamer:
Veuillez me conseiller, est-il normal que lorsque vous exécutez 1 fois par année d'historique (300-400 transactions) le testeur crée un fichier journal qui pèse jusqu'à un gigaoctet... ?

En gros, c'est bon :) Pas si normal ou pas normal, ça fait ça, c'est tout. Regardez ce qu'il dit, s'il y a des messages d'erreur, vous devez prendre des mesures concernant ces erreurs. S'il y a des messages d'information, vous devez les désactiver (s'il y a un commutateur) ou commenter les appels aux fonctions Print()(), Comment(), Alert().
 
Integer:

A peu près la même chose. Cependant, avant cela, il y a eu des déclarations telles que l'ordre n'est pas du tout important. Et c'est ici que c'est le plus important, lorsque non seulement les tâches doivent être exécutées de manière régulière, mais aussi dans un certain ordre (si ce n'est pas pour exécuter, mais pour collecter des données en vue d'un traitement ultérieur, sinon vous risquez de vous embrouiller avec l'inexactitude des déclarations). Maintenant, c'est à vous de répondre - je sais que je l'ai fait... alors que se passe-t-il depuis 10 pages ?

Ce qui s'est passé est dû à un manque d'explication de votre part. J'ai écrit à la page 381. Si vous aviez lu ma réponse, vous l'auriez remarqué et dit.

===================

1. Il y a plusieurs fils indépendants.

2. Les résultats sont empilés dans une certaine file d'attente.

3. cette file d'attente est une ressource partagée.

4. Vous devez synchroniser l'accès des threads à la file de résultats partagée.

N'est-ce pas ?

===================

Voici comment cela devrait fonctionner correctement sans supprimer la variable globale :

#property show_inputs

extern int Pause = 1000;

int    hwndChart = NULL; // Уникальный идентификатор скрипта.
string sName = "Condition";

void init()
 {
  hwndChart = WindowHandle(Symbol(), 0);
  // Создаём глобальную переменную синхронизации скриптов.
  if (!GlobalVariableCheck(sName)) GlobalVariableSet(sName, 0);
 }
 
void deinit()
 {
  while (!IsStopped())
   {
    if (!GlobalVariableSetOnCondition(sName, hwndChart, 0)) continue;
    if (GlobalVariableSetOnCondition(sName, 0, hwndChart)) return;
   }
 }

void start()
 {
  while (!IsStopped())
   {
    Sleep(200); // Имитация тика.
    // Начало блока синхронизации.
    if (!GlobalVariableSetOnCondition(sName, hwndChart, 0)) continue;
    if (GlobalVariableGet(sName) == hwndChart)
     {
      Print("Start");
      Sleep(Pause); // Имитация работы.
      Print("End");
     }
    GlobalVariableSetOnCondition(sName, 0, hwndChart);
   } // Завершение блока синхронизации.
 }

Chiripaha:

Ce...

Je pense qu'Arles a trouvé la réponse à la question, car je ne suis pas encore capable de saisir l'essentiel de la solution. Mais c'est parce que je suis un débutant et que j'ai besoin de plus de temps pour apprendre la théorie d'abord, puis pour essayer la pratique. Mais je vais essayer de maîtriser la question.


C'est vrai, par question non résolue je voulais dire exactement cette liste de questions.

................

====================================

Je veux dire, en d'autres termes. - S'il n'y a pas de bloc de solution suggéré par vous dans l'EA, alors l'utilisation d'un grand nombre de ces EA peut provoquer la situation décrite dans la question sur la gestion des risques ?

Laissez-moi vous expliquer un peu plus. Je ne suis pas sûr que ce soit trop critique. C'est pourquoi je l'ai considéré comme hypothétique jusqu'à présent. Parce que la vitesse de résolution des problèmes est élevée et que les solutions dans l'ordinateur vont probablement "voler" à travers le canal à large débit de l'ordinateur. - Mais peut-être que je me trompe, car selon Arles - il ne reçoit que 2 commandes par tour. Il y a donc un problème.

Ce n'est que maintenant que je comprends la question :-))

Si cela se produit, c'est un problème de mauvais risque. Il n'est pas nécessaire de synchroniser quoi que ce soit si le risque est faible. +-0,0001% du dépôt n'est pas crucial.

 

Zhunko:

Ce n'est que maintenant que je comprends la question :-))

Si cela se produit, c'est un problème de mauvais risque. Avec un risque faible, il n'est pas nécessaire de synchroniser quoi que ce soit. +-0,0001% du dépôt n'est pas crucial.

Ça arrive... Lorsqu'une personne est en train de résoudre un problème actuel, il est difficile de passer à d'autres tâches. Et quand il y a beaucoup de tâches, il est difficile de tout faire... : )) Règles de gestion du temps.

Une autre question concernant le multithreading.

Le tutoriel de Sergei Kovalev décrit une méthode avec un Squaredness optimisé où le Conseiller Expert travaillera en boucle. Si nous considérons ceci et le multithreading, est-ce que je comprends bien que ce genre de comportement cyclique de l'EA ne causera pas d'inconvénients pour d'autres EA, scripts et indicateurs ? Et nous pouvons sans risque commencer le travail de l'EA en boucle ? Ou serait-il préférable de ne pas le faire ? Et quand faut-il l'éviter ?

D'après ce que je comprends, ce cycle de travail est mis en œuvre dans le code ci-dessus. C'est peut-être pour cela que je m'en suis souvenu.

Et d'ailleurs, si un tel EA en boucle est exécuté dans le testeur, dans quelle mesure sera-t-il correct ? Ou devrions-nous "désactiver" la boucle dans ce cas ?

 
borilunad:

Je profite de cette occasion pour vous demander de résoudre le problème du trou dans M1 de 0,00 à 3,00 des cotations d'aujourd'hui. La mise à jour ajoute seulement 2 barres à la fois, sur les autres TF toutes les cotations sont présentes sauf les volumes incorrects. Que faire ? Peut-être y a-t-il un script pour forcer le chargement, la mise à jour ? Et ceci, malheureusement, sur Real. Pas de trou sur l'autre MT4 avec Demo ! Nous attendons votre aide ! Merci !


Il suffit de redémarrer le terminal ou de télécharger manuellement les citations dans le regard des paramètres.