Erros, bugs, perguntas - página 991

[Excluído]  
costy_:

Quando o chamo, recebo

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

Deve ser um corretor diferente, ou algo está errado, obrigado.

 AccountInfoString(ACCOUNT_SERVER)

terminal pertence a MetaQuotes Software Corp.

brokerAccountInfoString(ACCOUNT_SERVER)

 
pako:

terminal pertence a MetaQuotes Software Corp.

brokerAccountInfoString(ACCOUNT_SERVER)

Obrigado, afinal de contas perdi-o.
 

Boa tarde!

Estou a escrever um indicador de múltiplas moedas. Quando altero o código novamente, ele compila bem, mas quando tento colocar um indicador num gráfico, recebo "ficheiro ex5 inválido". Tentei voltar a guardá-lo com um nome diferente - a mesma coisa. Acontece que o problema está no código, mas a compilação está bem.

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

Como posso ajudar?

Obrigado!

 
ns_k:

Boa tarde!

Estou a escrever um indicador de múltiplas moedas. Quando altero o código novamente, ele compila bem, mas quando tento colocar um indicador num gráfico, recebo "ficheiro ex5 inválido". Tentei voltar a guardá-lo com um nome diferente - a mesma coisa. Acontece que o problema está no código, mas a compilação está bem.

Como posso ajudar?

Obrigado!

A compilação é feita sem erros ou avisos? É preciso?
 
tol64:
A compilação é feita sem erros ou avisos? Tem a certeza?
Não há erros, há avisos, na sua maioria inofensivos, como valores não utilizados. Mas existe esta quantidade de amortecedores indicadores é menor do que o necessário. Vou tentar escavar aqui

 
ns_k:
Não há erros, há avisos, na sua maioria inócuos como valores não utilizados. No entanto, existe esta quantidade de amortecedores indicadores é menor do que o necessário. Vou tentar escavar aqui.

Sim, é exactamente isso. É aí que reside o erro:

//+------------------------------------------------------------------+
//| 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);
  }
Em destaque a vermelho. Substituir por 1.
 
#property indicator_buffers 1
#property indicator_plots   2
O número de tampões não pode ser menor do que o número de parcelas. Isto é o que o compilador lhe diz na mensagem.
 
tol64:

Sim, é exactamente isso. Isso é o que está errado:

Em destaque a vermelho. Substituir por 1.
#property indicator_buffers 1
#property indicator_plots   2
Спасибо всем!
 
ns_k:

MT4 Construído 500. Eu ponho o alerta a um certo nível, ele dispara, está tudo bem. Desactivo o alerta (espaço), aparece como suspenso. Depois o instrumento atinge o limiar e o alerta é accionado. É assim que deve ser?

ps. Sim, uma nota lateral. Primeiro realcei todos os alertas com o meu rato (6 deles) e carreguei na barra de espaço, todos eles ficaram suspensos. Depois de activar um, já o desliguei apenas com a barra de espaço e continua a activar

 

Vou aspergir mais um pouco.

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

Ao arrancar o terminal jura que o símbolo especificado não está seleccionado. Arrastei-o para outro MT5 via nuvem - funciona, e com cordas comentadas usando tickers.

Eu tentaria encontrar a razão, mas não sei por onde começar a procurar um erro tão errático. Talvez eu deva reinstalar o terminal de imediato?