Erreurs, bugs, questions - page 1027

 

Al_key:

Le commutateur /portable va-t-il aider ?

Soit vous désactivez définitivement /portable, soit vous désactivez l'UAC et exécutez le terminal sans /portable après le redémarrage.

 
avoitenko:

Bild 842/64 bit. Lors de la déclaration de canva :

Une erreur apparaît :

Variable statique non résolue "CCanvas::m_default_colors".

Suis-je le seul à avoir ce problème ?
Les exigences relatives aux variables statiques ont changé.

L'erreur s'est produite parce que vous utilisez un objet avec des variables statiques au niveau global et dans ce cas, le compilateur exige qu'un tableau statique soit placé explicitement.
Ceci est nécessaire pour que le programmeur puisse spécifier explicitement l'ordre d'initialisation des membres statiques des classes/structures.

Le problème ici est que le tableau statique 'CCanvas::m_default_colors' peut être utilisé dans le constructeur de CCanvas pour la lecture et ensuite, s'il est placé et initialisé par le programmeur après le placement de l'objet de classe CCanvas, ses valeurs dans le constructeur de CCanvas::CCanvas ne seront pas celles attendues. Par conséquent, le compilateur vérifie que les membres statiques de la classe/structure sont placés et initialisés avant d'utiliser l'objet classe/structure.

On va y réfléchir, on va peut-être changer quelque chose.

Документация по MQL5: Основы языка / Переменные / Создание и уничтожение объектов
Документация по MQL5: Основы языка / Переменные / Создание и уничтожение объектов
  • www.mql5.com
Основы языка / Переменные / Создание и уничтожение объектов - Документация по MQL5
 

Continuant à passer à mcuel 5. Dans mt4 ce code fonctionnait bien. Maintenant j'ai un problème pour me connecter à mkuell.

#import "libmysql.dll"
int mysql_init(int db);
int mysql_errno(int TMYSQL);
int mysql_real_connect( int TMYSQL,string host,string user,string password, string DB,int port,int socket,int clientflag);
int mysql_real_query(int TMSQL,string query,int length);
void mysql_close(int TMSQL);
#import

int i = 0;
int mysql;
string query;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   
   mysql = mysql_init(mysql);
   if (mysql!=0) Print("allocated");
   string host="localhost";
   string user="root";
   string password="1111";
   string DB="fxdb";
   int clientflag=0;
   int port=3306;
   string socket="";
   int
   res=mysql_real_connect(mysql,host,user,password,DB,port, socket,clientflag);
   int err=GetLastError();
   if (res==mysql) Print("connected");
   else Print("error=",mysql," ",mysql_errno(mysql)," ");
   
 
   
   //mysql_real_query(mysql,query,length);
   //int myerr=mysql_errno(mysql);
   //if (myerr>0)Print("error=",myerr); else Print(i, "good"); 

//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
      mysql_close(mysql);
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   
  }
//+------------------------------------------------------------------+
//| ChartEvent function                                              |
//+------------------------------------------------------------------+
void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam)
  {
//---
   
  }
//+------------------------------------------------------------------+

Il donne une erreur :

2013.08.03 12:41:41 testMySql (AUDCAD,H1) error=313111904 2005

Il y a un avertissement à propos d'une erreur de type de variable de socket, mettre NULL à la place d'une variable n'aide pas. J'ai aussi entendu dire que МТ5 transfère les chaînes de caractères aux DLL d'une manière spéciale. C'est comme ça ? Veuillez me conseiller sur la manière de traiter ce problème.

 
mql5:
Les exigences relatives au placement des variables statiques ont changé.
Par conséquent, le compilateur vérifie que les membres statiques de la classe/structure sont placés et initialisés avant l'utilisation de l'objet classe/structure.
Merci. Tout a un sens maintenant.
 
Al_key:
J'ai également entendu dire que MT5 envoie les chaînes de caractères à la DLL d'une manière spéciale. C'est ce genre de chose ? Comment y faire face, veuillez me conseiller.
Vous trouverez dans cet article un exemple concret de connexion à la base de données MySQL.
 
Une autre question : j'ai installé MT5 standard pour la première fois, le compte de démonstration est metaquotes. Je ne vois que 4 paires de majors, pas de USDCAD. Après un certain temps, de nombreuses paires différentes ont été ajoutées, notamment CFD et Knaadec. Ensuite, je suis passé à /portable. Bien sûr, les paires minimales sont à nouveau définies par défaut, mais cette fois, d'autres paires ne sont pas chargées pour une raison quelconque et il est très important d'avoir la démo USDCAD dans le cinquième MT.
 

Je mémorise le TF, je passe au M1, je reviens à l'actuel.

Problème : je ne me souviens pas d' assigner le TF actuel.

int current_period_tf;
   string n;
   if(_Period==PERIOD_M1)  {current_period_tf=0x00000001;};
   if(_Period==PERIOD_M2)  {current_period_tf=0x00000002;};
   if(_Period==PERIOD_M3)  {current_period_tf=0x00000004;};
   if(_Period==PERIOD_M4)  {current_period_tf=0x00000008;};
   if(_Period==PERIOD_M5)  {current_period_tf=0x00000010;};
   if(_Period==PERIOD_M6)  {current_period_tf=0x00000020;};
   if(_Period==PERIOD_M10) {current_period_tf=0x00000040;};
   if(_Period==PERIOD_M12) {current_period_tf=0x00000080;};
   if(_Period==PERIOD_M15) {current_period_tf=0x00000100;};
   if(_Period==PERIOD_M20) {current_period_tf=0x00000200;};
   if(_Period==PERIOD_M30) {current_period_tf=0x00000400;};
   if(_Period==PERIOD_H1)  {current_period_tf=0x00000800;};
   if(_Period==PERIOD_H2)  {current_period_tf=0x00001000;};
   if(_Period==PERIOD_H3)  {current_period_tf=0x00002000;};
   if(_Period==PERIOD_H4)  {current_period_tf=0x00004000;};
   if(_Period==PERIOD_H6)  {current_period_tf=0x00008000;};
   if(_Period==PERIOD_H8)  {current_period_tf=0x00010000;};
   if(_Period==PERIOD_H12) {current_period_tf=0x00020000;};
   if(_Period==PERIOD_D1)  {current_period_tf=0x00040000;};
   if(_Period==PERIOD_W1)  {current_period_tf=0x00080000;};
   if(_Period==PERIOD_MN1) {current_period_tf=0x00100000;};
   ChartSetSymbolPeriod(ChartID(),_Symbol,PERIOD_M1);
   ObjectSetInteger(0,n,OBJPROP_TIMEFRAMES,current_period_tf);
   ChartSetSymbolPeriod(ChartID(),_Symbol,current_period_tf);

Je peux passer en M1

ChartSetSymbolPeriod(ChartID(),_Symbol,PERIOD_M1);

Pour un objet

ObjectSetInteger(0,n,OBJPROP_TIMEFRAMES,current_period_tf);

ça marche. Pour un graphique

ChartSetSymbolPeriod(ChartID(),_Symbol,current_period_tf);

le compilateur donne

'current_period_tf' - can't convert enum

Quel est le mystère ?

J'ai essayé de convertir en chaîne et de changer de type, mais ça ne marche pas.

 
Al_key:
Une autre question : j'ai installé MT5 standard pour la première fois, le compte de démonstration est metaquotes. Je ne vois que 4 paires de majors, pas de USDCAD. Après un certain temps, de nombreuses paires différentes ont été ajoutées, notamment CFD et Knaadec. Ensuite, je suis passé à /portable. Bien sûr, les paires minimales sont de nouveau par défaut, mais cette fois-ci, pour une raison quelconque, d'autres paires ne sont pas chargées et je veux absolument avoir la démo USDCAD dans MT5.
Enregistrer le profil configuré par défaut Fichier - Profils - Par défaut
 
Silent:

...

Quel est le mystère ?

J'ai essayé de convertir via les types de chaîne et de changement, mais cela ne fonctionne pas.

int current_period_tf;
ENUM_TIMEFRAMES current_period_tf;
 
tol64:

Alors a) pourquoi cela fonctionne-t-il pour l'objet b) si on le remplace, il commence à s'effriter

'0x00000008' - can't convert enum

Pas toutes, seulement 18 lignes sur 21...

Je vais essayer de les réécrire tous, ce n'est toujours pas clair. Il semble qu'il s'agisse d'un seul type.