Erreurs, bugs, questions - page 2314

 
SuhanovDM94:

Bonjour à tous ! Désolé pour la question stupide. Les gars, pourriez-vous me dire comment faire pour que la propriété Pressed d'un bouton soit vraie quand on clique sur le bouton gauche et fausse quand on clique sur le bouton gauche. Maintenant la situation est telle, que rien ne se passe en appuyant dessus, et en relâchant Pressed change sa valeur en son contraire.

Je comprends que je dois remplacer les gestionnaires d'événements CButton::OnMouseUp et CButton::OnMouseDown, mais je n'ai aucune idée de l'endroit où le faire. Un indice s'il vous plaît. Merci d'avance !

Si quelqu'un peut aider sur le même sujet, ce serait apprécié.

 
Baruban:

Si quelqu'un peut aider sur le même sujet, ce serait apprécié.

L'événement est généré uniquement lorsque le bouton de la souris est enfoncé, mais pas lorsque

 
Vitaly Muzichenko:

L'événement est généré uniquement lorsque le bouton de la souris est enfoncé, et non lorsqu'il est cliqué.

Mais il y a un gestionnaire de clic, n'est-ce pas ? Il doit donc y avoir un événement de clic.

 
SuhanovDM94:

Mais il y a un responsable de la presse, n'est-ce pas ? Il doit donc y avoir un événement de presse, aussi.

Tu n'es pas confus ? Il y a l'événement CHARTEVENT_CLICK - clic de la souris sur le graphique ; mais pas de clic...

 
Alexey Viktorov:

Tu ne confonds pas les choses ? Il existe un événement CHARTEVENT_CLICK - un clic de souris sur un graphique ; mais pas un clic...

Il y en a un, c'est vrai. C'est juste que la classe CButton possède deux gestionnaires d'événements internes : OnMouseDown() et OnMouseUp(). J'ai donc pensé qu'il y avait peut-être aussi des événements correspondants ?

 
SuhanovDM94:

Oui, c'est vrai. C'est juste que la classe CButton possède deux gestionnaires d'événements internes : OnMouseDown() et OnMouseUp(). J'ai donc pensé qu'il y avait peut-être aussi des événements correspondants ?

Je n'ai pas regardé le SB, mais apparemment il y a une presse OBJPROP_STATE == true, l'autre OBJPROP_STATE == false. Ou peut-être que je me trompe.

 
Bonjour à tous, pouvez-vous m'aider ? Pourquoi le graphique descend-il à la fin du processus d'optimisation ?
Dossiers :
 
Les éditeurs MT4 et MT5 se plantent lorsqu'on passe la souris sur "func" dans la ligne "int i = func( 0, 1 ) ;" et qu'on sélectionne l'option "Go to definition" (ou qu'on appuie sur Alt+G).

MQL4 build 1910
MQL5 build 1931

template<typename type>  
type func( type a, type b = 1 ){ return ( 0 ); }

int i = func( 0, 1 );

void OnStart(){ }  

Dossiers :
altg.jpg  57 kb
 

Forum sur le trading, les systèmes de trading automatisé et les tests de stratégies de trading

L'équivalent en MQL du type None de Python ?

nicholi shen, 2018.10.28 21:52

Pas dans MQL, plus maintenant en tout cas. Il est en fait deux fois plus lent que la référence en débogage, et suffisamment proche de la même chose lorsqu'il est compilé normalement pour que cela n'ait pas vraiment d'importance. Essayez par vous-même.

#define  ITERATIONS 1000000

void OnStart()
{
   {
      ulong time = GetMicrosecondCount();
      ulong sum = 0;
      for(int i=0; i<ITERATIONS; i++){
         string r = string(rand());
         sum += by_ref(r);
      }
      time = GetMicrosecondCount() - time;
      printf("%s took %.3f milliseconds: sum=%dll", "by_ref", time/1000.0, sum);
   }{
      ulong time = GetMicrosecondCount();
      ulong sum = 0;
      for(int i=0; i<ITERATIONS; i++)
         sum += by_val(string(rand()));
      time = GetMicrosecondCount() - time;
      printf("%s took %.3f milliseconds: sum=%dll", "by_val", time/1000.0, sum);
   }
}
//+------------------------------------------------------------------+

int by_ref(string &var){ return int(var) % 100; }
int by_val(string  var){ return int(var) % 100; }

Pourquoi by_ref est-il plus lent que by_val ?

 
fxsaber:

Pourquoi by_ref est-il plus lent que by_val ?

D'où vient-elle ?

Si le code est le même

//Test.mqh
        int by_ref(string& var) { return int(var) % 100; }
        int by_val(string  var) { return int(var) % 100; }
//Test.mq5
#include "Test.mqh"
#define  ITERATIONS 1000000
#define  MACRO( X ) \
        { \
                ulong time = GetMicrosecondCount(); \
                for(int i=0; i<ITERATIONS; i++) \
                { \
                        string r = string( rand ); \
                        sum_##X += by_##X(r); \
                } \
                time_##X = GetMicrosecondCount() - time; \
        }
void OnStart()
{
        for ( int i = 0; i < 10; i++ )
                OnStart2( rand());
}
void OnStart2( int rand )
{
        long time_ref, sum_ref = 0;
        long time_val, sum_val = 0;
        MACRO( ref )
        MACRO( val )
        printf( "%+10.3f:%d", (time_ref-time_val)/1000.0, sum_ref-sum_val );
}

ainsi que le résultat (différence de temps d'exécution) :

+12.221:0
+5.099:0
+0.149:0
-13.729:0
+14.531:0
-27.429:0
+26.405:0
-0.839:0
+5.400:0
-4.882:0

alternant (+\-) dans des limites insignifiantes

Raison: