상인의 자기기만: 포워드에 대한 불신. - 페이지 2

 
Youri Tarshecki :

누구나 가장 간단한 경험을 할 수 있습니다. 데모 계정에서 거래 결과를 얻고 동일한 기간 동안 테스터에서 동일한 설정으로 동일한 시스템을 실행하십시오. 저것들. 실제 및 테스트 가상 포워드를 가져와 비교하십시오.

정확한 비교가 아닙니다. 전략 테스터 는 시작, 닫기, 최대 및 최소의 4가지 막대 따옴표만 사용합니다. 일반적으로 고문은 데모 또는 실제 계정에 대한 모든 인트라 바 견적으로 작업합니다.

유리 타셰키 :

사실 최적화되지 않은 기록 세그먼트에서 실행하여 시스템 동작을 모델링하는 것이 거래자가 분석하는 가장 효과적인 방법입니다. 리얼리티 체크는 물론 가장 확실한 방법이지만 안타깝게도 실생활의 모든 선택지를 정리하려면 영원히 살아야 한다. 저것들. Forward-to-Past 유형 모델링은 가장 효율적인 연구 방법입니다. 그런데 왜 포워드들이 토론에서 완전히 결석한 것일까요? 아마도 요점은 많은 테스트의 결과를 앞뒤로 처리하고 분석하는 데 편리한 소프트웨어가 없다는 것입니까?

동의한다. 이것저것 많이 하시는 것 같습니다. 그러한 분석을 위해 선호하는 금융 상품을 알려주십시오. 나는 술집의 개업에만 일하는 고문이 있습니다. 비슷한 시뮬레이션으로 테스트하고 싶습니다.

 

 Скажите пожалуйста какой финансовый инструмент Вы предпочитаете для подобного анализа. У меня есть советник который срабатывает только на открытие бара. Хочу проверить его подобным моделированием.

나는 단지 도구에 관계없이 테스트 방법론이 포워드를 포함해야 한다는 사실에 대해 이야기하고 있는 것입니다. 그러나 사람들은 그들을 크게 무시하고 있습니다. 그것들을 사용하는 사람들은 원칙적으로 눈으로 평가합니다. 저것들. 공격수 평가에 객관적인 기준을 제공하는 프로그램은 없습니다.
 
Youri Tarshecki :
나는 단지 도구에 관계없이 테스트 방법론이 포워드를 포함해야 한다는 사실에 대해 이야기하고 있는 것입니다. 그러나 사람들은 그들을 크게 무시하고 있습니다. 그것들을 사용하는 사람들은 원칙적으로 눈으로 평가합니다. 저것들. 공격수 평가에 객관적인 기준을 제공하는 프로그램은 없습니다.
다른 도구는 시장에서 다른 행동 속성을 가지고 있습니다. 전방 테스트에 "수익성 관성"을 포함합니다. 이것이 제가 묻고 싶은 이유입니다. ceteris paribus가 귀하의 실험에서 최상의 결과를 보여주는 도구(또는 도구 유형)를 눈치채지 못하셨습니까?
 
Youri Tarshecki :
나는 단지 도구에 관계없이 테스트 방법론이 포워드를 포함해야 한다는 사실에 대해 이야기하고 있는 것입니다. 그러나 사람들은 그들을 크게 무시하고 있습니다. 그것들을 사용하는 사람들은 원칙적으로 눈으로 평가합니다. 저것들. 공격수 평가에 객관적인 기준을 제공하는 프로그램은 없습니다.

나는 순방향 테스트를 크게 무시합니다. 이유는 간단합니다. 성공적으로 전달되었다는 것은 전달 섹션의 시장이 최적화 섹션과 유사하다는 것을 의미합니다. 전략 테스터 는 현재 시장 역학에 완벽하게 적응합니다. 결과적으로 최적화 섹션을 12개의 전방 부분으로 나누면 서로 연결되지 않은 12개의 매개변수 세트를 얻게 되며, 각각은 12개의 시간 섹션 중 11개로 병합됩니다. 대신, 하나의 매개변수 세트에서 다른 매개변수 세트로 서두르는 것보다 오랜 역사 동안 평균이기는 하지만 하나의 매개변수 세트를 찾는 것이 좋습니다.

시장은 바뀌지 않습니다. 각 거래 시스템에는 하나의 특정 시장 상태만 필요하고 시장에는 이러한 상태가 많이 있습니다.

 
신뢰하는 것보다 앞으로 믿지 않는 것이 좋습니다. 그리고 신뢰한다면 WFA를 사용하는 경우에만
 
Vasiliy Sokolov :

나는 순방향 테스트를 크게 무시합니다. 이유는 간단합니다. 성공적으로 전달되었다는 것은 전달 섹션의 시장이 최적화 섹션과 유사하다는 것을 의미합니다. 전략 테스터 는 현재 시장 역학에 완벽하게 적응합니다. 결과적으로 최적화 섹션을 12개의 전방 부분으로 나누면 서로 연결되지 않은 12개의 매개변수 세트를 얻게 되며, 각각은 12개의 시간 섹션 중 11개로 병합됩니다. 대신, 하나의 매개변수 세트에서 다른 매개변수 세트로 서두르는 것보다 오랜 역사 동안 평균이기는 하지만 하나의 매개변수 세트를 찾는 것이 좋습니다.

시장은 바뀌지 않습니다. 각 거래 시스템에는 하나의 특정 시장 상태만 필요하고 시장에는 이러한 상태가 많이 있습니다.

정방향은 정의상 최적화되지 않은 영역이기 때문에 "최적화된 영역을 12개의 전방 부분으로" 나눌 수 없습니다. 저것들. 당신은 정방향 검사 방법 자체와 평균화의 개념에 반대합니다.

포워드의 임무는 최적화되지 않은 미래의 상황에서 고문이 어떻게 행동하는지 알아내는 것입니다. 당신이 말하는 것은 최적화할 최고의 기록을 찾는 것과 더 관련이 있습니다. 저것들. 긴 이야기가 더 낫다고 생각하시면 문제 없습니다. 테스터에게 2년 Back-1년 Forward 기간 동안 요금을 청구합니다. 그리고 2개월 뒤로 -1개월 앞으로 12번. 첫 번째 접근 방식의 전방 지표가 두 번째 접근 방식의 전방 지표 합계보다 더 나은 경우 첫 번째 옵션이 더 좋고 그 반대의 경우도 마찬가지입니다. 여전히 Expert Advisor를 최적화하고 있다는 바로 그 사실은 당신이 시장 관성을 믿지만 그것이 훨씬 더 오랜 기간에 걸쳐 나타난다고 생각한다는 것을 의미합니다. 그러나 30년의 모든 사용 가능한 이력을 최적화하지 않고 있습니다. 즉, 시장의 변동성도 고려합니다. 이것은 불변성과 변동성의 영원한 모순이지만 다른 테스트 기간의 포워드를 비교함으로써 이 모순이 실제로 어떻게 해결되는지 더 정확하게 이해할 수 있습니다. 당신이 확인할 때까지 - 당신의 진술은 순전히 직관적이거나 습관적입니다.

 
Youri Tarshecki :
테스트 중인 EA 코드의 일부로 OnTesterPass를 사용하고 있다고 가정해 보겠습니다. 주어진 실행이 일반 변수 최적화 실행이 아니라 전방 감지인지 어떻게 알 수 있습니까? 그리고 그가 그것을 처리하더라도 이들은 다른 파일이 될 것이고 하나의 Expert Advisor의 많은 전달을 위해 하나의 테이블이 필요합니다. 그런 다음 다른 테이블과 다른 테이블이 모두 하나의 파일에 있습니다.

내가 기억하는 한, 나는 이것을 했습니다 - 첫 번째 트랜잭션 동안 프레임에 저장되었습니다 - 이것이 "잔액"입니다. 따라서 모든 실행의 매개변수와 지표를 하나의 파일에 기록할 때 두 개의 특징적인 날짜로 배경 텍스트와 정방향 텍스트를 쉽게 구별할 수 있습니다. 모든 실행을 정확히 하나의 파일에 저장했습니다(OnTesterInit에서 열리고 OnTesterDeinit에서 닫힘).

세부 정보는 다음과 같습니다.

테스트 에이전트 에서 수행되는 것이 중요합니다.

OnTesterInit, OnTesterDeinit, OnTesterPass는 테스트/최적화 프로세스가 시작되고 작업이 에이전트에 배포되는 터미널에서 호출됩니다. OnTesterPass 내에서 다음과 같이 FrameAdd를 사용하여 테스트 에이전트에 추가된 모든 프레임에 액세스할 수 있습니다(이전 EA에서 물린 경우 컴파일되지 않을 수 있음).

 void OnTesterPass ()
{
   string   name;
   ulong    pass;
   long     id;
   double   value, data[];
   string   params[];
   uint     par_count;
   string   output = "" ;
   ushort eq = StringGetCharacter ( "=" , 0 );

   while ( FrameNext (pass, name, id, value, data)) // data - массив положенный во фрейм с помощью FrameAdd
  {
    output = pass + ";" + (data[ 0 ]);
    
     for ( int i = 1 ; i < 10 ; i++) output += ";" + data[i];
    
     if ( FrameInputs (pass, params, par_count))
    {
       for ( uint i = 0 ; i < par_count; i++)
      {
         string pair[];
         int n = StringSplit (params[i], eq, pair);
         if (n == 2 )
        {
           long pvalue, pstart, pstep, pstop;
           bool enabled = false ;
           if ( ParameterGetRange (pair[ 0 ], enabled, pvalue, pstart, pstep, pstop))
          {
             if (enabled)
            {
              output += ";" + pair[ 1 ];
            }
          }
        }
      }
    }
    
    output += "\n" ;
     // TODO: FileWriteString(fhandle, output);
  }
}

그리고 여기:

거래, 자동 거래 시스템 및 거래 전략 테스트에 관한 포럼

프레임 작업

Stanislav Korotky , 2014.11.07 20:15

위에서 쓴 것처럼 실행하는 동안 프레임을 추가해야 합니다. 이론적으로 EA에 매개변수가 있는 경우 자체 데이터와 함께 프레임 내부에 매개변수를 가져와야 합니다. params는 비워둘 수 없습니다. 다음은 동일한 EA의 코드입니다.

 int fhandle = - 1 ;

void OnTesterInit ()
{
   // готовим каким-то образом файл, как нам нужно
  fhandle = FileOpen ( "tester-" + _Symbol + GetTickCount () + ".csv" , FILE_WRITE | FILE_CSV | FILE_ANSI );
   FileWriteString (fhandle, "Pass;First;LR;Profit;Expected Payoff;Profit Factor;Recovery Factor;Sharpe Ratio;Custom;Equity DD %;Trades\n" );
}

void OnTesterDeinit ()
{
   FileClose (fhandle);
}

double OnTester ()
{
   // собираем данные по эквити
   double LR = CountChannels(Equity);
  
   // конструируем собственный критерий оптимизации
   double result = MathAbs (LR) * TesterStatistics ( STAT_PROFIT ) * TesterStatistics ( STAT_PROFIT_FACTOR ) * TesterStatistics ( STAT_TRADES ) * ( 100 - TesterStatistics ( STAT_EQUITY_DDREL_PERCENT ));

   // рассчитываем еще какие-то данные
   //...

   // складываем все в массив
   double data[ 10 ];
   // data[0] = first;
   // data[1] = LR;
   // data[2] = TesterStatistics(STAT_PROFIT);
   // ...
   // data[7] = result;
   // ...
   // data[9] = ...

   // отправляем данные в терминал
   if (! FrameAdd ( MQL5InfoString ( MQL5_PROGRAM_NAME ), 1 , LR, data))
     Print ( "Frame add error: " , GetLastError ());
   else
     Print ( "Frame added, Ok" );

   return (result);
}

 

개인적으로는 최근의 시장 변화가 가장 중요하기 때문에 미래가 아니라 과거에 결과를 확인하는 것이 더 논리적인 것 같습니다.

15분 동안 최적화를 하고 불필요한 결과를 걸러내고 나머지 5~10분을 세트로 저장하고 최적화의 순간까지 히스토리에 실행하고 일정에 따라 가장 좋은 것을 선택했습니다.

나는 또한 이러한 작업을 자동화하는 과정에 대해 생각했습니다 ...

간단한 솔루션은 전환할 수 있는 시간 범위 내에서 EA 자체 에 거래 제한을 도입하는 것으로 보입니다. 결과적으로 한 번의 실제 실행에서 기록에 대한 두 개의 가상 실행을 얻을 수 있으며 Excel에서 쉽게 비교할 수 있습니다.

 
-Aleks- :

개인적으로는 최근의 시장 변화가 가장 중요하기 때문에 미래가 아니라 과거에 결과를 확인하는 것이 더 논리적인 것 같습니다.

15분 동안 최적화를 하고 불필요한 결과를 걸러내고 나머지 5~10분을 세트로 저장하고 최적화의 순간까지 히스토리에 실행하고 일정에 따라 가장 좋은 것을 선택했습니다.

나는 또한 이러한 작업을 자동화하는 과정에 대해 생각했습니다 ...

간단한 솔루션은 전환할 수 있는 시간 범위 내에서 EA 자체 에 거래 제한을 도입하는 것으로 보입니다. 결과적으로 한 번의 실제 실행에서 기록에 대한 두 개의 가상 실행을 얻을 수 있으며 Excel에서 쉽게 비교할 수 있습니다.

최근의 변화에 초점을 맞추는 것은 또 다른 종류의 자기기만입니다. 당연히 거래를 위해서는 새로운 설정을 사용해야 합니다. 그러나 자신을 마지막 기간 동안 최적화하는 것으로 제한하면 Expert Advisor가 미래의 변경 사항에 대해 얼마나 저항하는지 결코 이해할 수 없을 것입니다. 내 게시물의 두 번째 사진을 보세요. 선명하게 보입니다. Forward는 과거와 과거를 비교하는 것입니다. 귀하의 기술은 전방 분석과 관련이 없습니다. 거의 모든 Expert Advisor는 아름다운 백테스트에 최적화될 수 있습니다. 또한 여기의 패턴은 다음과 같습니다. 설정이 최적화될수록 뒷면이 더 아름답습니다. 그리고 더 추악한 것으로 밝혀졌습니다. 포워드는 더 장기적인 패턴을 사용하는 논리를 정확히 찾는 데 도움이 되므로 더 유망합니다.
 
포워드는 유용한 수표이지만 만병 통치약은 아닙니다. 최적화 결과 에서 좋은 포워드를 제공하는 매개변수의 변형을 선택할 수 있지만 이것이 실생활에서 좋은 결과를 보장하지는 않습니다.
사유: