기고글 토론 "MetaTrader 5에서 자동 정리 기능 맵 (코호넨 맵) 이용하기" - 페이지 4

 
Graff:

용도가 뭔지 모르겠어요. 단말기에서 직접 정보를 얻을 수 있습니다.

어떤 용도로 사용되는지 상상하기조차 무섭습니다. 아마도 누군가가 수동으로 세었을 것입니다.

SZY: 누군가 스크립트 없이도 전문가 어드바이저가 터미널에서 직접 정보를 가져올 수 있도록 모드를 게시할 수 있나요?

글쎄요, 겁이 나면 당연히 안됩니다).
 
sergeev:
어떤 정보가 필요한가요?
스크립트에 의해 파일로 언로드되고 전문가 어드바이저가 분석을 위해 다시 가져옵니다. 즉, SOM.mq5 전문가 어드바이저가 DJ.mq5 및 FX.mq5 스크립트의 도움 없이 독립적으로 터미널에서 데이터를 수신할 수 있도록 하기 위한 것입니다.
 

이 문서에 전문가 어드바이저를 얻기 위한 모든 것이 포함되어 있나요?

신경망 전문가 어드바이저를 구현하는 데 관심이 있습니다.

 

안녕하세요, 포럼 회원 여러분!

매우 흥미로운 기사입니다! 저도 이 SOM 코드를 사용하려고 합니다.

somk

가중치 p1-p4 - 시장의 데이터 (지금까지는 ZZ 포인트 간의 차이).

p5 - 가상 매수 거래의 결과 - TP=1, SL=-1 (지금까지 TP=SP=300pp). 앞으로 단 하나의 p5 BMU (가장 가까운 벡터)만으로는 결과를 예측하기에 충분하지 않은 것 같습니다.

누구든지 BMU와의 거리를 고려하여 BMU 주변 영역의 결과를 계산하는 방법을 제안 할 수 있습니까 (파란색 위의 명확성을 위해) ?

 
sealdo:

누구든지 BMU와의 거리를 고려하여 BMU 주변 영역 (명확성을 위해 파란색 원으로 표시) 의 결과를 계산하는 것이 얼마나 쉬운 지 알려줄 수 있습니까?

프로그래밍 방식으로 좌표로이 영역을 찾는 방법을 말하는 건가요?
 
progma137:
저도 그렇게 생각했는지 궁금합니다. 프로그래밍 방식으로 좌표로 이 영역을 찾는 방법을 말하는 건가요?

CSOM 클래스에는 이미 함수가 있습니다:

int BestMatchingNode(double &vector[]); // 주어진 벡터를 기준으로 그리드에서 최적의 노드를 찾습니다.

그리드의 차원을 알면 BMU(또는 이 구현에서는 BMN)의 좌표를 쉽게 계산할 수 있습니다.
여기서는 BMU와의 거리를 고려하여 BMU 주변 영역의 총 결과(하나의 매개변수(가중치)로)를 정확히 계산하고자 합니다. 예를 들어 지름이 10개의 뉴런(셀)인 영역을 예로 들어 보겠습니다. 가장 가까운 뉴런이 결과에 큰 영향을 미칩니다. 그리고 멀어질수록 약해집니다....

여기서 그리드 가장자리에 위치한 BMU 셸을 어떻게 처리해야 하는지 궁금합니다. 결국, 그들은 이웃이 더 적습니다.

 

지도에서 막대를 찾는 방법을 알려주실 수 있나요?

4개의 벡터를 입력하고 4개의 지도를 얻습니다. 현재 날짜(일수)부터 3개의 막대까지 모든 막대에 궤적을 그려서 클러스터의 상태를 분석하고 싶습니다.

예를 들어모든 맵에서 주어진 막대 번호에서 궤적을 그리는 void DrawTrajectory(int from, int count) 함수를 사용하여 프로그래밍 방식으로 수행 할 수 있습니다.

두 번째 질문은 출력 맵과 가장 중요한 빈도 맵을 어떻게 얻을 수 있을까요?

 

나는 응답을 기다리지 않았다 ... 주어진 수의 입력 벡터에서 주어진 단계 수로 궤적의 입력 맵에 표시하는 방법을 작성했습니다. 뭔가 잘못 되었다면 용서하지 마십시오-나는 프로그래머가 아닙니다 :)

누군가이 매우 영리한 라이브러리 (저자와 Alexey Sergeev 덕분에)를 실제 적용 수준으로 가져올 수 있습니까? !!!!


//------------------------------------------------------------------ ShowTrajectory
void CSOM::ShowTrajectory(int n_patern, int m_cnt) // 입력 벡터의 궤적을 표시하는 방법
{
        if(m_cnt<=0) return;
        int idx=0,x[],y[], dy=0;
        string name[];
        ArrayResize(x,m_cnt);
        ArrayResize(y,m_cnt);
        ArrayResize(name,m_cnt);
        double data[]; ArrayResize(data, m_dimension);
   for(int ind=0; ind<m_nSet; ind++) // 훈련 세트의 벡터 값으로 데이터 설정
  {
        if(ind<n_patern) continue;  // 필요한 입력 패턴을 기다립니다.
        for(int k=0; k<m_dimension; k++) data[k]=m_set[m_dimension*(ind)+k];
        int winningnode=BestMatchingNode(data); // 가장 가까운 노드의 인덱스 찾기
                
         // 추적을 위해 선택한 입력 패턴의 좌표 저장
        int x1,y1,x2,y2;
        m_node[winningnode].GetCoordinates(x1,y1,x2,y2);
        if(m_bHexCell) // 만약 육각형
      {
          int x_size=int(MathAbs(x2-x1));
          int y_size=int(MathAbs(y2-y1));
          dy=y_size;
          y1=y1+y_size/4; 
          y2=y2+y_size/4;
      }
        x[idx]=(x1+x2)/2;
        y[idx]=(y1+y2)/2;               
        name[idx]=(string)ind;
        //x[idx]=(int)m_node[winnode].X();
        //y[idx]=(int)m_node[winnode].Y();
        idx++;
        m_cnt--;        
        if(m_cnt==0) break;      // 필요한 입력 부계 개수를 기록합니다.
  }
  // 궤적, 노드 및 비문 그리기
   int bcol=clrBlack;
   for(int k=0; k<m_dimension; k++)
  {
      int yp=0, yc;
      int sz=ArraySize(x);
      for(int j=0; j<sz; j++) 
    {
         yc=y[j];
         // 노드
         int sh=2;
         if(j>0) sh=1;
         m_bmp[k].DrawRectangle(x[j]-sh,y[j]-sh,x[j]+sh,y[j]+sh,bcol,true);
         // 궤적
         if(j<sz-1) m_bmp[k].DrawLine(x[j],y[j],x[j+1],y[j+1],bcol);  
         yc=y[j]-dy;
         if(MathAbs(yp-yc)<dy) yc-=dy;
         yp=yc;
         // 파터나(막대) 수 
         m_bmp[k].TypeText(x[j],yc,name[j], clrIndigo);
    }    
  }
}
 

CSOM 클래스에서 로드된 훈련 벡터 m_nSet의 카운터는 CSOM::CSOM() 생성자에서만 초기화됩니다.

따라서 반복되는 재학습 모드에서 훈련 벡터의 수가 지속적으로 증가합니다.

CSOM::LoadTrainData(...) 메서드에 m_nSet=0; 줄을 추가하는 것이 좋습니다.

 
GSB:

누군가가 매우 유용한 라이브러리를 실용적인 수준으로 가져올 수 있을까요(저자와 Alexey Sergeev 덕분에)? !!!!


이지도는 분석해야하는 데이터를 설정하고이를 기반으로 결론을 내리는 데 필요한 데이터를 설정하는 수단에 지나지 않습니다.