오류, 버그, 질문 - 페이지 2409

 
친애하는 개발자 여러분! 사이트를 수정하시겠습니까? 로그인하지 않는 방법 - 제품 업데이트 알림. 이 경고를 보지만 다시 나타납니다. 이런 일이 일어나서는 안됩니다!
 
Alexey Kozitsyn :
친애하는 개발자 여러분! 사이트를 수정하시겠습니까? 로그인하지 않는 방법 - 제품 업데이트 알림. 이 경고를 보지만 다시 나타납니다. 이런 일이 일어나서는 안됩니다!


나는 제품에 대해이 오류가 없습니다.

메시지를 읽지 않는 일반적인 실수가 있습니다.

여러 탭이 열려 있을 때 오류가 발생하며 탭을 닫을 때까지 읽을 수 없습니다.

한 가지 더 있습니다. 이 메시지에 두 번 들어가야 합니다. 그러면 읽음으로 표시됩니다.

아마도 이것은 개발자에게 도움이 될 것입니다.

 

지표 차트가 사라집니다( 선물 계약 지표, BR-4.19가 아닌 경우 int NextFutMonth = 3 입력; //다음 선물(월))

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

하지만 넣을 때

 #property indicator_maximum 30
#property indicator_minimum - 30

그러면 잘 작동합니다

 

테스터는 다른 상품의 시세에 대한 거래를 마감합니다.


1. 개시 유로화 가격 1.30935.

2. 1.60704를 닫습니다. 그런 가격은 없었지만 당시에는 다른 gbpusd 도구에 이만한 가격이 있었습니다.





테스트는 두 가지 도구 eurusd, gbpusd에서 수행됩니다. gbpusd를 제외하면 오류가 사라집니다.


 
Aleksey Sergan :

테스터는 다른 상품의 시세에 대한 거래를 마감합니다.


1. 개시 유로화 가격 1.30935.

2. 1.60704를 닫습니다. 그런 가격은 없었지만 당시에는 다른 gbpusd 도구에 이만한 가격이 있었습니다.





테스트는 두 가지 도구 eurusd, gbpusd에서 수행됩니다. gbpusd를 제외하면 오류가 사라집니다.


이 기적의 조언자를 위한 코드는 어디에 있습니까? 나는 당신이 클래스로 작업하고 어딘가에 정적 변수 를 사용한다는 99%를 제공합니다.

 
Vladimir Karputov :

이 기적의 조언자를 위한 코드는 어디에 있습니까? 나는 당신이 클래스로 작업하고 어딘가에 정적 변수 를 사용한다는 99%를 제공합니다.

블라디미르, 장난해?

 
Andrey Barinov :

블라디미르, 장난해?

나는 여전히 Aleksey Sergan 의 답변을 기다리고 있습니다.   . 답변에 따라 질문의 두 번째 주요 부분이 있습니다.

 
Vladimir Karputov :

나는 여전히 Aleksey Sergan 의 답변을 기다리고 있습니다.   . 답변에 따라 질문의 두 번째 주요 부분이 있습니다.

이해했다. 그러니까 농담하지마...

때때로 터미널 버그는 터미널 버그일 뿐입니다.
 
Vladimir Karputov :

이 기적의 조언자를 위한 코드는 어디에 있습니까? 나는 당신이 클래스로 작업하고 어딘가에 정적 변수 를 사용한다는 99%를 제공합니다.

수천 줄의 코드. 신청해도 소용이 없습니다. 정적 변수가 없습니다. 수업이 있습니다. 어쨌든 이것은 테스터의 오류입니다.

 
Andrey Barinov :

이해했다. 그러니까 농담하지마...

때때로 터미널 버그는 터미널 버그일 뿐입니다.

누누 :)