Errori, bug, domande - pagina 991

 
costy_:

Quando lo richiamo ottengo

2013.05.31 13:08:41 temp (AUDUSD,M5) TERMINAL_COMPANY = MetaQuotes Software Corp.

Dovrebbe essere un altro broker, o qualcosa è sbagliato, grazie.

 AccountInfoString(ACCOUNT_SERVER)

Il terminale appartiene a MetaQuotes Software Corp.

brokerAccountInfoString(ACCOUNT_SERVER)

 
pako:

Il terminale appartiene a MetaQuotes Software Corp.

brokerAccountInfoString(ACCOUNT_SERVER)

Grazie, alla fine l'ho perso.
 

Buon pomeriggio!

Sto scrivendo un indicatore multivaluta. Quando cambio di nuovo il codice, si compila bene, ma quando provo a mettere un indicatore su un grafico, ottengo "file ex5 non valido". Ho provato a salvarlo di nuovo con un nome diverso - la stessa cosa. Si scopre che il problema è nel codice, ma la compilazione va bene.

//+------------------------------------------------------------------+
//|                                                      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)
  {
//---
   
  }
//+------------------------------------------------------------------+

Come posso aiutare?

Grazie!

 
ns_k:

Buon pomeriggio!

Sto scrivendo un indicatore multivaluta. Quando cambio di nuovo il codice, si compila bene, ma quando provo a mettere un indicatore su un grafico, ottengo "file ex5 non valido". Ho provato a salvarlo di nuovo con un nome diverso - la stessa cosa. Si scopre che il problema è nel codice, ma la compilazione va bene.

Come posso aiutare?

Grazie!

La compilazione avviene senza errori o avvertimenti? È accurato?
 
tol64:
La compilazione avviene senza errori o avvertimenti? Sei sicuro?
Non ci sono errori, ci sono avvertimenti, per lo più innocui come valori inutilizzati. Ma c'è questo indicatore che la quantità di buffer è inferiore al necessario. Cercherò di scavare qui

 
ns_k:
Non ci sono errori, ci sono avvertimenti, per lo più innocui come valori inutilizzati. Tuttavia, c'è questo indicatore che la quantità di buffer è inferiore al necessario. Proverò a scavare qui.

Sì, è esattamente questo. È qui che si trova l'errore:

//+------------------------------------------------------------------+
//| 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);
  }
Evidenziato in rosso. Sostituire con 1.
 
#property indicator_buffers 1
#property indicator_plots   2
Il numero di buffer non può essere inferiore al numero di trame. Questo è ciò che il compilatore ti dice nel messaggio.
 
tol64:

Sì, è esattamente questo. Ecco cosa c'è che non va:

Evidenziato in rosso. Sostituire con 1.
#property indicator_buffers 1
#property indicator_plots   2
Спасибо всем!
 
ns_k:

MT4 Costruito 500. Ho impostato l'allarme ad un certo livello, si spegne, tutto va bene. Se disattivo l'allarme (spazio), appare come sospeso. Poi lo strumento raggiunge un valore di soglia e scatta l'allarme. È così che dovrebbe essere?

ps. Sì, una nota a margine. Prima ho evidenziato tutti gli avvisi con il mio mouse (6 di loro) e ho premuto la barra spaziatrice, sono diventati tutti sospesi. Dopo averne innescato uno, l'ho già spento con la sola barra spaziatrice e si innesca ancora

 

Ne spruzzerò ancora un po'.

//+------------------------------------------------------------------+
//|                                                      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)
  {
//---
   
  }
//+------------------------------------------------------------------+

All'avvio il terminale giura che il simbolo specificato non è selezionato. L'ho trasferito su un altro MT5 via cloud - funziona, e con stringhe commentate usando i ticker.

Cercherei di trovare la ragione, ma non so da dove cominciare a cercare un errore così raro. Forse dovrei reinstallare subito il terminale?

Motivazione: