Erreurs, bugs, questions - page 896

 

Salutations !

MT5 Optimizer - est-ce que CustomMax calcule correctement ?

J'exécute l'optimiseur (optimisation génétique) dans MT5 5.00 build 722 et j'ai accidentellement remarqué que les résultats de l'optimisation sont calculés d'une manière inattendue.

Le conseiller expert renvoie OnTester() :

Profit * Trades * (1/(MaxEquityDDPercent+1)) * RecoveryFactor

Où :

   double Profit = TesterStatistics(STAT_PROFIT);

   double Trades = TesterStatistics(STAT_TRADES);

   double MaxEquityDDPercent = TesterStatistics(STAT_EQUITY_DDREL_PERCENT);

   double RecoveryFactor = MathAbs(TesterStatistics(STAT_RECOVERY_FACTOR));

On s'attendait à ce qu'avec un facteur de profit et de récupération plus faible, le résultat soit plus petit, mais ce n'est pas le cas - voir la capture d'écran.


Est-ce quelque chose que je ne comprends pas correctement ?

Dossiers :
 
MetaDriver:

Eh bien, allons-y :

Mais j'ai peur que vous ne l'aimiez pas. Moi, par exemple, je ne l'aime pas - le graphique bouge et se dédouble. Et je voulais faire mieux - le déplacer en douceur au bon endroit...

// Ce qui est intéressant, c'est qu'il fonctionne deux fois plus vite avec ChartRedraw() que sans. En même temps, il se secoue davantage.

Il y a toujours un problème avec ChartNavigate(). Est-ce que ça sera réparé un jour ? Ou n'est-ce pas considéré comme un bogue ?

Y a-t-il déjà un article sur ce sujet dans Service Desk ? Ou pour en ajouter d'autres ? ))

 

Erreur d'exécution : dépassement de pile

class A {
        static  bool OrderSend( const MqlTradeRequest& request, MqlTradeResult& result, bool async_mode = false )
	void function();
};
void A::function()
{...
	OrderSend(...) // ошибка выполнения возникает здесь
	A::OrderSend(...) // не помогает
...}

Si nous remplaçons OrderSend par n'importe quel autre nom, tout va bien.

la présence de statique n'affecte pas l'erreur

en appelant A::OrderSend()- l'erreur n'est pas affectée

 
A100:

Erreur d'exécution par dépassement de pile

Si vous remplacez OrderSend par n'importe quel autre nom, c'est bon.


car le contexte doit être résolu

::OrderSend

 

Je pense que je n'appelle pas ::OrderSend, mais A::OrderSend()

devrait fonctionner

 
A100:

Je pense que je n'appelle pas ::OrderSend, mais A::OrderSend()

A quelle ligne pensez-vous ?

que vous venez de

void A::function()
{...
	OrderSend(...) // ошибка выполнения возникает здесь
вызывается именно ваша A::OrderSend
Si vous voulez appeler le terminal, faites : : avant Ordersend
 
Merci, j'ai trouvé la raison - je retire la question - je l'ai bouclée moi-même.
 
A100:
Merci, j'ai trouvé la raison - je retire la question - je l'ai bouclée moi-même.

Je comprends que vous vous êtes appelé dans vos Ordres sans : :

Je m'y suis pris tout de suite, quand j'ai redéfini Print et Comment dans la classe. maintenant je le fais tout le temps :)

 
sergeev:

J'ai cru comprendre que vous vous êtes appelé dans vos ordres sans : :

Eh bien, oui, bien que A::OrderSend ait 3(trois) paramètres, maisce dernier est la valeur par défaut et le compilateur ne pouvait pas (et ne devait pas) faire la distinction avec ::OrderSend par le nombre de paramètres.
 
Pouvez-vous me dire comment créer un sondage sur le forum ?