Erreurs, bugs, questions - page 2414

 
Slava:

Quelle est la devise du dépôt lors du test ?

USD. Paire d'essai EURUSD M1. Je vais essayer de le reproduire dans l'EA nu. Elle n'a pas réussi jusqu'à présent. Mais ce sont ces méthodes qui ont conduit à des erreurs dans les journaux et à une seule paire.

 
Slava:

Quelle est la devise du dépôt lors du test ?

Généralement reproduit et trouvé une fonctionnalité. Ci-joint les paramètres de test.

Le code du conseiller expert nu lui-même :

#include <Trade\SymbolInfo.mqh>

int OnInit()
  {
//---
   CSymbolInfo info;
   info.Name("EURCHF.m");
   info.Refresh();
   info.Name("EURJPY.m");
   info.Refresh();
   info.Name("EURUSD.m");
   info.Refresh();
   info.Name("EURGBP.m");
   info.Refresh();
   info.Name("USDCAD.m");
   info.Refresh();
//---
   return(INIT_SUCCEEDED);
  }


Maintenant la "fonctionnalité", comme promis) Si vous utilisez Name() comme ceci :

   if(!SymbolInfoDouble(m_name,SYMBOL_TRADE_TICK_VALUE,m_tick_value))
      return(false);
   if(!SymbolInfoDouble(m_name,SYMBOL_TRADE_TICK_VALUE_PROFIT,m_tick_value_profit))
      return(false);
   if(!SymbolInfoDouble(m_name,SYMBOL_TRADE_TICK_VALUE_LOSS,m_tick_value_loss))
      return(false);
   if(!SymbolInfoDouble(m_name,SYMBOL_TRADE_TICK_SIZE,m_tick_size))
      return(false);

alors il y aura une erreur. Mais de cette façon, l'erreur disparaît :

   if(!SymbolInfoDouble(m_name,SYMBOL_TRADE_TICK_SIZE,m_tick_size))
      return(false);
   if(!SymbolInfoDouble(m_name,SYMBOL_TRADE_TICK_VALUE,m_tick_value))
      return(false);
   if(!SymbolInfoDouble(m_name,SYMBOL_TRADE_TICK_VALUE_PROFIT,m_tick_value_profit))
      return(false);
   if(!SymbolInfoDouble(m_name,SYMBOL_TRADE_TICK_VALUE_LOSS,m_tick_value_loss))
      return(false);


PS. J'ai des paires nommées avec le préfixe ".m" sur mon centre. L'exemple fonctionne également pour les paires ordinaires.

Dossiers :
test.png  11 kb
 
Andrey Pogoreltsev:

Bref, j'ai reproduit et trouvé une fonctionnalité. J'ai joint les paramètres de test.


Merci. Trouver une solution

 

Bug MT5 build 2007. En mode optimisation, la chaîne d'entrée est tronquée à 63 caractères.

Code pour le test :

#property strict

sinput string symbols = "AUDUSD,EURGBP,EURUSD,GBPAUD,GBPCAD,GBPCHF,GBPJPY,GBPNZD,GBPUSD,NZDUSD,USDCAD,USDCHF,USDJPY";
input  bool fortestopt = false;
int OnInit(){
   Print("!!! ",StringLen(symbols)," | ",symbols);

   return INIT_FAILED;
}

void OnTick(){}


Exécution unique tout est ok : ! 90 | AUDUSD,EURGBP,EURUSD,GBPAUD,GBPCAD,GBPCHF,GBPJPY,GBPNZD,GBPUSD,NZDUSD,USDCAD,USDCHF,USDJPY

Réglons l'optimisation par le paramètre fortestopt, allons voir le journal de l'agent : ! 63 | AUDUSD,EURGBP,EURUSD,GBPAUD,GBPCAD,GBPCHF,GBPJPY,GBPNZD,GBPUSD,

 

Quelqu'un veut savoir...

Je ne peux pas voir le fil d'actualité sur ma page... J'avais l'habitude d'y aller et de voir qui avait posté quoi. Maintenant c'est une page blanche... Je n'ai rien changé dans les paramètres...

 

Bug du compilateur. Il génère une erreur d'ambiguïté, bien que tout soit sans ambiguïté ici. Lapremière méthode devrait être appelée comme la plus appropriée. Testé en C++.

class A { };

class B
{
  A _a[];
 public:
        A * operator[](uint i)       { return &_a[i]; }
  const A * operator[](uint i) const { return &_a[i]; }  
};

void OnStart()
{
  B b;
  b[0]; // 'operator[]' - ambiguous call to overloaded function
}
 
Evgenii Kuznetsov:

Bug MT5 build 2007. En mode optimisation, la chaîne d'entrée est tronquée à 63 caractères.

Code pour le test :


Exécution unique tout est ok : ! 90 | AUDUSD,EURGBP,EURUSD,GBPAUD,GBPCAD,GBPCHF,GBPJPY,GBPNZD,GBPUSD,NZDUSD,USDCAD,USDCHF,USDJPY

Réglons l'optimisation par le paramètre fortestopt, allons voir le journal de l'agent : ! 63 | AUDUSD,EURGBP,EURUSD,GBPAUD,GBPCAD,GBPCHF,GBPJPY,GBPNZD,GBPUSD,

Le fait qu'il ne passe pas non plus à 63 caractères en un seul test n'est qu'un hasard.

La longueur de la chaîne du type de paramètre d'entrée ne doit pas dépasser 63 caractères (64 avec le terminateur nul).

 
Slava:

Le fait qu'il ne se réduise pas non plus à 63 caractères dans le test unique n'est qu'un hasard.

La longueur d'un paramètre d'entrée de type chaîne ne doit pas dépasser 63 caractères (64 avec le terminateur nul).

C'est une sorte de restriction draconienne. Quelle est la raison d'être de cette démarche à l'heure actuelle ? Et comment est-il pratique de spécifier des grappes d'un tas de caractères ? Tracer une douzaine de paramètres différents ? Est-ce pratique ?

 
Slava:

Le fait que le test unique ne soit pas tronqué à 63 caractères n'est qu'un accident.

La longueur d'un paramètre d'entrée de type chaîne ne doit pas dépasser 63 caractères (64 avec le terminateur nul).

Cette limitation est inappropriée, nous n'écrivons pas le prix d'un kilo de pommes de terre dans la chaîne.

 

Cette restriction est vécue depuis de nombreuses années.

La question s'est posée pour la première fois...