L'oscillateur d'équité de MQL5 signifie - page 6

 
joo:

Il est préférable d'écrire dans le fichier aussi peu souvent que possible, donc il est préférable de le faire sous forme de tableau. Les valeurs ne doivent pas être mesurées plus d'une fois par minute, sinon il y aura des problèmes d'affichage sur le graphique (et cela demande des ressources déraisonnables). C'est-à-dire, à la fin de la course. Mais cette variante est également possible :

L'algorithme se présente comme suit :

1) Exécuter l'expert dans le testeur.

2) Nous avons mesuré la valeur de l'intérêt.

3) Enregistré cette valeur dans le fichier.

4) Nous écrivons true dans un fichier séparé, ce qui signifie que nous avons une nouvelle valeur.

5) Démarrer une boucle infinie, la condition de sortie est fausse dans le fichier flag.

6) Dans un graphique séparé, le script lit le fichier avec le drapeau, s'il y a une nouvelle valeur, dessine un risque sur le graphique, écrit false dans le fichier.

C'est à peu près ce à quoi ressemblera le mode visuel des tests dans le testeur.

Attendez un peu, le concours sera terminé, peut-être que des solutions plus élégantes et plus belles seront présentées.

joo, Attends, quelle est la valeur de l'intérêt, si les valeurs sont d'intérêt pour tous ? :)

Je pense que c'est comme ça :

1. Dans le OnTick de l'Expert Advisor, nous formons un tableau programmatique d'états de comptage,

2. à la fin du test, écrivez ce tableau de programme dans son ensemble dans un fichier (il est préférable d'écrire chaque paramètre dans un fichier séparé),

3. puis récupérer le tableau unidimensionnel spécifié dans l'indicateur OnInit

4. et le copier dans le tableau des indicateurs dans OnCalculated.

Le seul problème est que même l'écriture du tableau pose toujours problème pour une raison quelconque (voir ci-dessus).

 
DV2010:

Attends, quelle est l'autre valeur de l'intérêt si je suis intéressé par toutes les valeurs ? :)

Je ne me soucie pas de toutes ces personnes.

DV2010:

Je pense que c'est comme ça

1. formons un programme de tableau d'états de comptage dans OnTick de Expert Advisor,

2. à la fin du test, écrivez ce tableau de programme dans son ensemble dans un fichier (il est préférable d'écrire chaque paramètre dans un fichier séparé),

Vous pouvez le faire.

DV2010:

3. puis récupérer le tableau unidimensionnel spécifié dans l'indicateur OnInit

Pourquoi en oninite alors ? Ne devez-vous le faire qu'une seule fois ? Vous avez dit que vous deviez presque surveiller les tests en temps réel.

DV2010:

4. et le copier dans le tableau des indicateurs dans OnCalculated.

Le seul problème est que même l'écriture du tableau pose toujours problème pour une raison quelconque (voir ci-dessus).

Le problème sera que vous ne pourrez pas afficher les données postiques sur le graphique. Sauf si vous collectez les tiques, alors ....... De toute façon, je vous ai déjà prévenu : n'enregistrez pas de données plus d'une fois par minute. Mais si vous souhaitez effectuer une analyse, par exemple sans vous lier à un instrument de négociation, vous pouvez également la télécharger dans un fichier Excel.

 

joo, non ! :)

Tout ce dont j'ai besoin jusqu'à présent, c'est que le testeur fasse son travail et obtienne les oscillateurs des courbes des indicateurs de compte que je veux sur l'historique !

Dites-moi, à votre avis, pourquoi mon Expert Advisor, dont j'ai cité le code ci-dessus et dont le lien figure ci-dessous, refuse d'enregistrer des données ?

Dossiers :
 
DV2010:

Rosh

Je ne peux pas comprendre la raison exacte, mais contrairement à mes indicateurs, lorsque vous commencez avec les vôtres, vous obtenez un message :

Maintenant j'ai fait un Expert Advisor simple similaire, basé sur votre code, qui devrait écrire toutes les valeurs d'Equity dans le fichier (j'ai changé seulement la sortie de toutes les valeurs, y compris les octets zéro écrits, rendu les variables globales, et divisé l'ouverture et l'écriture du fichier en OnInit et OnTick), mais malgré l'absence d'erreur d'écriture et le fichier est créé, les entrées et le fichier sont vides.

Y a-t-il un problème ?

FileClose(filename);
 
Rosh:

Tu n'as rien gâché, n'est-ce pas ?

Je l'ai fait, mais la différence avec le corrigé ( FileClose(handle) ; ) est peu ressentie :)

Il n'écrit toujours pas ! :) En même temps, il garde le silence comme un partisan (à moins que vous ne comptiez 0 octet écrit comme une "explication").

 
DV2010:

C'est raté, mais la différence avec le corrigé ( FileClose(handle) ; ) se sent peu :)

Il n'écrit toujours pas ! :) En même temps, il est silencieux comme un partisan (à moins que vous ne comptiez comme une "explication" le fait que 0 octet soit écrit).

Je ne sais pas ce que tu fais là. Voici une variante qui fonctionne

//+------------------------------------------------------------------+
//|                                          Demo_File_Common_EA.mq5 |
//|                        Copyright 2011, MetaQuotes Software Corp. |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2011, MetaQuotes Software Corp."
#property link      "http://www.mql5.com"
#property version   "1.00"
//--- input parameters
input string   filename="equity.txt";
int handle;
string common_folder;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   common_folder=TerminalInfoString(TERMINAL_COMMONDATA_PATH);
//---
   handle=FileOpen(filename,FILE_WRITE|FILE_READ|FILE_COMMON);
//---
   return(0);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   FileClose(handle);
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   if(handle!=INVALID_HANDLE)
     {
      FileSeek(handle,0,SEEK_END);
      uint written=FileWrite(handle,TimeToString(TimeCurrent()),AccountInfoDouble(ACCOUNT_EQUITY));
      if(written>0)
        {
         //PrintFormat("Записано %d байт в общую папку всех терминалов - %s",written,common_folder);
        }
     }
   else
     {
      Print("Не удалось открыть на запись файл ",filename,".  Ошибка ",GetLastError());
     }

  }
//+------------------------------------------------------------------+
 
Rosh:

Je ne sais pas ce que tu fais là. Voici une option qui fonctionne

Super ! Ainsi, pour écrire dans un fichier, en plus de FileWrite, vous devez également définir un pointeur via FileSeek.
Документация по MQL5: Файловые операции / FileWrite
Документация по MQL5: Файловые операции / FileWrite
  • www.mql5.com
Файловые операции / FileWrite - Документация по MQL5
 

... Sur une question déjà soulevée hier.

Je l'ai inséré dans OnTick et dans OnCalculated :

Print("ObjectsTotal =", ObjectsTotal(ChartID()));

mais après avoir testé, malgré la présence d'objets liés aux positions d'ouverture et de fermeture (les paramètres des flèches et des lignes dans le Terminal peuvent être vus à : Charts>Objects>Objects List), la valeur de retour est 0 pour une raison quelconque.

Qui peut me dire pourquoi cela se produit ?

Se peut-il que le testeur ne voit pas les objets qui sont créés automatiquement par lui-même ?

 
DV2010:

Qui peut me dire pourquoi il en est ainsi ?

Le testeur ne voit-il pas du tout les objets qu'il crée automatiquement ?

Les objets graphiques créés pendant les tests n'ont rien à voir avec les objets présents sur le graphique ouvert une fois les tests terminés. Cela signifie qu'il n'y a aucun moyen d'atteindre les flèches d'entrée/sortie qui apparaîtront sur le graphique une fois le test terminé.
 
Rosh:
Les objets graphiques créés pendant les tests ne sont en aucun cas liés aux objets du graphique qui est ouvert après les tests. En d'autres termes, il n'y a aucun moyen d'atteindre les flèches d'entrée/sortie qui apparaîtront sur le graphique une fois le test terminé.

C'est exactement ce que je craignais !

Eh bien, je vais devoirdessiner mes propresobjets, bien que tout ce dont j'ai besoin soit de changer la couleur des lignes en fonction du signe du résultat (profit ou perte) des positions correspondantes, car du point de vue de l'analyse la plus rapide de la distribution des transactions rentables et perdantes, la couleur du résultat est beaucoup plus importante que la couleur de la direction. Plus important - ne serait-ce que parce que l'on peut de toute façon voir la direction vers le haut ou vers le bas sur le graphique (à la fois par la pente de la ligne et par la couleur des flèches), alors que pour comprendre le profit ou la perte d'une transaction en utilisant l'approche standard, il est nécessaire de comparer le type de position avec la direction du marché à chaque fois).

Et c'est bien s'il n'y a que quelques postes dans le testeur. Mais que faire s'il y en a des centaines ou des milliers ? Dans l'approche standard, il serait impossible de voir la distribution des positions perdantes et rentables dans ce cas, alors que si les transactions déficitaires étaient représentées par des lignes rouges et les transactions rentables par des lignes bleues, la distribution peut très probablement être vue même à la plus petite échelle.

Pourquoi est-ce important ? Parce qu'un système de trading peut se comporter différemment à différentes échelles de temps, et pour identifier ses points faibles et travailler sur ces points, vous devez avoir une idée de la dynamique des prix à laquelle ces séries de trades perdants sont associées.

La possibilité de définir le type de lignes de transactions à l'interface de MetaTrader, à mon avis, rendrait l'analyse de l'historique beaucoup plus confortable pour de nombreux traders, tandis que du point de vue programmatique, je pense que c'est facile à faire et qu'il n'y a pas de moins. En d'autres termes, nous avons besoin d'une alternative à la variante traditionnelle du traitement par type de poste, la variante du traitement par résultat commercial. Vous pouvez donc peut-être ajouter ou au moins soumettre cette question à un vote parmi les participants du forum ?

Il peut y avoir deux façons de le mettre en œuvre :

1. La connexion du dessin des objets avec l'Expert Advisor OnTcik, afin que ces objets puissent être modifiés de manière programmatique.

2. Ajouter un paramètre au niveau de l'interface de la fenêtre.

Les oscillateurs d'états de compte résoudront en partie ce problème, mais seulement en partie, car la représentation la plus commode de l'efficacité des transactions - est leur représentation visuelle, la plus proche de la dynamique des prix.

D'une manière générale, à mon avis, le testeur et la visualisation de l'efficacité de l'opération sont les points les plus faibles de la version 5 actuelle. Jusqu'à présent, nous n'avons ici que l'héritage des versions précédentes sous la forme du graphique et des résultats, mais les deux nous permettent de juger uniquement de l'efficacité du conseiller expert en général, et l'impression peut être trompeuse (il est arrivé tant de fois que le graphique global d'équité du conseiller expert soit en constante augmentation, alors qu'un examen plus approfondi révélera des tirages relatifs plus importants et d'autres "surprises").