Erreurs, bugs, questions - page 284

 
alexvd:

Comment sont fixés les stops et les TPs ?

Ouvrez-vous d'abord une position et ne la modifiez qu'ensuite, ou spécifiez-vous immédiatement le SL et le TP appropriés ?

Vous ouvrez d'abord une position, puis vous la modifiez...
 
Voodoo_King:

build 384. Il semble que j'ai trouvé un autre bug... Lors de la consultation de l'historique, les ordres - les niveaux Stop Loss et Take Profit définis ne sont pas affichés...


Ils sont "affichés" lorsqu'un ordre est fixé. Ils ne sont pas affichés lorsqu'une position est fermée par le serveur à l'aide d'un stop, ce qui est naturel, puisque le serveur ne définit pas de stop lors de la fermeture d'une position.
















































































































 

J'ai découvert quelque chose comme ça. Je ne sais pas si c'est un bug ou non, mais ça y ressemble. Le code suivant :

lot=NormalizeDouble(My_AccountInfo.MaxLotCheck(_Symbol,ORDER_TYPE_BUY,latest_price.ask)/10,2);
printf(lot);

Sorties dans le journal du testeur (avec un dépôt de 1000 $) :

2011.01.28 20:06:48    Core 1    2010.01.04 00:56:00   0.07000000000000001

La fonction (NormalizeDouble) ne devrait-elle pas supprimer tous les chiffres non nuls après 7 ?

Je pensais avoir trouvé une solution dans le formulaire : lot=floor((My_AccountInfo.MaxLotCheck(_Symbol,ORDER_TYPE_SELL,latest_price.ask)/10)*100)/100,

mais j'ai aussi obtenu des résultats similaires. Que faire - quel est le degré d'importance dans les requêtes commerciales ?

 

Bonjour !

J'ai ajouté la fonction Commentaire au corps de la boucle, afin qu'elle puisse afficher le pourcentage de l'état d'exécution de la boucle et quelques autres valeurs. L'algorithme simple a pris 5 minutes (sinon plus) pour s'exécuter dans le corps de la boucle, mais il n'a recalculé que 32000 valeurs de barres (Close,High,Low,Open). Je me suis plaint que le tableau augmente dynamiquement pendant l'exécution de la boucle, mais ce n'est pas vrai. Après le débogage de l'algorithme, le commentaire a été supprimé - le calcul est maintenant effectué dans un godsend.

La fonction Commentaire ralentit-elle vraiment l'exécution des programmes? Je suis franchement surpris.

Système : Windows XP, Terminal 5.00.384.

Документация по MQL5: Программы MQL5 / Выполнение программ
Документация по MQL5: Программы MQL5 / Выполнение программ
  • www.mql5.com
Программы MQL5 / Выполнение программ - Документация по MQL5
 
KffAlex:

Bonjour !

J'ai ajouté la fonction Commentaire au corps de la boucle, afin qu'elle puisse afficher le pourcentage de l'état d'exécution de la boucle et quelques autres valeurs. L'algorithme simple a pris 5 minutes (sinon plus) pour s'exécuter dans le corps de la boucle, mais il n'a recalculé que 32000 valeurs de barres (Close,High,Low,Open). Je me suis plaint que le tableau augmente dynamiquement pendant l'exécution de la boucle, mais ce n'est pas vrai. Après le débogage de l'algorithme, le commentaire a été supprimé - le calcul est maintenant effectué dans un godsend.

La fonction Commentaire ralentit-elle vraiment l'exécution des programmes? Je suis franchement surpris.

Système : Windows XP, Terminal 5.00.384.

J'ai remarqué le même effet.
 

En exécutant le conseiller expert sur l'historique en utilisant uniquement les prix d'ouverture, les positions de vente ne sont pas ouvertes aux prix d'ouverture, mais aux prix élevés, et sont fermées aux prix bas.

Pourquoi cela se produit-il ?

L'Expert Advisor recherche des signaux pour ouvrir et fermer des positions en utilisant uniquement les prix Open[0]. EventSetTimer(1) est utilisé ;

 
Valmars:

Ils sont édités lorsqu'une commande est passée. Non disponible lorsqu'une position est fermée par le serveur en utilisant un stop, ce qui est naturel, car le serveur ne définit pas de stop lors de la fermeture d'une position.

Quoi de neuf ?) ? où apparaissent-ils lorsque les commandes sont passées ?

Je parle du rapport "Historique", et je ne vois rien dans les colonnes Stop Loss et Take Profit, même si les positions ont ces valeurs.

comment puis-je savoir si un stop loss a été défini ou non ? je veux dire, s'il a été déclenché, je peux le voir, mais pas ?

 

J'ai la question suivante.

La tâche consiste à écrire les valeurs d'équité dans un fichier spécifique pendant la phase de test, en effaçant les valeurs précédentes.

Mais ce qui se passe ici est le suivant :

1. LorsqueFileDelete() est absent de OnInit(), il est écrit en plus de ceux existants.

2. Mais lorsque FileDelete() dans OnInit() est présent, malgré les mêmes enregistrements d'équité dans OnCalculatde(), le fichier résultant s'avère être vide.

Pourquoi cela se produit-il et comment l'éviter ?

Voici le code :

#property copyright "Copyright 2010, MetaQuotes Software Corp."
#property link      "http://www.mql5.com"
#property version   "1.00"
#property indicator_separate_window
#property indicator_buffers 1
#property indicator_plots   1
#property indicator_label1  "Label1"
#property indicator_type1   DRAW_LINE
#property indicator_color1  Red
#property indicator_style1  STYLE_SOLID
#property indicator_width1  1
double   Values[];
string   Array[];
string   filename="equity FileWrite25.txt";
int      handle;
int      NumberCopyElements;
string   common_folder;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit(){
   SetIndexBuffer(0,Values,INDICATOR_DATA);
   PlotIndexSetInteger(0, PLOT_DRAW_BEGIN, 100);
   PlotIndexSetDouble(0, PLOT_EMPTY_VALUE, EMPTY_VALUE);
   ArraySetAsSeries(Values, false);
   //---
   common_folder=TerminalInfoString(TERMINAL_COMMONDATA_PATH);
   FileDelete(filename,FILE_COMMON);
   return(0);
}
int OnCalculate(const int        rates_total,
                const int        prev_calculated,
                const datetime&  time[],
                const double&    open[],
                const double&    high[],
                const double&    low[],
                const double&    close[],
                const long&      tick_volume[],
                const long&      volume[],
                const int&       spread[])
{  
   uint written;
   handle=FileOpen(filename,FILE_WRITE|FILE_READ|FILE_COMMON|FILE_TXT);
   if(handle!=INVALID_HANDLE){
      FileSeek(handle,0,SEEK_END);
      written=FileWrite(handle,TimeToString(TimeCurrent())," ",AccountInfoDouble(ACCOUNT_EQUITY));//TimeToString(time[i]),
      PrintFormat("Equity FileWrite25 - OnCalculate(): Записано %d байт в общую папку всех терминалов - %s",written,common_folder);
   }
   else {
      Print("Equity FileWrite25 - OnCalculate(): Не удалось открыть файл ",filename,".  Ошибка ",GetLastError());     
   }
   FileClose(handle);
   return rates_total;
}
void OnDeinit(const int reason){
   FileClose(handle);
}
 
Voodoo_King:

quoi de neuf :) ? où sont-ils affichés lorsqu'une commande est passée ?

Je parle du rapport "Historique", et je ne vois rien dans les colonnes Stop Loss et Take Profit, bien que les positions aient ces valeurs.

comment puis-je savoir si un stop loss a été défini ou non ? s'il a fonctionné, je peux le voir, mais sinon ?

Elle est affichée dans l'onglet "History/Order", et à votre avis, à quoi correspondent le stop-loss et le take-profit de l'ordre, que le serveur utilise pour clôturer la position lorsque le stop est déclenché ? Vous regardez les paramètres exacts des commandes.
 
DV2010:

J'ai la question suivante.

La tâche consiste à écrire les valeurs d'équité dans un fichier spécifique pendant la phase de test, en effaçant les valeurs précédentes.

Mais ce qui se passe ici est le suivant :

1. Lorsque FileDelete() est absent de OnInit(), il est écrit en plus de ceux existants.

2. Mais lorsque FileDelete() dans OnInit() est présent, malgré les mêmes enregistrements d'équité dans OnCalculatde(), le fichier résultant s'avère être vide.

Pourquoi cela se produit-il et comment l'éviter ?

Le code est donné ci-dessous :

J'ai inventé une solution pour reconnaître le mode test, mais il y a un peu d'empirisme dans cette solution qui me gêne...

(J'ai essayé de trouver une occasion d'obtenir l'heure de début du testeur de manière programmatique, pour mettre en indentation à partir de celui-ci jusqu'aux profondeurs de l'histoire et couper ainsi le temps réel,

mais ne l'a malheureusement pas trouvé) :

   if(rates_total - prev_calculated > 1 && rates_total - prev_calculated < 10000){
    FileDelete(filename,FILE_COMMON);
   }   
Mais il y a un problème d'une toute autre nature, qui est qu'après avoir changé la période de test, les indicateurs selon les résultats du test disparaissent pour une raison quelconque, mais si après cela vous faites une compilation pour une nouvelle période, alors l'exécution du testeur les affichera.

Bug ?

Raison: