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

 
예브게니 추마코프 :

기록에 공백이 없고 모든 요일에 1440분이 있다고 가정하면(금요일에는 더 적음) 코드는 다음과 같아야 합니다.

eurusd에도 공백이 있습니다. 바 시간으로 작업
 
도서관 :
eurusd에도 공백이 있습니다. 바 시간으로 작업


그가 그랬다면 그가 그렇게 했을 것이라는 것은 이해할 만하다. 이것은 단지 설명을 쉽게 하기 위한 것입니다.

 

이런 식으로 작동하는 것 같습니다) 돈을 절약하기 위해 새 행이 rate[i].high에 수집됩니다.

 #property script_show_inputs
//+------------------------------------------------------------------+
input datetime tstart = D'2020.5.1 00:00' ;   // начало промежутка исследуемого времени
input datetime tstop = D'2020.10.1 00:00' ;   // конец промежутка исследуемого времени
string zztn = "dvol\\" + _Symbol + ".txt" ; // text file name
//+------------------------------------------------------------------+
#define NM 1440
ulong NSM = 60 ;
ulong NSD = 60 * 1440 ;
//+------------------------------------------------------------------+
void OnStart ()
{
   MqlRates rates[];
   double vol[NM] = { 0.0 }, d;
   int n[NM] = { 0 }, t;
   int nprice = CopyRates ( Symbol (), PERIOD_M1 , tstart, tstop, rates);
   for ( int i = 0 ; i < nprice; ++i)
  {
    t = ( int )(((( ulong )rates[i].time) % NSD) / NSM);
    d = rates[i].close - rates[i].open;
    ++n[t];
    vol[t] += d * d;
  }
   for ( int i = 0 ; i < NM; ++i)
  {
     if (n[i] > 1 ) vol[i] /= n[i];
    vol[i] = sqrt (vol[i]);
  }
   for ( int i = 0 ; i < nprice; ++i)
  {
    t = ( int )(((( ulong )rates[i].time) % NSD) / NSM);
     if (vol[t] > 0 ) rates[i].high = (rates[i].close - rates[i].open) / vol[t];
     if (i > 0 ) rates[i].high += rates[i - 1 ].high;
  }
   int ft = FileOpen (zztn, FILE_WRITE | FILE_COMMON | FILE_ANSI | FILE_TXT );
   FileWriteString (ft, "t p" );
   for ( int i = 0 ; i < nprice; ++i)
     FileWriteString (ft, "\n" + ( string )(( ulong )rates[i].time) + " "   + ( string )rates[i].high);
   FileClose (ft);
}
 
알렉세이 니콜라예프 :

이런 식으로 작동하는 것 같습니다) 돈을 절약하기 위해 새 행이 rate[i].high에 수집됩니다.

예를 들어 2020.5.1 00:00부터 미래의 막대, 2020.10.1 00:00 및 그 사이의 막대로 과거 막대를 정규화합니다.
실생활에서는 그렇지 않습니다.
각 막대에서 거의 동일한 계산을 수행해야 하지만 과거 막대에서만 계산해야 합니다.

 
알렉세이 니콜라예프 :

이런 식으로 작동하는 것 같습니다) 돈을 절약하기 위해 새 행이 rate[i].high에 수집됩니다.

이것이 올바르게 수행되더라도 이러한 정규화된 양초 높이는 네트워크/포레스트에 의해 매우 정확하게 복원될 수 있습니다.
기능으로 우리는 하루 오프셋으로 60개의 양초 높이를 제공하고 코드에서 얻은 정규화된 높이를 훈련합니다.
100%에 가까운 정확도로 교육을 받아야 합니다.

저것들. 양초의 정규화 된 높이는 새로운 정보를 전달하지 않습니다. 필요한 경우 모델이 재생산하고 자체 내에서 고려합니다.
유일한 이점은 모델 교육을 위해 추가로 60개 기능을 적용할 필요가 없으며, 귀하의 기능 중 하나로 교체할 수 있다는 것입니다.
누군가가 2개월 전에 막대를 기능으로 제출할 가능성은 거의 없습니다. 제출하지 않은 사람들을 위한 새로운 정보가 있습니다.)

물론, 이러한 정규화된 양초 높이가 모델의 성능을 향상시키는지 확인해야 하며, 물론 이를 사용해야 합니다(선호되는 기능 중 하나 또는 구성되는 60개).

 
이미 무언가를 확인합시다. 그렇지 않으면 세 페이지를 쓰고 에너지를 소비했으며 오류 증가가 0.5 퍼센트가되는 것을 금지합니다.
 
도서관 :

기이한. 이것이 어떻게 설명될 수 있는지 궁금합니다.
다른 버전이 주석 처리되었지만 논리적인 이유로 마음에 들지 않았습니다.

어떤 RandomInteger()를 사용하고 있습니까? 저는 XOR입니다.

어떻게 설명해야할지 모르겠네요 :)

나는이 기능을했다

 int RandomInteger( int max_vl)
{
   return ( int ) MathFloor (( MathRand ()+ MathRand ()* 32767.0 )/ 1073741824.0 *max_vl);   //случайное Int от 0 до  1073741824
}
 

Maxim, C++용 모델이 CatBoost 에서 올바르게 언로드되지 않은 것 같습니다. 파이썬용 모델과 비교할 수 있습니까?

나는 지표를 CPP 모델에서 가져오고 지표를 이진 모델에서 가져온 MQL5의 모델 해석 지표에 동의하지 않습니다. 델타 약 0.15 - 많은 것입니다.

 
도서관 :

예를 들어 2020.5.1 00:00부터 미래의 막대, 2020.10.1 00:00 및 그 사이의 막대로 과거 막대를 정규화합니다.
실생활에서는 그렇지 않습니다.
각 막대에서 거의 동일한 계산을 수행해야 하지만 과거 막대에서만 계산해야 합니다.

예, 미래에 대한 일견뿐만 아니라 즉시 명백하지 않은 다른 문제가 있습니다. 다이렉트, 다이렉트 트레이딩의 경우 완전히 적용되는 것은 아니지만, 사전 분석을 위해서는 필수 불가결한 사항입니다. 예를 들어, 정규화되지 않은 증분 간의 상관 관계를 고려하는 것은 의미가 없습니다.

 
알렉세이 니콜라예프 :

예, 미래에 대한 일견뿐만 아니라 즉시 명백하지 않은 다른 문제가 있습니다. 다이렉트, 다이렉트 트레이딩의 경우 완전히 적용되는 것은 아니지만, 예비 분석을 위해서는 필수 사항입니다. 예를 들어, 정규화되지 않은 증분 간의 상관 관계를 고려하는 것은 의미가 없습니다.

나는 메모를 할 것입니다. 아마도 언젠가는 이전 소절을 위해 그것을 다시 만들고 학습을 향상시키는지 확인할 것입니다.
누군가가 전에 확인하는 경우 - 구독을 취소합니다.

사전 분석이란 무엇입니까? 모델의 입력에 제출하고 이 기능이 있는 경우와 없는 경우를 비교합니다.

마지막 30분까지는 정상화하는 것이 좋다고 생각합니다.
또는 오늘의 마지막 30분과 이전 5일의 각각 30분입니다.

3월에 변동성이 어떻게 변했는지에 따라 옵션은 적응하는 데 매우 오랜 시간이 걸릴 것입니다. 한 달 또는 반, 현재 가치는 한 두 달 전보다 훨씬 높을 것입니다. 결과적으로 모델은 알 수 없는 영역에서 작동합니다. 그녀는 예측을 기반으로 한 그러한 작업의 예가 없을 것입니다.

지난 주에 정상화되면 그녀는 게임의 새로운 규칙을 빠르게 배울 것입니다.
사유: