Erreurs, bugs, questions - page 1778

 

Erreur pendant l'exécution suite à la compilation

#define MACRO( x )      #x
void OnStart()
{
        Print( MACRO( "1\0" )); //равносильно Print( "\"1\\0\"" );
}

Résultat : 1

Attendu : "1\0".

2 erreurs : guillemets manquants " et caractère \ interprété de manière erronée.

et ensuite

void OnStart()
{
        Print( MACRO( 1\0 )); //Error: '\' - illegal escape sequence
}
erreur de compilation alors que le résultat attendu était "10".
 
Vladislav Andruschenko:

Oui, mais vous ne pouvez pas expliquer cela aux clients, n'est-ce pas ?

Imaginez que l'expert fonctionne, il fonctionne, vous allez dormir, vous vous endormez, vous vous réveillez et l'expert ne fonctionne pas, pourquoi ?

Il est utile de redémarrer avec un court délai, comme ceci :

int err=-1;
      int count=5;
      {while((err!=0)&&(count>0))
      {
         ResetLastError();
         EventSetMillisecondTimer(MSTimerSet);                    //Установка таймера XXX миллисекунд
         err=GetLastError();
         Print("EventSetMillisecondTimer n=",count," err >>",err);
         {if(err!=0){Sleep(50);}}
      }}//while((err!=0)&&(count>0))
 
Yury Kirillov:

Il est utile de redémarrer avec un léger retard, en quelque sorte :

int err=-1;
      int count=5;
      {while((err!=0)&&(count>0))
      {
         ResetLastError();
         EventSetMillisecondTimer(MSTimerSet);                    //Установка таймера XXX миллисекунд
         err=GetLastError();
         Print("EventSetMillisecondTimer n=",count," err >>",err);
         {if(err!=0){Sleep(50);}}
      }}//while((err!=0)&&(count>0))
J'ai découvert par expérience que la minuterie se bloque lorsque l'Internet tombe en panne. Le terminal se fige et la minuterie raccroche. C'est-à-dire qu'il peut raccrocher sans raison. Quand l'Internet est lent.

Alors je l'ai fait différemment, à savoir. Lancer le minuteur dans un tic-tac.
 

Erreur d'exécution

typedef void (*fn)();
class A { public:
        fn a;
};
class B : public A { public:
        void a() { Print( __FUNCSIG__ ); }
};
void OnStart()
{
        B b;
        b.a();
}

Résultat : appel de pointeur de fonction invalide ; l'exécution de B::a() était attendue.

et ici -> erreur de compilation

typedef void (*fn)( int );
class A { public:
        fn a;
};
class B : public A { public:
        void a() { Print( __FUNCSIG__ );  }
};
void OnStart()
{
        B b;
        b.a(); //Error: 'a' - wrong parameters count
}
 
MT4 saute les événements utilisateurs en packs. Est-ce une fonctionnalité ou un bug ?
 
Andrey Dik:
MT4 saute les événements utilisateur dans les packs. Est-ce que c'est un bug ou une anomalie ?


Je viens de vérifier sur le tableau de bord - tout est ok, tous les événements fonctionnent bien.

 
Vladislav Andruschenko:

Je viens de vérifier sur le tableau de bord - tout est OK, tous les événements fonctionnent normalement.

J'ai lancé des espions sur quelques symboles et l'EA reçoit des événements de ces espions lorsque les ticks arrivent. Sur MT5, tous les événements ont le temps d'arriver, mais sur MT4, je peux voir des blocages parfois pendant une seconde ou plus.
Rien de lourd ne tourne, un graphique est ouvert.
 
Je ne parviens pas à obtenir une valeur adéquate de la marge requise pour ouvrir une position. J'obtiens la même valeur pour tous les symboles, différents courtiers ont des valeurs différentes, l'un affiche 0.0 pour tous les symboles, un autre affiche 100000.0.

Que se passe-t-il avec MT4 ? Win 10 64, MT4 build 1031

le faire :

void OnStart()
{
  Print(MarketInfo (Symbol (), MODE_MARGININIT));
  Print(MarketInfo (Symbol (), MODE_MARGINMAINTENANCE));
  Print(MarketInfo (Symbol (), MODE_MARGINHEDGED));
  Print(MarketInfo (Symbol (), MODE_MARGINREQUIRED));
  Print(SymbolInfoDouble (Symbol (),SYMBOL_MARGIN_INITIAL));
}
Soit MT4 est totalement détraqué, soit je suis complètement désappris et ne comprends plus MT4.

Voici les valeurs obtenues auprès de 2 courtiers :


2017.01.31 22:15:59.312 Script MarginReq AUDCHF,M15 : retiré
2017.01.31 22:15:59.310 MarginReq AUDCHF,M15 : raison de désinit 0
2017.01.31 22:15:59310 MarginReq AUDCHF,M15 : 0.0
2017.01.31 22:15:59.310 MarginReq AUDCHF,M15 : 1000.0
2017.01.31 22:15:59.310 MarginReq AUDCHF,M15 : 100000.0
2017.01.31 22:15:59.310 MarginReq AUDCHF,M15 : 0.0
2017.01.31 22:15:59.310 MarginReq AUDCHF,M15 : 0.0
2017.01.31 22:15:59.309 MarginReq AUDCHF,M15 : initialisé
2017.01.31 22:15:59.300 MarginReq AUDCHF,M15 entrées : Input1=0 ;
2017.01.31 22:15:57.899 Script MarginReq AUDCHF,M15 : chargé avec succès
2017.01.01.31 22:13:38.077 Script MarginReq AUDCHF,M15 : retiré
2017.01.31 22:13:38.075 MarginReq AUDCHF,M15 : raison de désinit 0
2017.01.31 22:13:38.075 MarginReq AUDCHF,M15 : 100000.0
2017.01.31 22:13:38.075 MarginReq AUDCHF,M15 : 1000.0
2017.01.31 22:13:38.075 MarginReq AUDCHF,M15 : 100000.0
2017.01.31 22:13:38.075 MarginReq AUDCHF,M15 : 0.0
2017.01.31 22:13:38.075 MarginReq AUDCHF,M15 : 100000.0
2017.01.31 22:13:38.075 MarginReq AUDCHF,M15 : initialisé
2017.01.01.31 22:13:38.066 MarginReq AUDCHF,M15 entrées : Input1=0 ;
2017.01.31 22:13:36.806 Script MarginReq AUDCHF,M15 : chargé correctement
C'est des conneries.
 
Andrey Dik:
Je n'arrive pas à obtenir une valeur adéquate de la marge requise pour ouvrir une position. J'obtiens la même valeur pour tous les symboles, différents courtiers ont des valeurs différentes, l'un affiche 0.0 pour tous les symboles, un autre affiche 100000.0.

Que se passe-t-il avec MT4 ? Win 10 64, MT4 build 1031

le faire :

void OnStart()
{
  Print(MarketInfo (Symbol (), MODE_MARGININIT));
  Print(MarketInfo (Symbol (), MODE_MARGINMAINTENANCE));
  Print(MarketInfo (Symbol (), MODE_MARGINHEDGED));
  Print(MarketInfo (Symbol (), MODE_MARGINREQUIRED));
  Print(SymbolInfoDouble (Symbol (),SYMBOL_MARGIN_INITIAL));
}
Soit MT4 est totalement détraqué, soit je suis complètement désappris et ne comprends plus MT4.

Voici les valeurs obtenues auprès de 2 courtiers :


2017.01.31 22:15:59.312 Script MarginReq AUDCHF,M15 : retiré
2017.01.31 22:15:59.310 MarginReq AUDCHF,M15 : raison de désinit 0
2017.01.31 22:15:59310 MarginReq AUDCHF,M15 : 0.0
2017.01.31 22:15:59.310 MarginReq AUDCHF,M15 : 1000.0
2017.01.31 22:15:59.310 MarginReq AUDCHF,M15 : 100000.0
2017.01.31 22:15:59.310 MarginReq AUDCHF,M15 : 0.0
2017.01.31 22:15:59.310 MarginReq AUDCHF,M15 : 0.0
2017.01.31 22:15:59.309 MarginReq AUDCHF,M15 : initialisé
2017.01.31 22:15:59.300 MarginReq AUDCHF,M15 entrées : Input1=0 ;
2017.01.31 22:15:57.899 Script MarginReq AUDCHF,M15 : chargé avec succès
2017.01.01.31 22:13:38.077 Script MarginReq AUDCHF,M15 : retiré
2017.01.31 22:13:38.075 MarginReq AUDCHF,M15 : raison de désinit 0
2017.01.31 22:13:38.075 MarginReq AUDCHF,M15 : 100000.0
2017.01.31 22:13:38.075 MarginReq AUDCHF,M15 : 1000.0
2017.01.31 22:13:38.075 MarginReq AUDCHF,M15 : 100000.0
2017.01.31 22:13:38.075 MarginReq AUDCHF,M15 : 0.0
2017.01.31 22:13:38.075 MarginReq AUDCHF,M15 : 100000.0
2017.01.31 22:13:38.075 MarginReq AUDCHF,M15 : initialisé
2017.01.01.31 22:13:38.066 MarginReq AUDCHF,M15 entrées : Input1=0 ;
2017.01.31 22:13:36.806 Script MarginReq AUDCHF,M15 : chargé correctement
C'est des conneries.

essayez

Contrôle de la marge libre du compte

 
Vladislav Andruschenko:

Essayez

Contrôle de la marge libre du compte

Ça n'a pas marché.

Et j'ai compris pourquoi. Pour que toutes ces fonctions fonctionnent correctement, vous devez avoir les symboles appropriés ouverts pour le calcul dans l'aperçu du marché. Dans MT5, cela se fait automatiquement (en mode arrière-plan), et dans MT4, vous devez ouvrir les symboles explicitement dans la revue de marché.

Je suis curieux, comment fonctionnent vos EAs qui sont sur le marché ?

Je n'ai pas trouvé d'informations sur ce sujet dans l'aide.

PS. Print(MarketInfo(Symbol (), MODE_MARGINREQUIRED)) ; ceci nous donnera ce dont nous avons besoin. Mais vous devrez essayer de le faire plusieurs fois.
Raison: