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

 
Andrey Dik :


예, 예, 다음과 같습니다.

2017.09.05
2017.09.05 11:42:04 로거 로그 정리 완료
2017.09.05 00:00:00.000 Server MetaTester 5 중지

거기에는 다른 것이 없습니다.

그렇다면 테스터 로그에 Print() 함수에 대한 완전한 정보가 없는 이유는 무엇입니까?

디스크 공간을 확보하십시오. 디스크에 500메가 미만이 남아 있으면 로그가 지워집니다.
 
Slava :
디스크 공간을 확보하십시오. 디스크에 500메가 미만이 남아 있으면 로그가 지워집니다.

어떻게 청소합니까? 청소 알고리즘은 어디에서 배울 수 있습니까? 로그가 정리되었다는 메시지는 어디에 있습니까?

프로그램이 예상한 대로 작동하지 않는 경우 프로그램을 사용하는 방법은 무엇입니까? - 우리는 고문뿐만 아니라 MT5에 대해 이야기하고 있습니다.

내 특정 예에서는 틱을 건너뛴 로그를 볼 수 있습니다. 이 경우 사용자는 어떻게 생각해야 합니까? 더러운 언어가 흐려지지 않고 어떤 밝고 순수한 생각이 일어날 수 있습니까?

 

테스터의 시각 모드에서 속도 슬라이더의 위치가 기억됩니다. 최대 한 번으로 설정하십시오. 그런 다음 무거운 EA를 시작합니다. 비주얼라이저에 익숙해졌습니다.

더미 Expert Advisor를 만들어 시각화 도우미에서 실행하고 슬라이더를 약간 뒤로 이동해야 합니다. 이러한 조작 후에 무거운 Expert Advisor는 동결을 일으키지 않습니다.

슬라이더의 위치를 미리 설정할 수 있습니까(MT4와 같이)?

 

시각화 없이 한 번 실행하는 동안 많은 거래 작업 을 수행하는 Expert Advisor를 시작하여 적절한 메시지(테스터 자신이 표시하는 것을 좋아함)로 로그를 막습니다. 백테스트 후(또는 중지를 클릭한 직후) 로그 탭으로 전환하고 로그가 계속 표시되는 방법을 확인합니다. 이것은 첫 번째 부조리입니다. 왜냐하면 백테스트가 끝났습니다. 왜 로그의 끝을 표시하지 않습니까?

로그에 관심이 없고 "로그 삭제"를 클릭합니다. 그 후, 저널은 청소되고... 오래된 항목으로 계속 채워집니다!

 
Andrey Dik :

어떻게 청소합니까? 청소 알고리즘은 어디에서 배울 수 있습니까? 로그가 정리되었다는 메시지는 어디에 있습니까?

프로그램이 예상한 대로 작동하지 않는 경우 프로그램을 사용하는 방법은 무엇입니까? - 우리는 고문뿐만 아니라 MT5에 대해 이야기하고 있습니다.

내 특정 예에서는 틱을 건너뛴 로그를 볼 수 있습니다. 이 경우 사용자는 어떻게 생각해야 합니까? 더러운 언어가 흐려지지 않고 어떤 밝고 순수한 생각이 일어날 수 있습니까?

이전에 테스트 에이전트의 로그를 본 적이 없습니다.

당신은 로그 지우기에 대한 메시지를 직접 보여주었습니다.

테스터의 로그를 분석하면 선험적으로 자격을 갖춘 사용자로 간주됩니다. 주인은 항상 그의 악기를 돌보아야 합니다. Windows 탐색기는 여유 공간이 거의 없는 디스크가 항상 빨간색으로 표시됩니다.

BTW, 대시보드에 타이어 공기압 표시기가 있더라도 여행 전 차량의 육안 검사를 취소하는 것은 아닙니다.

 
fxsaber :

시각화 없이 한 번 실행하는 동안 많은 거래 작업 을 수행하는 Expert Advisor를 시작하여 적절한 메시지(테스터 자신이 표시하는 것을 좋아함)로 로그를 막습니다. 백테스트 후(또는 중지를 클릭한 직후) 로그 탭으로 전환하고 로그가 계속 표시되는 방법을 확인합니다. 이것은 첫 번째 부조리입니다. 왜냐하면 백테스트가 끝났습니다. 왜 로그의 끝을 표시하지 않습니까?

로그에 관심이 없고 "로그 삭제"를 클릭합니다. 그 후, 저널은 정리되고... 계속해서 오래된 항목으로 채워집니다!

예, 렌더링되지 않은 테스트 중에는 로깅을 비활성화하는 것이 좋습니다. 더 자주 당신은 맨 마지막에 표시되는 최종 결과(수익, 테스트 시간 등)를 볼 필요가 있습니다.

테스트 중 세부 정보는 시각화 모드에서 볼 수 있습니다. 시각화 없이 이 "힙"을 반응적으로 덤프하는 것은 의미가 없습니다.

 
Alexey Kozitsyn :

관심이 있는 경우 테스트 코드가 있습니다.

이 문제의 원인과 임시 해결책을 찾은 것 같습니다. 어떻게 이런 일이 일어나는지 설명하기는 어렵지만 색상 버퍼 가 개입하여 모든 것을 망쳐 놓는 것 같습니다.


다음은 소스 코드에서 변경한 내용이며 문제가 사라졌습니다.

 #property indicator_separate_window
#property indicator_plots 3
#property indicator_buffers 4
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
input bool inpUseArrows= false ;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double bufGisto[];
double bufGistoColor[];
double bufArrowUp[];
double bufArrowDn[];
//---
const double EMPTY = EMPTY_VALUE ;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit ()
  {
//--- Размечаем массив цветов
   color colors[ 2 ];
   colors[ 0 ]= clrLime ;
   colors[ 1 ] = clrRed ;
//--- Устанавливаем параметры графических серий
//   SetPlotParametersColorHistogram(0,0,bufGisto,bufGistoColor,false,"test gisto",colors,EMPTY,2);
   SetPlotParametersColorHistogram( 2 , 2 ,bufGisto,bufGistoColor, false , "test gisto" ,colors, EMPTY , 2 );
//--- Проверяем, нужно ли отображать объемы
//   if (inpUseArrows) // Если отображать нужно
//     {
//      SetPlotParametersArrow(1,2,bufArrowUp,false,"test up",EMPTY,clrLime,233,10);
//      SetPlotParametersArrow(2,3,bufArrowDn,false,"test dn",EMPTY,clrRed,234,-10);
      SetPlotParametersArrow( 0 , 0 ,bufArrowUp, false , "test up" , EMPTY , clrLime , 233 , 10 );
      SetPlotParametersArrow( 1 , 1 ,bufArrowDn, false , "test dn" , EMPTY , clrRed , 234 ,- 10 );
//     }
//---
   IndicatorSetInteger ( INDICATOR_DIGITS , 0 );
//---
   return ( INIT_SUCCEEDED );
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnDeinit ( const int reason)
  {
   if (inpUseArrows)
     {
       ArrayInitialize (bufArrowUp, EMPTY );
       ArrayInitialize (bufArrowDn, EMPTY );
     }
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate ( const int rates_total,
                 const int prev_calculated,
                 const datetime &time[],
                 const double &open[],
                 const double &high[],
                 const double &low[],
                 const double &close[],
                 const long &tick_volume[],
                 const long &volume[],
                 const int &spread[])
  {
//---
   if (prev_calculated== 0 )
     {
       ArrayInitialize (bufGisto, EMPTY );
       //---
       if (inpUseArrows)
        {
         ArrayInitialize (bufArrowUp, EMPTY );
         ArrayInitialize (bufArrowDn, EMPTY );
        }
       //---
       for ( int i= 0 ; i<rates_total; i++)
        {
         bufGisto[i]=(open[i]-close[i])/ _Point ;
         bufGistoColor[i]=(bufGisto[i]< 0 ) ? 1 : 0 ;
         //---
/*         if(inpUseArrows)
           {
            if(bufGisto[i]>20)
               bufArrowDn[i]=bufGisto[i];
            else if(bufGisto[i]<-20)
               bufArrowUp[i]=bufGisto[i];
           }
*/
         if (inpUseArrows)
           {
             if (bufGisto[i]> 20 )
               bufArrowDn[i]=bufGisto[i];
             else bufArrowDn[i] = EMPTY ;
             
             if (bufGisto[i]<- 20 )
               bufArrowUp[i]=bufGisto[i];
             else bufArrowUp[i] = EMPTY ;
           }
        }
     }
   else if (rates_total>prev_calculated)
     {
      bufGisto[rates_total- 1 ]= EMPTY ;
       //---
       if (inpUseArrows)
        {
         bufArrowUp[ rates_total- 1 ] = EMPTY ;
         bufArrowDn[ rates_total- 1 ] = EMPTY ;
        }
     }
//--- return value of prev_calculated for next call
   return (rates_total);
  }
//+------------------------------------------------------------------+
//| Параметры графического построения: цветная гист-а от 0 линии                |
//+------------------------------------------------------------------+
void SetPlotParametersColorHistogram( const int plotIndex, // Индекс графической серии
                                     const int bufferNum, // Номер первого буфера серии
                                     double & value[],                               // Буфер значений
                                     double & clr[],                                 // Буфер цветов
                                     const bool asSeries,                           // Флаг нумерации как в таймсерии
                                     const string label,                           // Имя серии
                                     const color & colors[],                         // Цвета линии
                                     const double emptyValue = EMPTY_VALUE ,         // Пустые значения серии
                                     const int width = 0 ,                           // Толщина линии
                                     const ENUM_LINE_STYLE style = STYLE_SOLID ,       // Стиль линии
                                     const int drawBegin = 0 ,                         // Количество баров без отрисовки
                                     const int shift= 0                            // Сдвиг построения в барах
                                     )
  {
//--- Привязываем буферы
   SetIndexBuffer (bufferNum,value, INDICATOR_DATA );
   SetIndexBuffer (bufferNum+ 1 ,clr, INDICATOR_COLOR_INDEX );
//--- Устанавливаем порядок нумерации в массивах-буферах
   ArraySetAsSeries (value,asSeries);
   ArraySetAsSeries (clr,asSeries);
//--- Устанавливаем тип графического построения
   PlotIndexSetInteger (plotIndex, PLOT_DRAW_TYPE , DRAW_COLOR_HISTOGRAM );
//--- Устанавливаем имя графической серии
   PlotIndexSetString (plotIndex, PLOT_LABEL ,label);
//--- Устанавливаем пустые значения в буферах
   PlotIndexSetDouble (plotIndex, PLOT_EMPTY_VALUE ,emptyValue);
//--- Устанавливаем количество цветов индикатора
   const int size= ArraySize (colors);
   PlotIndexSetInteger (plotIndex, PLOT_COLOR_INDEXES ,size);
//--- Устанавливаем цвета индикатора
   for ( int i= 0 ; i<size; i++)
       PlotIndexSetInteger (plotIndex, PLOT_LINE_COLOR ,i,colors[i]);
//--- Устанавливаем толщину линии
   PlotIndexSetInteger (plotIndex, PLOT_LINE_WIDTH ,width);
//--- Устанавливаем стиль линии
   PlotIndexSetInteger (plotIndex, PLOT_LINE_STYLE ,style);
//--- Устанавливаем количество баров без отрисовки и значений в DataWindow
   PlotIndexSetInteger (plotIndex, PLOT_DRAW_BEGIN ,drawBegin);
//--- Устанавливаем сдвиг графического построения по оси времени в барах
   PlotIndexSetInteger (plotIndex, PLOT_SHIFT ,shift);
  }
//+------------------------------------------------------------------+
//| Параметры графического построения: стрелки                                                          |
//+------------------------------------------------------------------+
void SetPlotParametersArrow( const int plotIndex, // Индекс графической серии
                             const int bufferNum, // Номер первого буфера серии
                             double &value[], // Буфер значений
                             const bool asSeries, // Флаг нумерации как в таймсерии
                             const string label, // Имя серии
                             const double emptyValue= EMPTY_VALUE , // Пустые значения серии
                             const color clr= clrRed , // Цвет стрелок
                             const int arrowCode= 159 , // Код стрелок
                             const int arrowShift = 0 , // Сдвиг стрелок по вертикали
                             const int width= 0 , // Толщина стрелок
                             const int drawBegin= 0 , // Количество баров без отрисовки
                             const int shift= 0                      // Сдвиг построения в барах
                            )
  {
//--- Привязываем буферы
   SetIndexBuffer (bufferNum,value, INDICATOR_DATA );
//--- Устанавливаем порядок нумерации в массивах-буферах
   ArraySetAsSeries (value,asSeries);
//--- Устанавливаем тип графического построения
   PlotIndexSetInteger (plotIndex, PLOT_DRAW_TYPE , DRAW_ARROW );
//--- Устанавливаем имя графической серии
   PlotIndexSetString (plotIndex, PLOT_LABEL ,label);
//--- Устанавливаем пустые значения в буферах
   PlotIndexSetDouble (plotIndex, PLOT_EMPTY_VALUE ,emptyValue);
//--- Устанавливаем цвет индикатора
   PlotIndexSetInteger (plotIndex, PLOT_LINE_COLOR , 0 ,clr);
//--- Устанавливаем код стрелок
   PlotIndexSetInteger (plotIndex, PLOT_ARROW ,arrowCode);
//--- Устанавливаем смещение стрелок по вертикали
   PlotIndexSetInteger (plotIndex, PLOT_ARROW_SHIFT ,arrowShift);
//--- Устанавливаем толщину стрелок
   PlotIndexSetInteger (plotIndex, PLOT_LINE_WIDTH ,width);
//--- Устанавливаем количество баров без отрисовки и значений в DataWindow
   PlotIndexSetInteger (plotIndex, PLOT_DRAW_BEGIN ,drawBegin);
//--- Устанавливаем сдвиг графического построения по оси времени в барах
   PlotIndexSetInteger (plotIndex, PLOT_SHIFT ,shift);
  }
//+------------------------------------------------------------------+
  1. INDICATOR_COLOR_INDEX가 마지막 인덱스가 될 것으로 예상하고 DRAW_COLOR_HISTOGRAM 인덱스를 "끝"에 두십시오.
  2. 버퍼에 값을 입력할 필요가 없으면 PLOT_EMPTY_VALUE 값으로 채워야 합니다.
 

테스터는 왜 이러는 걸까요?

 2017.09 . 05 10 : 42 : 53.349 Tester  Experts\fxsaber\TesterBenchmark_Example.ex5 on EURUSD,M1 from 2017.08 . 01 00 : 00 to 2017.09 . 05 00 : 00
2017.09 . 05 10 : 42 : 53.349 Tester  EURUSD: history data begins from 1981.01 . 02 00 : 00
2017.09 . 05 10 : 42 : 53.349 Tester  EURUSD: preliminary downloading of history ticks started, it may take quite a long time
2017.09 . 05 10 : 42 : 53.349 Tester  EURUSD: "bases\MetaQuotes-Demo\ticks\EURUSD\201709.tkc" download
2017.09 . 05 10 : 42 : 59.389 Tester  EURUSD: "bases\MetaQuotes-Demo\ticks\EURUSD\201708.tkc" download ( 370.48 Kb/sec)
2017.09 . 05 10 : 43 : 12.450 Tester  EURUSD: 71 % ticks downloaded ( 356.63 Kb/sec)
2017.09 . 05 10 : 43 : 20.488 Tester  EURUSD: 94 % ticks downloaded ( 338.89 Kb/sec)
2017.09 . 05 10 : 43 : 22.491 Tester  EURUSD: preliminary downloading of history ticks completed, 10.01 Mb in 0 : 29.141 ( 351.80 Kb/sec)
2017.09 . 05 10 : 43 : 22.491 Tester   EURUSD: ticks data begins from 2017.08 . 01 00 : 00
2017.09 . 05 10 : 43 : 22.491 Tester  complete optimization started
2017.09 . 05 10 : 43 : 22.491 Tester  size of initial task batch is 6
2017.09 . 05 10 : 43 : 22.521 Core 1   agent process started
2017.09 . 05 10 : 43 : 23.094 Core 1   connecting to 127.0 . 0.1 : 3000
2017.09 . 05 10 : 43 : 23.094 Core 1   connected
2017.09 . 05 10 : 43 : 23.103 Core 1   authorized (agent build 1653 )
2017.09 . 05 10 : 43 : 23.114 Core 1   common synchronization completed
2017.09 . 05 10 : 43 : 23.388 Core 1    EURUSD: history for 2016 year synchronized
2017.09 . 05 10 : 43 : 23.388 Core 1   EURUSD: history for 2017 year synchronized
2017.09 . 05 10 : 43 : 23.388 Core 1   EURUSD: history synchronization completed [ 54 Kb]
2017.09 . 05 10 : 43 : 23.388 Core 1   EURUSD: 54.96 Kb of history processed in 0 : 00.234
2017.09 . 05 10 : 43 : 23.402 Core 1   pass 0 tested with error " cannot synchronize history (EURUSD) " in 0 : 00 : 00.047
2017.09 . 05 10 : 43 : 23.404 Core 1   pass 1 tested with error "task rejected by tester agent" in 0 : 00 : 00.000
 
Slava :

1. 테스트 에이전트의 로그를 본 적이 없습니다.

당신은 로그 지우기에 대한 메시지를 직접 보여주었습니다.

2. 테스터의 로그를 분석하면 선험적으로 자격을 갖춘 사용자로 간주됩니다. 주인은 항상 그의 악기를 돌보아야 합니다. Windows 탐색기는 여유 공간이 거의 없는 디스크가 항상 빨간색으로 표시됩니다.

BTW, 대시보드에 타이어 공기압 표시기가 있더라도 여행 전 차량의 육안 검사를 취소하는 것은 아닙니다.

1. 필요하지 않았기 때문에 이 작업을 수행할 필요가 없었습니다. 테스터 로그에는 항상 예상한 내용이 있었습니다.

2. Windows 탐색기가 무엇을 표시하는지 모르십니까? 우리는 MT5에서 작업하며 메모리가 충분하지 않음(또는 제대로 작동하지 않는 다른 이유)이 있음을 사용자에게 알릴 의무가 있습니다.

네, 그 이유는 여유 공간이 500MB 미만이었고, 통나무가 빈틈 없이 완전히 나타날 뿐만 아니라 주행 중 브레이크가 사라졌기 때문입니다(통나무가 여전히 표시되는 경우 브레이크가 어디에서 오는지 명확하지 않습니다. 테스트). 그러나 사용자는 최소 500MB가 필요하다는 것을 어떻게 알 수 있습니까? 2Mb, 100Mb, 100500Gb가 아닌 이유는 무엇입니까? - 에이전트/테스터는 정상적인 작동을 방해하는 문제에 대한 메시지를 표시해야 합니다.

그리고 로그에 출력할 항목을 선택하는 기능만 있으면 됩니다.

[삭제]  
Alexey Viktorov :

이 문제의 원인과 임시 해결책을 찾은 것 같습니다. 어떻게 이런 일이 일어나는지 설명하기는 어렵지만 색상 버퍼 가 개입하여 모든 것을 망쳐 놓는 것 같습니다.


다음은 소스 코드에서 변경한 내용이며 문제가 사라졌습니다.

  1. INDICATOR_COLOR_INDEX가 마지막 인덱스가 될 것으로 예상하고 DRAW_COLOR_HISTOGRAM 인덱스를 "끝"에 두십시오.
  2. 버퍼에 값을 입력할 필요가 없으면 PLOT_EMPTY_VALUE 값으로 채워야 합니다.
도움이 되지 않았습니다 :) 알겠습니다. 왜 SD에서 답을 얻어야 할까요? 마찬가지로, 그러한 목발은 받아 들일 수 없습니다!