Erreurs, bugs, questions - page 2409

 
Alexey Kozitsyn:
Chers développeurs ! Allez-vous réparer le site ? Chaque fois que je viens - une notification de mise à jour du produit. Je consulte cette alerte et cela se reproduit. Ça ne devrait pas être comme ça !


Je n'ai pas ce genre d'erreur par produit.

Il y a une erreur générale de non lecture des messages.

L'erreur se produit lorsque plusieurs onglets sont ouverts, tant que vous ne les fermez pas, ils ne seront pas lus.

Il y a encore une chose - vous devez aller sur ce message deux fois - puis il sera marqué comme lu.

Cela peut aider les développeurs.

 

Le graphique indicateur est manquant (indicateur pour les contrats à terme, si ce n'est pas BR-4.19, alors entrez int NextFutMonth = 3 ; //Futures NextFutMonth (mois))

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

Mais quand vous mettez

#property indicator_maximum 30
#property indicator_minimum -30

il fonctionne bien

 

Le testeur ferme des transactions en utilisant les cotations d'un autre instrument.


1. Prix d'ouverture de l'eurusd 1.30935.

2. Prix de clôture 1.60704. Ce n'était pas un tel prix, mais c'était à ce moment-là pour un autre instrument gbpusd.





Les tests sont effectués pour deux symboles : eurusd et gbpusd. Si gbpusd est exclu, l'erreur disparaît.


 
Aleksey Sergan:

Le testeur ferme des transactions en utilisant les cotations d'un autre instrument.


1. Prix d'ouverture de l'eurusd 1.30935.

2. Prix de clôture 1.60704. Ce n'était pas un tel prix, mais c'était à ce moment-là pour un autre symbole gbpusd.





Les tests sont effectués pour deux symboles : eurusd et gbpusd. Si gbpusd est exclu, l'erreur disparaît.


Où est le code de ce conseiller miracle ? Je donne 99% que vous travaillez avec des classes et que vous utilisez une variable statique quelque part.

 
Vladimir Karputov:

Où est le code pour ce conseiller miracle ? Je parie à 99 % que vous travaillez avec des classes et que vous utilisez une variable statique quelque part.

Vladimir, tu plaisantes ?

 
Andrey Barinov:

Vladimir, tu plaisantes ?

J'attends toujours une réponse d'Aleksey Sergan. En fonction de la réponse, il y aura une deuxième partie principale de la question.

 
Vladimir Karputov:

J'attends toujours une réponse d'Aleksey Sergan. En fonction de la réponse, il y aura une deuxième partie principale de la question.

Je vois. Donc, vous ne plaisantez pas après tout...

Parfois, un bug terminal est juste un bug terminal.
 
Vladimir Karputov:

Où est le code pour ce conseiller miracle ? Je parie à 99 % que vous travaillez avec des classes et que vous utilisez une variable statique quelque part.

Le code compte plusieurs milliers de lignes. Il est inutile de l'attacher. Il n'y a pas de variables statiques. Il y a des classes. Dans tous les cas, c'est une erreur du testeur.

 
Andrey Barinov:

Je comprends. Donc, vous ne plaisantez pas après tout...

Parfois, un bug terminal est juste un bug terminal.

Nuh-uh :)

 
Vladimir Karputov:

Nuh-uh :)

OK. Éclairez-nous. Quelle erreur dans le code, ou quel code, peut fermer une position dans le testeur au prix d'un autre instrument. Je suis vraiment, vraiment intéressé.

Совершение сделок - Торговые операции - MetaTrader 5
Совершение сделок - Торговые операции - MetaTrader 5
  • www.metatrader5.com
Торговая деятельность в платформе связана с формированием и отсылкой рыночных и отложенных ордеров для исполнения брокером, а также с управлением текущими позициями путем их модификации или закрытия. Платформа позволяет удобно просматривать торговую историю на счете, настраивать оповещения о событиях на рынке и многое другое. Открытие позиций...