Erros, bugs, perguntas - página 2409

 
Caros programadores! Vai arranjar o sítio? Sempre que lá entro, há uma notificação sobre uma actualização do produto. Olho para este alerta e ele volta a surgir. Não deveria ser assim!
 
Alexey Kozitsyn:
Caros programadores! Vai arranjar o sítio? Cada vez que entro - uma notificação de actualização do produto. Olho através deste alerta e ele ocorre novamente. Não deveria ser assim!


Não tenho este tipo de erro por produto.

Existe um erro geral de não leitura das mensagens.

O erro ocorre quando várias abas estão abertas, até que as feche, elas não serão lidas.

Há mais uma coisa - tem de ir a esta mensagem duas vezes - depois será marcada como lida.

Isto pode ajudar os criadores.

 

O gráfico indicador está em falta (indicador para contratos de futuros, se não BR-4.19, então input int NextFutMonth = 3; //Futures NextFutMonth (mês))

//+------------------------------------------------------------------+
//|                                                   BR_Scalper.mq5 |
//|                                      Copyright 2019 prostotrader |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2019 prostotrader"
#property link      "https://www.mql5.com"
#property version   "1.00"
#property indicator_separate_window
#property indicator_buffers 1
#property indicator_plots   1

//--- plot Label1
#property indicator_label1  "Spread"
#property indicator_type1   DRAW_LINE
#property indicator_color1  clrYellow
#property indicator_style1  STYLE_SOLID
#property indicator_width1  1

//#property indicator_maximum 30
//#property indicator_minimum -30

#define  on_call -111
//
input int NextFutMonth = 1;    //След фьючерс (мес.)
input int aBars = 30;          //Бары  
//
double Buff[];
double pr_last, sec_last;
string sec_symbol;
bool pr_book, sec_book;
int event_cnt;

//+------------------------------------------------------------------+
//| Indicator Set second Symbols function                            |
//+------------------------------------------------------------------+
string SetSecSymbol(const string aSymbol)
{
  int str_tire = StringFind(aSymbol, "-");
  int str_tochka = StringFind(aSymbol, ".", str_tire);
  int str_size = StringLen(aSymbol);
  if((str_tire > 0) && (str_tochka > 0) && (str_size > 0))
  {
    string str_month = StringSubstr(aSymbol, str_tire + 1, str_tochka - str_tire - 1);
    string str_year = StringSubstr(aSymbol, str_tochka + 1, str_size - str_tochka - 1);
    long aMonth = StringToInteger(str_month);
    long aYear = StringToInteger(str_year);
    if((aMonth > 0) && (aYear > 0))
    {
      long n_month = aMonth + long(NextFutMonth);
      long add_year = (n_month - 1) / 12;
      aYear += add_year;
      str_year = IntegerToString(aYear); 
      aMonth = n_month - add_year * 12;
      str_month = IntegerToString(aMonth);
      return(StringSubstr(aSymbol, 0, str_tire + 1) + str_month + "." + str_year);
    } 
  }
  return("");
}
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
{
  int a_bars = Bars(Symbol(), PERIOD_CURRENT);
  if(a_bars < aBars + 1)
  {
    Alert("На графике не хватает баров!");
    return(INIT_FAILED);
  } 
  event_cnt = 0;
  sec_symbol = SetSecSymbol(Symbol());
  if(SymbolSelect(sec_symbol, true) == false) return(INIT_FAILED);
  pr_book = MarketBookAdd(Symbol());
  sec_book = MarketBookAdd(sec_symbol);
  IndicatorSetInteger(INDICATOR_DIGITS, 0);
  IndicatorSetString(INDICATOR_SHORTNAME, "BR_Scalper");
//---  
  SetIndexBuffer(0, Buff, INDICATOR_DATA);
  PlotIndexSetDouble( 0, PLOT_EMPTY_VALUE, EMPTY_VALUE);
  ArraySetAsSeries(Buff, true );
  return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
// Custom indicator DeInit function                                  |
//+------------------------------------------------------------------+
void OnDeinit( const int reason )
{
  if(pr_book == true) MarketBookRelease(Symbol());
  if(sec_book == true) MarketBookRelease(sec_symbol);
  if(reason == REASON_INITFAILED)
  {
    Print("Индикатор удалён! Причина - ошибка инициализации.");
    string short_name = ChartIndicatorName(ChartID(), 1, 0);
    ChartIndicatorDelete(ChartID(), 1, short_name); 
  }
}
//+------------------------------------------------------------------+
// Custom indicator On book event function                           |
//+------------------------------------------------------------------+
void OnBookEvent( const string& symbol )
{
  if((symbol == Symbol()) || (symbol == sec_symbol))
  {
    sec_last = SymbolInfoDouble(sec_symbol, SYMBOL_LAST);
    pr_last = SymbolInfoDouble(Symbol(), SYMBOL_LAST);
    double price[]; 
    OnCalculate( event_cnt, event_cnt, on_call, price ); 
  }
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const int begin,
                const double &price[])
{
  if(prev_calculated == 0)
  {
    ArrayInitialize(Buff, EMPTY_VALUE);
  }
  else
  {
    if(begin == on_call)
    {
      for(int i = aBars - 1; i > 0; i--)
      {
        Buff[i] = Buff[i - 1];
      }
    }
    else
    {
     sec_last = SymbolInfoDouble(sec_symbol, SYMBOL_LAST);
     pr_last = SymbolInfoDouble(Symbol(), SYMBOL_LAST); 
     Buff[aBars] = EMPTY_VALUE;
    } 
    Buff[0] = (sec_last - pr_last) /Point();
  } 
//---    
  event_cnt = rates_total;  
//--- return value of prev_calculated for next call
  return(rates_total);
}
//+------------------------------------------------------------------+

Mas quando se coloca

#property indicator_maximum 30
#property indicator_minimum -30

funciona bem

 

O testador fecha os negócios usando citações de outro instrumento.


1. preço de abertura do eurusd 1.30935.

2. Preço de fecho 1,60704. Não era um tal preço, mas era na altura para outro instrumento gbpusd.





São realizados testes para dois símbolos eurusd e gbpusd. Se gbpusd for excluído, o erro desaparece.


 
Aleksey Sergan:

O testador fecha os negócios usando citações de outro instrumento.


1. preço de abertura do eurusd 1.30935.

2. Preço de fecho 1,60704. Não era um preço assim, mas era na altura para outro símbolo gbpusd.





São realizados testes para dois símbolos eurusd e gbpusd. Se gbpusd for excluído, o erro desaparece.


Onde está o código deste conselheiro milagroso? Eu dou 99% de que está a trabalhar com classes e uso uma variável estática algures.

 
Vladimir Karputov:

Onde está o código para este conselheiro milagroso? 99% aposta que trabalha com classes e utiliza uma variável estática algures.

Vladimir, estás a brincar?

 
Andrey Barinov:

Vladimir, estás a brincar?

Ainda estou à espera de uma resposta deAleksey Sergan. Dependendo da resposta, haverá uma segunda parte principal da pergunta.

 
Vladimir Karputov:

Ainda estou à espera de uma resposta deAleksey Sergan. Dependendo da resposta, haverá uma segunda parte principal da pergunta.

Estou a ver. Afinal, não estás a brincar...

Por vezes, um bug terminal é apenas um bug terminal.
 
Vladimir Karputov:

Onde está o código para este conselheiro milagroso? 99% aposta que trabalha com classes e utiliza uma variável estática algures.

O código é de vários milhares de linhas. Não vale a pena anexá-lo. Não há variáveis estáticas. Há aulas. Seja como for, é um erro do testador.

 
Andrey Barinov:

Já percebi. Afinal, não estás a brincar...

Por vezes, um bug terminal é apenas um bug terminal.

Nuh-uh :)