Errori, bug, domande - pagina 2409

 
Cari sviluppatori! Avete intenzione di riparare il sito? Ogni volta che entro c'è una notifica su un aggiornamento del prodotto. Guardo questo avviso e si ripresenta. Non dovrebbe essere così!
 
Alexey Kozitsyn:
Cari sviluppatori! Avete intenzione di riparare il sito? Ogni volta che entro - una notifica di aggiornamento del prodotto. Guardo questo avviso e si ripete. Non dovrebbe essere così!


Non ho questo tipo di errore per prodotto.

C'è un errore generale di non lettura dei messaggi.

L'errore si verifica quando diverse schede sono aperte, finché non le chiudete, non verranno lette.

C'è un'altra cosa - devi andare a questo messaggio due volte - poi sarà segnato come letto.

Questo può aiutare gli sviluppatori.

 

Manca l'indicatore grafico (indicatore per i contratti futures, se non BR-4.19, allora input int NextFutMonth = 3; //Futures NextFutMonth (mese))

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

Ma quando si mette

#property indicator_maximum 30
#property indicator_minimum -30

funziona bene

 

Il tester chiude i trade usando le quotazioni di un altro strumento.


1. apertura prezzo eurusd 1,30935.

2. Prezzo di chiusura 1,60704. Non era un tale prezzo, ma era a quel tempo per un altro strumento gbpusd.





Il test viene eseguito per due simboli eurusd e gbpusd. Se gbpusd è escluso, l'errore scompare.


 
Aleksey Sergan:

Il tester chiude i trade usando le quotazioni di un altro strumento.


1. apertura prezzo eurusd 1,30935.

2. Prezzo di chiusura 1,60704. Non era un tale prezzo, ma era in quel momento per un altro simbolo gbpusd.





Il test viene eseguito per due simboli eurusd e gbpusd. Se gbpusd è escluso, l'errore scompare.


Dov'è il codice di questo consigliere miracoloso? Io do il 99% che state lavorando con le classi e usate una variabile statica da qualche parte.

 
Vladimir Karputov:

Dov'è il codice di questo consigliere miracoloso? Scommetto che al 99% lavorate con le classi e usate una variabile statica da qualche parte.

Vladimir, stai scherzando?

 
Andrey Barinov:

Vladimir, stai scherzando?

Sto ancora aspettando una risposta daAleksey Sergan. A seconda della risposta ci sarà una seconda parte principale della domanda.

 
Vladimir Karputov:

Sto ancora aspettando una risposta daAleksey Sergan. A seconda della risposta ci sarà una seconda parte principale della domanda.

Capisco. Quindi non stai scherzando dopo tutto...

A volte un bug terminale è solo un bug terminale.
 
Vladimir Karputov:

Dov'è il codice di questo consigliere miracoloso? Scommetto che al 99% lavorate con le classi e usate una variabile statica da qualche parte.

Il codice è di diverse migliaia di righe. Non ha senso attaccarlo, non ci sono variabili statiche. Ci sono delle classi. In ogni caso è un errore del tester.

 
Andrey Barinov:

Ho capito. Quindi non stai scherzando dopo tutto...

A volte un bug terminale è solo un bug terminale.

Nuh-uh :)