Erreurs, bugs, questions - page 564

 
Cloud nerwork utilisant l'erreur.
Quelle est la cause de ce problème ? Impossible d'utiliser les ressources du nuage.
 
Urain:

Expliquer.


Une annonce préliminaire des changements prévus a été faite. La liste définitive des modifications apportées à la prochaine version sera publiée après la publication de la version elle-même.
 
Rosh:
Une annonce préliminaire des changements prévus a été faite. La liste définitive des modifications apportées à la prochaine version sera publiée après la publication de la version elle-même.
Merci.
 

J'ai longuement rongé le code de l'indicateur, jusqu'à ce que je désespère complètement de détecter les erreurs. Je ne l'ai pas écrit dans "Dummies" parce que je soupçonne non pas des erreurs de ma part, mais des erreurs dans le travail du terminal.

L'objectif de l'indicateur est de placer des fractales sur le timeframe actuel à partir d'un autre timeframe et d'en ajouter de nouvelles au fur et à mesure que les nouvelles barres fractales apparaissent. Veuillez ne pas suggérer d'autres façons de placer les flèches fractales, il ne s'agit pas de cela ; nous avons des questions fondamentales concernant ce code et, peut-être, liées au fonctionnement incorrect du terminal. J'ai pris un exemple de l'aide iFractals qui a été logiquement raccourci de moitié (aux fractales supérieures seulement) pour une perception plus facile et un peu de code du standard Fractals.mq5 a été emprunté. J'ai dû être très méticuleux pour éviter tout malentendu : j'ai lié presque tous les tableaux possibles et nettoyé les tableaux travaillés, libéré le handle de l'indicateur appelé, ce qui n'a pas donné de différence notable dans les résultats. Les problèmes et particularités de fonctionnement suivants ont été constatés :

  1. Lorsque je démarre le terminal pour la première fois, que j'ouvre une nouvelle fenêtre graphique et que j'applique un indicateur fraîchement compilé, toutes les fractales s'accumulent sur la barre zéro à la fin de l'historique (une seule semble être placée), au lieu d'être positionnées comme prévu et selon la logique du code. Le placement correct ne peut être initié qu'en passant à d'autres horizons temporels (parfois même pas la première fois). De même, en supprimant l'indicateur du graphique, en fermant la fenêtre du graphique, en recompilant, en ouvrant une nouvelle fenêtre et en appliquant l'indicateur, nous parvenons presque toujours à obtenir immédiatement l'arrangement fractal requis. Pour voir l'effet erroné, le terminal doit être complètement déchargé et toutes les étapes de l'étape 1 doivent être répétées. 1. Peut-être le problème réside-t-il dans la durée de vie du handle de l'indicateur appelé et son comportement spécifique au démarrage initial de l'indicateur personnalisé? Dans le cas d'une disposition incorrecte des fractales (lorsqu'elles sont toutes "comprimées" sur la barre de zéro), la sortie de tous les éléments de exact_extremum dans la boucle donne des résultats nuls, mais la sortie des valeurs adjacentes de TimeUpBuffer, sur la base desquelles il est calculé et rempli, montre toujours des dates de temps systématiquement différentes. D'où la question : qu'est-ce qui empêche qu'il soit rempli lors de la création initiale de l'indicateur, s'il se remplit correctement avec les bonnes valeurs lors des fois suivantes ?
  2. Le même code qui a hérité du même problème, mais maintenant l'accent est mis sur une fonctionnalité complètement différente. Dans cet indicateur, nous pouvons nous abstenir de lier certains tableaux de calculs intermédiaires comme INDICATOR_CALCULATIONS aux tampons de l'indicateur. C'est le code initial de l'indicateur. Tout semble aller bien, à part P. 1. semble être ok.
  3. Mais pour être très malin, essayons de suivre les meilleures recommandations et de lier les tableaux de calculs intermédiaires aux tampons indicateurs :
    #property indicator_chart_window
    #property indicator_buffers 3
    #property indicator_plots   1
    
    [...]
    
    int OnInit()
      {
       [...]
       SetIndexBuffer(1,PreliminaryUpBuffer,INDICATOR_CALCULATIONS);
       SetIndexBuffer(2,exact_extremum,INDICATOR_CALCULATIONS);
       [...]
      }
    compiler et exécuter. En conséquence, nous obtiendrons un message d'erreur dans les journaux de Terminal Expert Advisor : 2011.11.11 07:42:03 (AUDUSD,H1) Trace hors de la plage, ligne :
                CopyHigh(_Symbol,PERIOD_M1,TimeUpBuffer[shift+1]-1,
                                           TimeUpBuffer[shift],
                                           exact_extremum);
    
    Le placement des fractales sur certaines périodes est soit absent, soit sporadique.
  4. Lancer une session Ouija, faire des passes magiques de la main, obéir à l'écriture automatique, et remplacer :
    #property indicator_chart_window
    #property indicator_buffers 3
    #property indicator_plots   1
    pour :
    #define NUMBER 1
    
    #property indicator_chart_window
    #property indicator_buffers NUMBER+2
    #property indicator_plots   NUMBER
    Que cela soit correct ou non, mais cela fonctionne de manière incompréhensible !

J'ai une demande aux habitants de noosphere et surtout aux développeurs : pourriez-vous expliquer chaque point et me conseiller sur la façon de déboguer le code de l'indicateur (si je ne change pas son implémentation).

Merci et fichiers joints.

P.S. : Dans les noms de fichiers il y avait des parenthèses, mais après le téléchargement elles sont gâchées.

 

Comment déterminer le bénéfice actuel sur une transaction magique ?

ce code renvoie les profits sur les transactions fermées et j'en ai besoin sur les transactions ouvertes.

#include <Trade\Trade.mqh>
CTrade trade;
void OnTick()
  {
   double profit=0;
   if(PositionSelect(Symbol()))profit=PositionGetDouble(POSITION_PROFIT);
   if(profit==0) trade.PositionOpen(Symbol(),ORDER_TYPE_SELL,0.1,SymbolInfoDouble(Symbol(),SYMBOL_ASK),0,0,"");
   if(profit>1) trade.PositionOpen(Symbol(),ORDER_TYPE_BUY,0.1,SymbolInfoDouble(Symbol(),SYMBOL_ASK),0,0,"");
   
   double ld_return=0;  
   HistorySelect(0,TimeTradeServer());
   for(int i=HistoryDealsTotal()-1;i>=0;i--) // По всем сделкам от конца к началу
     {
      ulong ticket=HistoryDealGetTicket(i); // Определение тикета сделки и ее выделение
      if(ticket!=0) 
      {
      if(HistoryDealGetInteger(ticket,DEAL_TYPE)<2)
      ld_return+=HistoryDealGetDouble(ticket,DEAL_PROFIT);
      }
     }     
   Comment(ld_return);   
  }
 

Comment savoir pourquoi l'initialisation échoue ?

Je réinitialise les erreurs avant le début de l'initialisation avec

ResetLastError();

A la fin de l'initialisation, je vois une erreur

Print("Ошибка " + IntegerToString(GetLastError()));

Je finis par arriver sur l'onglet "Expert Advisors".

2011.11.11 08:47:51 SimpleExpert (EURUSD,H1) Erreur 0

Dans l'onglet "Journal

2011.11.11 08:47:51 Experts l'initialisation de SimpleExpert (EURUSD,H1) a échoué

 
Konstantin83:

Comment savoir pourquoi l'initialisation échoue ?

Avant de commencer l'initialisation, j'ai réinitialisé les erreurs avec la fonction

ResetLastError();

A la fin, j'affiche une erreur

Print("Ошибка " + IntegerToString(GetLastError()));

J'obtiens le résultat suivant dans l'onglet Experts

2011.11.11 08:47:51 SimpleExpert (EURUSD,H1) Erreur 0

Dans l'onglet "Journal

2011.11.11 08:47:51 Experts l'initialisation de SimpleExpert (EURUSD,H1) a échoué

Est-ce que OnInit renvoie 0 ou pas 0 ?
 
stringo:
Est-ce que OnInit renvoie 0 ou pas 0 ?

OnInit renvoie vrai, je l'ai manqué.

Merci, c'est bon.

 
ddd06:

Comment puis-je déterminer le bénéfice actuel sur une transaction magique ?

Ce code renvoie les bénéfices sur les transactions fermées, mais j'en ai besoin sur les transactions ouvertes.

Regardez l'article de Dmitry(Integer). Tout y est mis en œuvre de manière optimale. Article :Méthode optimale de calcul du volume cumulatif des positions par un nombre magique spécifié.
 
Bonjour, j'ai commencé à écrire multivariant, j'appelle iMA, pour une raison quelconque dans le commerce réel tout fonctionne bien, dès que j'exécute dans le testeur une erreur expert supprimé parce que l'indicateur 'Moving Average' ne peut pas charger [4804], ce qui est l'indicateur sur l'indicateur, pas très clair, je ne pouvais pas trouver une réponse plausible sur Internet. Veuillez me conseiller, je vous en serais très reconnaissant.
Документация по MQL5: Технические индикаторы / iMA
Документация по MQL5: Технические индикаторы / iMA
  • www.mql5.com
Технические индикаторы / iMA - Документация по MQL5
Raison: