Erreurs, bugs, questions - page 991

 
pako:

Le terminal appartient à MetaQuotes Software Corp.

courtierAccountInfoString(ACCOUNT_SERVER)

Merci, je l'ai perdue après tout.
 

Bonjour !

J'écris un indicateur multidevises. Lorsque je modifie à nouveau le code, il se compile bien, mais lorsque j'essaie de mettre un indicateur sur un graphique, j'obtiens "invalid ex5 file". J'ai essayé de le réenregistrer sous un autre nom - même chose. Il s'avère que le problème se trouve dans le code, mais la compilation est correcte.

//+------------------------------------------------------------------+
//|                                                      Therm02.mq5 |
//|                        Copyright 2013, MetaQuotes Software Corp. |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+

#include <ST_ServicesAndAbstracts.mqh>

#property copyright "Copyright 2013, MetaQuotes Software Corp."
#property link      "http://www.mql5.com"
#property version   "1.00"
#property indicator_separate_window
#property indicator_minimum 0
#property indicator_maximum 120
#property indicator_buffers 1
#property indicator_plots   2
//--- plot Label1
#property  indicator_label1  "Label1"
#property  indicator_type1   DRAW_LINE
#property  indicator_color1  clrBlack
#property  indicator_style1  STYLE_SOLID
#property  indicator_width1  1
//--- indicator buffers
double         gThermB[];

double         gEURThermB[];
double         gCHFThermB[];

CRangeManager  *gEURRM, *gCHFRM;

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   SetIndexBuffer(0,gEURThermB,INDICATOR_DATA);
   SetIndexBuffer(0,gCHFThermB,INDICATOR_DATA);
   gEURRM = new CRangeManager(1,0.2,20,"EURUSD");
   gCHFRM = new CRangeManager(1,0.2,20,"USDCHF");
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate (const int rates_total,      // size of input time series
                 const int prev_calculated,  // bars handled in previous call
                 const datetime& time[],     // Time
                 const double& open[],       // Open
                 const double& high[],       // High
                 const double& low[],        // Low
                 const double& close[],      // Close
                 const long& tick_volume[],  // Tick Volume
                 const long& volume[],       // Real Volume
                 const int& spread[]         // Spread
   )

  {
//---
   double lEUR[], lCHF[];
   int copied;
   copied=CopyClose("EURUSD",PERIOD_CURRENT,0,5000,lEUR); 
   if (copied==-1){Print("Ждите...EUR");return(0);}
   copied=CopyClose("USDCHF",PERIOD_CURRENT,0,5000,lCHF); 
   if (copied==-1){Print("Ждите...CHF");return(0);}


   sThermometer lT;
   for(int i=prev_calculated;i<rates_total;i++)
      {
         lT = gEURRM.getState(lEUR[i]);
         gEURThermB[i] = lT.currentT; 
         
         lT = gEURRM.getState(lCHF[i]);
         gEURThermB[i] = lT.currentT; 
      }
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+
//| TradeTransaction function                                        |
//+------------------------------------------------------------------+
void OnTradeTransaction(const MqlTradeTransaction& trans,
                        const MqlTradeRequest& request,
                        const MqlTradeResult& result)
  {
//---
   
  }
//+------------------------------------------------------------------+

Comment puis-je aider ?

Merci !

 
ns_k:

Bonjour !

J'écris un indicateur multidevises. Lorsque je modifie à nouveau le code, il se compile bien, mais lorsque j'essaie de mettre un indicateur sur un graphique, j'obtiens "invalid ex5 file". J'ai essayé de le réenregistrer sous un autre nom - même chose. Il s'avère que le problème se trouve dans le code, mais la compilation est correcte.

Comment puis-je aider ?

Merci !

La compilation se déroule-t-elle sans erreur ni avertissement? Est-il exact ?
 
tol64:
La compilation se déroule-t-elle sans erreur ni avertissement? Vous êtes sûr ?
Il n'y a pas d'erreurs, il y a des avertissements, la plupart inoffensifs comme des valeurs inutilisées. Mais il y a cet indicateur que la quantité de tampons est inférieure à ce qui est nécessaire. Je vais essayer de creuser ici

 
ns_k:
Il n'y a pas d'erreurs, il y a des avertissements, la plupart inoffensifs comme des valeurs inutilisées. Cependant, il y a cet indicateur que la quantité de tampons est inférieure à ce qui est nécessaire. Je vais essayer de creuser ici.

Oui, c'est exactement ça. C'est là que réside l'erreur :

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   SetIndexBuffer(0,gEURThermB,INDICATOR_DATA);
   SetIndexBuffer(0,gCHFThermB,INDICATOR_DATA);
   gEURRM = new CRangeManager(1,0.2,20,"EURUSD");
   gCHFRM = new CRangeManager(1,0.2,20,"USDCHF");
//---
   return(INIT_SUCCEEDED);
  }
Surligné en rouge. Remplacer par 1.
 
#property indicator_buffers 1
#property indicator_plots   2
Le nombre de tampons ne peut être inférieur au nombre de parcelles. C'est ce que le compilateur vous indique dans le message.
 
tol64:

Oui, c'est exactement ça. C'est ça qui ne va pas :

Surligné en rouge. Remplacer par 1.
#property indicator_buffers 1
#property indicator_plots   2
Спасибо всем!
 
ns_k:

MT4 Built 500. Je règle l'alerte à un certain niveau, elle se déclenche, tout va bien. Je désactive l'alerte (espace), elle apparaît comme suspendue. Ensuite, l'instrument atteint le seuil et l'alerte est déclenchée. Est-ce que c'est comme ça que ça doit être ?

ps. Oui, un mot d'accompagnement. J'ai d'abord mis en surbrillance toutes les alertes avec ma souris (6 d'entre elles) et j'ai appuyé sur la barre d'espace, elles sont toutes devenues suspendues. Après en avoir déclenché un, je l'ai déjà désactivé avec la barre d'espace uniquement et il se déclenche toujours

 

Je vais en rajouter un peu.

//+------------------------------------------------------------------+
//|                                                      Therm02.mq5 |
//|                        Copyright 2013, MetaQuotes Software Corp. |
//|                                              https://www.mql5.com |
//+------------------------------------------------------------------+

//#include <ST_ServicesAndAbstracts.mqh>

#property copyright "Copyright 2013, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property indicator_separate_window
#property indicator_minimum 0
#property indicator_maximum 120
#property indicator_buffers 2
#property indicator_plots   2
//--- plot Label1
#property  indicator_label1  "Label1"

#property  indicator_type1   DRAW_LINE
#property  indicator_color1  clrBlack
#property  indicator_style1  STYLE_SOLID
#property  indicator_width1  1
//--- indicator buffers
double         gThermB[];

double         gEURThermB[];
double         gCHFThermB[];

//CRangeManager  *gEURRM, *gCHFRM;

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   SetIndexBuffer(0,gEURThermB,INDICATOR_DATA);
   SetIndexBuffer(1,gCHFThermB,INDICATOR_DATA);
   //gEURRM = new CRangeManager(1,0.2,20,"EURUSD");
   //gCHFRM = new CRangeManager(1,0.2,20,"USDCHF");
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate (const int rates_total,      // size of input time series
                 const int prev_calculated,  // bars handled in previous call
                 const datetime& time[],     // Time
                 const double& open[],       // Open
                 const double& high[],       // High
                 const double& low[],        // Low
                 const double& close[],      // Close
                 const long& tick_volume[],  // Tick Volume
                 const long& volume[],       // Real Volume
                 const int& spread[]         // Spread
   )

  {
//---
   double lEUR[], lCHF[];
   int copied;
  // copied=CopyClose("EURUSD",PERIOD_CURRENT,0,5000,lEUR); 
   if (copied==-1){Print("Ждите...EUR");return(0);}
  // copied=CopyClose("USDCHF",PERIOD_CURRENT,0,5000,lCHF); 
   if (copied==-1){Print("Ждите...CHF");return(0);}


   //sThermometer lT;
   for(int i=prev_calculated;i<5000;i++)
      {
         //lT = gEURRM.getState(lEUR[i]);
       //  gEURThermB[i] = lT.currentT; 
         
     //    lT = gCHFRM.getState(lCHF[i]);
     //    gCHFThermB[i] = lT.currentT; 
      }
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+
//| TradeTransaction function                                        |
//+------------------------------------------------------------------+
void OnTradeTransaction(const MqlTradeTransaction& trans,
                        const MqlTradeRequest& request,
                        const MqlTradeResult& result)
  {
//---
   
  }
//+------------------------------------------------------------------+

Au démarrage, le terminal jure que le symbole spécifié n'est pas sélectionné. Je l'ai transféré sur un autre MT5 via le cloud - cela fonctionne, et avec des chaînes commentées utilisant des tickers.

J'essaierais bien d'en trouver la raison, mais je ne sais pas par où commencer à chercher une telle erreur parasite. Je devrais peut-être réinstaller le terminal en une seule fois ?

 
ns_k:

Je vais en rajouter un peu.

Au démarrage, le terminal jure que le symbole spécifié n'est pas sélectionné. Je l'ai transféré sur un autre MT5 via le cloud - cela fonctionne, et avec des chaînes commentées utilisant des tickers.

J'essaierais bien d'en trouver la raison, mais je ne sais pas par où commencer à chercher une telle erreur parasite. Peut-être, pourquoi ne pas réinstaller le terminal en une seule fois ?

Ajouter les symboles utilisés à la fenêtre Market Watch pendant l'initialisation de l'indicateur.

SymbolSelect()