테스터의 긴 거래를 복사하지 않도록 자신을 보호하는 방법 - 페이지 3

 
George Merts :
네 이해했습니다. 그러나 다시, 전략 테스터 에서 - 당신은 순차적으로 틱을 얻고, 당신의 마지막 틱이 언제일지 모릅니다.
첫 번째 마디(시작)의 시간과 심볼의 히스토리에 있는 마디 수만 알면 충분합니다.
 

dll은 필요하지 않습니다

init에서 여기서 첫 번째 막대와 기호(임의)별로 막대 수 를 가져오기 위해 이에 대해 조치를 취할 수 있습니다. 그러나 이것은 오래된 빌드를 위한 것입니다. 그리고 테스터에서 작동할지 모르겠습니다. 그러나 dll 없이 MT4의 기록에 액세스할 수 있습니다.

 int init()
{
         int     _GetLastError = 0 , cnt_ticks = 0 , cnt_bars = 0 , temp[ 13 ];
         // запоминаем символ графика, обнуляем хэндл окна off-line графика
         _Symbol = Symbol ();
   hwnd = 0 ;

         // открываем файл, в который будем записывать историю
         string file_name = StringConcatenate ( "!Eqv" , _Symbol , TicksInBar, ".hst" );
         int sd_=iBars( "!Eqv" + _Symbol ,TicksInBar)- 1 ;
   double Open_[],
          Close_[],
          High_[],
          Low_[];
   int Time_[];
   ArrayResize (Open_,sd_+ 1 );
   ArrayResize (High_,sd_+ 1 );
   ArrayResize (Low_,sd_+ 1 );
   ArrayResize (Close_,sd_+ 1 );
   ArrayResize (Time_,sd_+ 1 );
         for ( int sd=iBars( "!Eqv" + _Symbol ,TicksInBar)- 1 ;sd>= 0 ;sd--)
        {
           Time_[sd]=iTime( "!Eqv" + _Symbol ,TicksInBar,sd);
           Open_[sd]=iOpen( "!Eqv" + _Symbol ,TicksInBar,sd);
           Close_[sd]=iClose( "!Eqv" + _Symbol ,TicksInBar,sd);
           High_[sd]=iHigh( "!Eqv" + _Symbol ,TicksInBar,sd);
           Low_[sd]=iLow( "!Eqv" + _Symbol ,TicksInBar,sd);
           //Print(sd," ",GetLastError()," ",Time_[sd]," ",Low_[sd]," ",High_[sd]," ",Close_[sd]," ",Open_[sd]);
        }

        return ( 0 );
}
 
Alexandr Bryzgalov :
첫 번째 마디(시작)의 시간과 심볼의 히스토리에 있는 마디 수만 알면 충분합니다.

전략 테스터 에서 첫 번째 막대의 시간은 들어오는 틱의 시간입니다. 그리고 전략 테스터에 진드기가 출현함에 따라 지속적으로 증가할 것입니다.

구체적인 예:

-------------------------------------------------- ---

현재 날짜는 2015년 1월 5일이며 작년에 대한 전략 테스터를 시작합니다. 전략 테스터의 첫 번째 눈금에서 2015년 1월 1일의 0 막대 시간이 표시됩니다. 그러나 컴퓨터의 실제 시간은 2015년 1월 5일입니다. 틱이 전략 테스터에 도착하면 날짜가 바뀌고 0바도 바뀝니다.

파일 작업의 도움으로 마지막(제로 막대) 날짜가 1.1.2015이지만 실제 시간은 1.05.2015임을 알 수 있습니다. 따라서 2015년 4월 1일까지만 테스터에서 틱을 처리합니다.

새로운 실제 날짜가 도착하면 테스터에서 더 늦은 날짜를 얻게 되며 따라서 프로세스가 점점 더 빨라지지만 실제 날짜에 한 달 이상 가까워지지는 않습니다.

이제 - 사용자가 우리를 속이고 컴퓨터에 날짜를 6개월 앞당기기로 결정했습니다. 이제 테스터에서 날짜 05/01/2015와 함께 날짜 11/1/2015를 받게 되며 실제 날짜가 여전히 05/01임에도 불구하고 10/1/2015까지 틱을 처리합니다. /2015이고 터미널에서 실제 데이터는 이 날짜까지만입니다. 그러나 테스트 초기에는 테스터로부터 이 값을 얻을 수 없습니다.

그게 바로 문제 야.

즉, 테스터에 기록된 시계열의 실제 마지막 날짜를 테스터로부터 얻을 수 있다면 문제가 해결될 것입니다. 그러나 문제는 어떻게 해야 하는지 명확하지 않다는 점이다.

 
Alexandr Bryzgalov :

dll은 필요하지 않습니다

init에서 여기서 첫 번째 막대와 기호(임의)별로 막대 수 를 가져오기 위해 이에 대해 조치를 취할 수 있습니다. 그러나 이것은 오래된 빌드를 위한 것입니다. 그리고 테스터에서 작동할지 모르겠습니다. 그러나 dll 없이 MT4의 기록에 액세스할 수 있습니다.

Init에서 날짜는 2015년 1월 1일과 같으므로 이 날짜부터 모든 막대가 제거됩니다. 실제 날짜는 2015년 1월 5일이지만
 
George Merts :

전략 테스터 에서 첫 번째 막대의 시간은 들어오는 틱의 시간입니다. 그리고 전략 테스터에 진드기가 출현함에 따라 지속적으로 증가할 것입니다.

구체적인 예:

-------------------------------------------------- ---

현재 날짜는 2015년 5월 1일이며 작년의 전략 테스터를 시작합니다. 전략 테스터의 첫 번째 눈금에서 2015년 1월 1일의 0 막대 시간이 표시됩니다. 그러나 컴퓨터의 실제 시간은 2015년 1월 5일입니다. 틱이 전략 테스터에 도착하면 날짜가 바뀌고 0바도 바뀝니다.

파일 작업의 도움으로 마지막(제로 막대) 날짜가 1.1.2015이지만 실제 시간은 1.05.2015임을 알 수 있습니다. 따라서 2015년 4월 1일까지만 테스터에서 틱을 처리합니다.

새로운 실제 날짜가 도착하면 테스터에서 더 늦은 날짜를 얻게 되며 따라서 프로세스가 점점 더 빨라지지만 실제 날짜에 한 달 이상 가까워지지는 않습니다.

이제 - 사용자가 우리를 속이고 컴퓨터에 날짜를 6개월 앞당기기로 결정했습니다. 이제 테스터에서 날짜 05/01/2015와 함께 날짜 11/1/2015를 받게 되며 실제 날짜가 여전히 05/01임에도 불구하고 10/1/2015까지 틱을 처리합니다. /2015이고 터미널에서 실제 데이터는 이 날짜까지만입니다. 그러나 테스트 초기에는 테스터로부터 이 값을 얻을 수 없습니다.

그게 바로 문제 야.

즉, 테스터에 기록된 시계열의 실제 마지막 날짜를 테스터로부터 얻을 수 있다면 문제가 해결될 것입니다. 그러나 문제는 어떻게 해야 하는지 명확하지 않다는 점이다.

기록 파일이 있습니다. 파일을 열고(FileOpenHistory), 읽고, 첫 번째 파일(역사에서 가장 작은 막대)을 찾고, 시간을 읽고, 총 막대 수를 계산해야 합니다.

이것은 테스터에서 적절한 시간에 어드바이저의 정지를 조작하기에 충분할 것입니다.

 
마지막 날짜를 얻을 필요가 없습니다. init에서 읽어서 히스토리 파일의 첫 번째 날짜와 히스토리 파일의 총 막대 수 를 가져와야 합니다.
 
Alexandr Bryzgalov :

히스토리 파일이 있습니다. 파일을 열고, 읽고, 첫 번째 파일(역사의 LOST BAR)을 찾고, 시간을 읽고, 총 막대 수를 계산해야 합니다.

이것은 테스터에서 적절한 시간에 어드바이저의 정지를 조작하기에 충분할 것입니다.

맞습니다. 하지만 전략 테스터 에서 액세스하는 방법은 무엇입니까? 위에서 제안한 옵션은 전략 테스터의 초기화에서 2015년 1월 1일을 반환할 표준 기능을 사용하여 막대를 수신합니다(이 날짜부터 테스트를 시작하는 경우)
 
Alexandr Bryzgalov :
마지막 날짜를 얻을 필요가 없습니다. init에서 읽어서 히스토리 파일의 첫 번째 날짜와 히스토리 파일의 총 막대 수 를 가져와야 합니다.

하지만 ! 그 흥미 롭군요.

시도해야합니다.

 
George Merts :
맞습니다. 하지만 전략 테스터 에서 액세스하는 방법은 무엇입니까?

그럼 일반 파일 작업과 같습니까, 아니면 테스터에서 히스토리에 액세스할 수 없는 건가요?

나는 그것을 직접 시도하지 않았지만이 문제에 대한 인증서에 금지 사항이 없습니다.

 
내가 주제에 없을 수도 있지만 OnTesterInit()에서 TimeLocal 및 TimeGMT를 확인 하면 일의 차이를 찾습니다. 실제 또는 테스트에서 낚시를 하는 시간은 몇 시입니까?