트레이딩의 머신러닝: 이론, 모델, 실전 및 알고리즘 트레이딩 - 페이지 2008

 
도서관 :
네. 동의어 기능, 입력, 예측자.
덕분에 단어가 비뚤어졌지만 항상 "기능"으로 가지고있었습니다.
 
예브게니 듀카 :
덕분에 단어가 비뚤어졌지만 항상 "기능"으로 가지고있었습니다.

심지어 그 반대...

내 생각에 가장 정확한 것은 "표지판"입니다. " 특징에 의한 개체 설명 ". 그러나 동의어는 무리를 낳았습니다. 그리고 최고는 아니다

도서관 :
네. 동의어 기능, 입력, 예측자.
 
예브게니 듀카 :
덕분에 단어가 비뚤어졌지만 항상 "기능"으로 가지고있었습니다.

특히 음역에 익숙하지 않은 경우

 
막심 쿠즈네초프 :

기기가 틱할 때까지 막대가 열리지 않습니다. Tika는 아주 오랫동안 사라졌을 수 있습니다 ;-)

그러나 코드는 이 문제를 완전히 해결하지 못합니다. OHLC 시뮬레이션 모드와 "실제 틱을 기반으로 하는 각 틱"에서 Expert Advisor가 없는 심볼에서 동일한 데이터를 얻을 수 있도록 어떻게 해결할 수 있습니까? 일반적으로 OHLC, 즉 OHLC 동안 지연 없이 동기화 문제를 해결하는 방법에 대한 아이디어가 있습니까? 아직 다른 기호에 막대가 없으면 이전 막대 데이터를 사용합니까? 모든 눈금을 확인하면 (시도하지는 않았지만) 막대의 첫 번째 눈금에서 데이터를 얻고 이를 사용하여 동기화할 수 있습니다. 새 막대를 열 때 막대가 현재 차트에 있는지 여부를 알 수 있습니다.

 
알렉세이 비아즈미킨 :

그러나 코드는 이 문제를 완전히 해결하지 못합니다. OHLC 시뮬레이션 모드와 "실제 틱을 기반으로 하는 각 틱"에서 Expert Advisor가 없는 심볼에서 동일한 데이터를 얻을 수 있도록 어떻게 해결할 수 있습니까? 일반적으로 OHLC, 즉 OHLC 동안 지연 없이 동기화 문제를 해결하는 방법에 대한 아이디어가 있습니까? 아직 다른 기호에 막대가 없으면 이전 막대 데이터를 사용합니까? 모든 눈금을 확인하면 (시도하지는 않았지만) 막대의 첫 번째 눈금에서 데이터를 얻고 이를 사용하여 동기화할 수 있습니다. 새 막대를 열 때 막대가 현재 차트에 있는지 여부를 알 수 있습니다.

그들은 몇 분의 바를 건너뛸 수도 있습니다. 이전 가격의 종가로 막대를 형성하십시오. 여러 도구의 결합된 동작을 분석하는 데 적합합니다. 하나의 통화에 대해서는 아마도 중요하지 않을 것입니다.
 
도서관 :
그들은 몇 분의 바를 건너뛸 수도 있습니다. 이전 가격의 종가로 막대를 형성하십시오. 여러 도구의 결합된 동작을 분석하는 데 적합합니다. 하나의 통화에 대해서는 아마도 중요하지 않을 것입니다.

따라서 OHLC에 따르면 마지막 막대가 마지막 막대가 될 것이고 실제 거래에서는 1년 전일 수 있기 때문에 비동기화가 있을 것입니다.

 

OHLC 최적화 모드에서 기기의 시계열이 동기화되지 않는다는 것을 모르는 사람들을 위해 여기에 남겨두겠습니다. 이것은 MO에 매우 중요합니다.


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

MetaTrader 5 플랫폼 빌드 2615의 새 버전: 전략 테스터의 기본 분석 및 복잡한 기준

Aleksey Vyazmikin , 2020.09.26 13:26


빌드 2622, 분 시간 프레임, 계기 Si-12.20 브로커 "개봉".

"실제 눈금을 기반으로 한 각 눈금 " 및 "M1의 OHLC" 모드에서 새 막대를 열 때 인쇄합니다.

 Print ( "Time" , TimeToString ( iTime ( Symbol (), PERIOD_CURRENT , 0 ), TIME_DATE | TIME_MINUTES ), " Time_TOM=" , TimeToString ( iTime ( "USDRUB_TOM" , PERIOD_CURRENT , 0 ), TIME_DATE | TIME_MINUTES ));

위의 결과를 표로 정리하여 아래와 같이 질문드립니다.

1. 새 막대가 현재 악기에 이미 표시되었지만 아직 정보를 요청하는 악기에는 표시되지 않은 경우 지연될 수 있다고 예상했습니다. 이 상황은 실제로 발생하지만 새 날이 시작될 때만 강조 표시됩니다. 녹색으로.

2. 강조 표시하지 않으면 상황은 첫 번째 단락과 동일하지만 이것이 틱별 테스트에서 예상되는 경우 비동기화가 발생하는 "OHLC on M1" 모드에서도 이러한 상황이 발생하는 이유는 명확하지 않습니다. .

3. 노란색은 정보가 검색된 기기보다 두 개의 틱이 동시에 왔거나 요청한 기기에 대해 틱이 더 빨리 온 상황을 강조하지만 "OHLC on M1" 모드, 이미 틱 모드로 왔어요.

나는 개발자들에게 이것이 의도된 방식인지 설명하도록 요청합니다. 그렇다면 논리는 무엇입니까, 아니면 수정될 버그입니까?


답변:

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

MetaTrader 5 플랫폼 빌드 2615의 새 버전: 전략 테스터의 기본 분석 및 복잡한 기준

레나트 팻쿨린 , 2020.09.26 13:33

틱 모드에서 모든 것이 정확하기 때문에 귀하의 질문은 독점적으로 OHLC 테스트 모드에 관한 것입니다.

그러면 답은 간단 합니다. OHLC 테스트 중에 다른 사람의 기호가 정확히 동기화된다는 보장은 없습니다 . OHLC는 순전히 더러운 테스트를 위한 것입니다.


 

다른 심볼에서 데이터를 요청할 때 비동기화 문제를 해결한 것 같습니다. 1분의 막대를 희생해야 하는 경우도 있었지만 반면에 모든 틱과 OHLC에 대해 모델링할 때 안정적인 결과를 얻었습니다. 즉, 실제 거래에서도 마찬가지입니다.

 //+------------------------------------------------------------------+
//|Получение информации о ценах OHLC текущего бара                   |
//+------------------------------------------------------------------+
void Get_OHLC( string symbol, ENUM_TIMEFRAMES TF, double &arr_OHLC[])
{
   ArrayResize (arr_OHLC, 4 );
   arr_OHLC[ 0 ]= iOpen (symbol,TF, 0 );
   arr_OHLC[ 3 ]= iOpen (symbol, PERIOD_M1 , 0 );
   datetime s= iTime (symbol,TF, 0 );
   datetime f= iTime (symbol, PERIOD_M1 , 1 );
   datetime Time_1= iTime ( Symbol (), PERIOD_M1 , 1 );

   if (TF!= PERIOD_M1 )
   {
       double arr_High[];
       double arr_Low[];
       int copied= 0 ;
       if ( Symbol ()!=symbol) //Если берем данные с другого символа, то проверяем синхронизацию - нужно, так как при открытии новой свечи на текущем символе данных можнт небыть на опрашиваемом символе
      {
         if (Time_1>f) //На текущем символе открылись раньше появления нового бара на запрашиваемом
         {
            f= iTime (symbol, PERIOD_M1 , 0 );
            arr_OHLC[ 3 ]= iClose (symbol, PERIOD_M1 , 0 );
         }
         else
         {
            arr_OHLC[ 3 ]= iClose (symbol, PERIOD_M1 , 1 );
         }
         if (s>f) //Если текущий бар ТФ открылся раньше, чем минутный бар до которого включительно берем информацию OHLC
         {
            s= iTime (symbol,TF, 1 );
            arr_OHLC[ 0 ]= iOpen (symbol,TF, 1 );
         }
         copied= CopyHigh (symbol, PERIOD_M1 ,s,f,arr_High);
         if (copied> 0 )
         {
            arr_OHLC[ 1 ]=arr_High[ ArrayMaximum (arr_High, 0 , WHOLE_ARRAY )];
         }
         else
         {
             Print ( "Ошибка копирования в массив arr_High" );
         }
         copied= CopyLow (symbol, PERIOD_M1 ,s,f,arr_Low);
         if (copied> 0 )
         {
            arr_OHLC[ 2 ]=arr_Low[ ArrayMinimum (arr_Low, 0 , WHOLE_ARRAY )];
         }
         else
         {
             Print ( "Ошибка копирования в массив arr_Low" );
         }

      }
       else
      {
         if (s<f)
         {
            copied= CopyHigh (symbol, PERIOD_M1 ,s,f,arr_High);
             if (copied> 0 )
            {
               arr_OHLC[ 1 ]=arr_High[ ArrayMaximum (arr_High, 0 , WHOLE_ARRAY )];
            }
             else
            {
               Print ( "Ошибка копирования в массив arr_High" );
            }
            copied= CopyLow (symbol, PERIOD_M1 ,s,f,arr_Low);
             if (copied> 0 )
            {
               arr_OHLC[ 2 ]=arr_Low[ ArrayMinimum (arr_Low, 0 , WHOLE_ARRAY )];
            }
             else
            {
               Print ( "Ошибка копирования в массив arr_Low" );
            }
         }
         else
         {
             if (s==f) //Если ТФ открылся на прошлом минутном баре
            {
               arr_OHLC[ 1 ]= iHigh (symbol, PERIOD_M1 , 1 );
               arr_OHLC[ 2 ]= iLow (symbol, PERIOD_M1 , 1 );
            }
             if (s>f) //Если ТФ открылся на текущем минутном баре
            {
               arr_OHLC[ 1 ]= iOpen (symbol, PERIOD_M1 , 0 );
               arr_OHLC[ 2 ]= iOpen (symbol, PERIOD_M1 , 0 );
            }
         }
      }
   }
   else
   {
      arr_OHLC[ 0 ]= iOpen (symbol, PERIOD_M1 , 0 );
      arr_OHLC[ 1 ]= iOpen (symbol, PERIOD_M1 , 0 );
      arr_OHLC[ 2 ]= iOpen (symbol, PERIOD_M1 , 0 );
      arr_OHLC[ 3 ]= iOpen (symbol, PERIOD_M1 , 0 );
       if ( Symbol ()!=symbol)
      {
         if (Time_1> iTime (symbol, PERIOD_M1 , 1 )) //Если не появился новый бар
         {
            arr_OHLC[ 0 ]= iOpen (symbol, PERIOD_M1 , 0 );
            arr_OHLC[ 1 ]= iHigh (symbol, PERIOD_M1 , 0 );
            arr_OHLC[ 2 ]= iLow (symbol, PERIOD_M1 , 0 );
            arr_OHLC[ 3 ]= iClose (symbol, PERIOD_M1 , 0 );
         }
         else //Если появился новый бар
         {
            arr_OHLC[ 0 ]= iOpen (symbol, PERIOD_M1 , 1 );
            arr_OHLC[ 1 ]= iHigh (symbol, PERIOD_M1 , 1 );
            arr_OHLC[ 2 ]= iLow (symbol, PERIOD_M1 , 1 );
            arr_OHLC[ 3 ]= iClose (symbol, PERIOD_M1 , 1 );
         }
      }
   }
}
 
일반적인 강력한 알고리즘의 경우 약간의 동기화 불일치는 아무 영향도 미치지 않습니다. 인위적인 문제)
 
막심 드미트리예프스키 :
일반적인 강력한 알고리즘의 경우 약간의 동기화 불일치는 아무 영향도 미치지 않습니다. 인위적인 문제)

이 "정상적인"것들은 어디에서 얻을 수 있습니까!? 영향을 미치는지 여부는 무작위입니다. 양자화 중에 분위수 사이의 경계에 부딪힌 다음 훈련 중에 1분위수 차이가 실제 생활에서 입력을 건너뛰게 할 수 있습니다. 일반적으로 테스터에서 휴관일의 거래를 재현할 수 없을 때를 좋아하지 않아서 원인을 파악하고 수정하기 시작했습니다.