새로운 메타트레이더 5 빌드 3620: 웹 터미널 개선 사항, ONNX 지원 및 MQL5에서 매트릭스 곱셈의 빠른 실행

 

업데이트된 메타트레이더 5 플랫폼의 새 버전은 2023년 3월 10일(금)에 출시될 예정입니다.

이번 업데이트에서는 개선된 사항들이 웹 터미널에 적용되었습니다. 웹 터미널 인터페이스에서 여러가지 색상 템플릿을 구현할 수 있게 하였고 심볼 창을 개선했습니다.

새로운 메타트레이더 5 빌드 3620: 웹 터미널 개선 및 MQL5의 빠른 행렬 곱셈

또한 새 버전은 MQL5에서 GeMM(General Matrix Multiplication)을 제공합니다. 이 알고리즘은 대부분의 프로세서에서 계산 속도를 높입니다. 새로운 알고리즘은 matrix::GeMM 메서드에서 지원됩니다.

또한 MQL5에서 ONNX 모델에 대한 운영 지원도 구현했습니다. 이렇게 하면 Expert Advisor에서 신경망을 사용하는 것이 매우 용이해 집니다.

새 버전에는 다음과 같은 변경 사항이 포함되어 있습니다:


MetaTrader 5 클라이언트 터미널 빌드 3620

  1. 터미널: 보고서에서 총 수익의 계산이 수정되었습니다.
  2. 터미널: 마켓 위치에서 제공되는 트레이딩 상품에 대한 데이터가 업데이트되었습니다.
  3. 터미널: Wine 7.0.1( )에서 거래 플랫폼을 시작하는 것이 수정되었습니다.
  4. 터미널: 검색바를 통해 시장 심도에 심볼을 추가하는 것이 수정되었습니다. 설명으로 찾은 기호는 해당 줄을 클릭하여 목록에 추가할 수 없었습니다.
  5. MQL5: 모델(개방형 신경망 교환)을 사용한 작업에 대한 지원이 추가되었습니다.

    ONNX는 머신 러닝 모델을 위한 오픈 소스 형식입니다. 이 형식은 Chainer, Caffee2 and PyTorch 등 많은 플랫폼에서 지원됩니다. 전문적인 도구를 사용하여 ONNX 모델을 생성하고 이를 MQL5 애플리케이션에 통합하여 트레이딩 의사 결정에 활용하세요.

    지원되는 모든 함수에 대한 설명은 문서에서 확인할 수 있습니다. 메타에디터의 프로젝트에서 테스트 ONNX 모델의 예를 확인할 수 있습니다. "도구 상자 \ 공개 프로젝트"에서 ONNX.Price.Prediction 프로젝트를 찾아 컨텍스트 메뉴에서 참가를 선택합니다. 프로젝트가 컴퓨터에 다운로드 되고 내비게이터에 표시될 것입니다:


    공개 프로젝트에서 ONNX 모델로 작업하는 예시


    프로젝트를 컴파일하고 EURUSD H1에서 실행하고 결과를 확인합니다.

    이 프로젝트에는 모델과 이를 실행하는 MQL5 코드 외에도 PricePredictionTraining.py Python 스크립트도 포함되어 있습니다. 이는 ONNX 모델을 직접 생성하는 방법을 보여줍니다. 스크립트를 실행하려면 컴퓨터에 Python을 설치하고 프롬프트 줄에서 필요한 모듈을 설치합니다:

    python.exe -m pip 설치 --업그레이드 pip
    파이썬 -m pip 설치 -업그레이드 텐서플로
    파이썬 -m pip 설치 -업그레이드 판다스
    파이썬 -m pip 설치 -업그레이드 scikit-learn
    파이썬 -m pip 설치 -업그레이드 matplotlib
    파이썬 -m pip 설치 -업그레이드 tqdm
    파이썬 -m pip 설치 -업그레이드 메타트레이더5
    파이썬 -m pip 설치 -업그레이드 onnx==1.12
    파이썬 -m pip 설치 -업그레이드 tf2onnx
    ONNX 사용 방법은 문서에서 확인할 수 있습니다.

  6. MQL5: 행렬 곱셈 (GeMM)에 대한 지원이 추가되었습니다. 이 알고리즘은 병렬 작업과 L1/L2/L3 캐시의 최적화된 활용을 통해 일부 프로세서에서 계산 속도를 높입니다. 계산 속도는 커널 라이브러리 (MKL) 및 같은 인기 패키지와 비슷합니다. 자세한 비교 테스트는 곧 게시될 예정입니다.

    새로운 알고리즘은 현재 matrix::GeMM 메서드에서 지원됩니다. 사용 중인 프로세서가 AVXFMA 지침을 지원하는 경우(2013년 이후에 출시된 대부분의 프로세서는 이 지침을 지원합니다) 알고리즘이 자동으로 활성화됩니다.

  7. MQL5: 행렬 및 벡터를 DLL로 전송하는 기능이 추가되었습니다. 이를 통해 외부 변수에서 관련 유형을 활용하는 함수들을 가져올 수 있습니다.

    행렬과 벡터는 버퍼에 대한 포인터로 DLL에 전달됩니다. 예를 들어 float 유형의 행렬을 전달하기 위해서는 DLL에서 내보낸 함수의 해당 매개변수가 float 유형의 버퍼 포인터를 가져야 합니다. 예를 들어:

    MQL5는
    #import "mmlib.dll"
    bool sgemm(uint flags,matrix<float> &C,const matrix<float> &A,const matrix<float> &B,ulong M,ulong N,ulong K,float alpha,float beta);
    #import
    C++
    extern "C" __declspec(dllexport) bool sgemm(UINT flags,float *C,const float *A,const float *B,UINT64 M,UINT64 N,UINT64 K,float alpha,float beta)
    버퍼 외에도 올바른 처리를 하기 위해서는 행렬 및 벡터의 크기를 전달해야 합니다.

  8. MQL5: MqlRates에서 별도의 배열로 동기화된 시계열을 복사하기 위한 새로운 CopySeries 함수가 추가되었습니다.

    CopySeries 함수를 사용하면 한 번의 호출 중에 필요한 시계열만을 다른 지정된 배열로 가져올 수 있게 되고 모든 시계열 데이터는 동기화됩니다. 이는 결과 배열의 특정 인덱스 N에 있는 모든 값이 특정한 심볼/시간 프레임 쌍의 동일한 바에 속한다는 것을 의미합니다. 따라서 프로그래머는 수신된 시계열을 바가 생성되는 시간에 맞춰 추가로 동기화할 필요가 없습니다.

    CopyRates는 전체 시계열 집합을 MqlRates 배열로 반환하는 반면 CopySeries 함수는 필요한 특정 시계열을 별도의 배열로 가져올 수 있습니다. 이 작업은 시계열의 유형을 선택하기 위해 플래그 조합을 지정하여 수행할 수 있습니다. 함수에 전달된 배열의 순서는MqlRates구조의 필드의 순서와 일치해야 합니다.

    struct MqlRates
      {
       datetime time;         // period beginning time
       double   open;         // open price
       double   high;         // high price for the period
       double   low;          // low price for the period
       double   close;        // close price
       long     tick_volume;  // tick volume
       int      spread;       // spread
       long     real_volume;  // exchange volume
      }

    따라서 현재 심볼/차트 주기의 마지막 100개 바에 대한 'time', 'close' 및 'real_volume' 시계열의 값을 가져와야 하는 경우 다음과 같은 호출을 사용해야 합니다:

    datetime  time[];
    double    close[];
    long      volume[];
    CopySeries(NULL,0,0,100,COPY_RATES_TIME|COPY_RATES_CLOSE|COPY_RATES_VOLUME_REAL,time,close,volume);
    

    "time, close, volume" 배열의 순서는 구조의 필드의 순서와 일치해야 합니다. rates_mask의 값들의 순서는 무시됩니다. mask는 다음과 같을 수 있습니다:

    COPY_RATES_VOLUME_REAL|COPY_RATES_TIME|COPY_RATES_CLOSE

    예시

    //--- input parameters
    input datetime InpDateFrom=D'2022.01.01 00:00:00';
    input datetime InpDateTo  =D'2023.01.01 00:00:00';
    input uint     InpCount   =20;
    //+------------------------------------------------------------------+
    //| Script program start function                                    |
    //+------------------------------------------------------------------+
    void OnStart(void)
      {
    //--- arrays to get timeseries from the Rates structure
       double   open[];
       double   close[];
       float    closef[];
       datetime time1[], time2[];
    //---request close prices to a double array
       ResetLastError();
       int res1=CopySeries(NULL, PERIOD_CURRENT, 0, InpCount,
                           COPY_RATES_TIME|COPY_RATES_CLOSE, time1, close);
       PrintFormat("1. CopySeries  returns %d values. Error code=%d", res1, GetLastError());
       ArrayPrint(close);
       
    
    //--- now also request open prices; use float array for close prices
       ResetLastError();
       int res2=CopySeries(NULL, PERIOD_CURRENT, 0, InpCount,
                           COPY_RATES_TIME|COPY_RATES_CLOSE|COPY_RATES_OPEN, time2, open, closef);
       PrintFormat("2. CopySeries  returns %d values. Error code=%d", res2, GetLastError());
       ArrayPrint(closef);
    //--- compare the received data
       if((res1==res2) && (time1[0]==time2[0]))
         {
          Print("  | Time             |    Open      | Close double | Close float |");
          for(int i=0; i<10; i++)
            {
             PrintFormat("%d | %s |   %.5f    |   %.5f    |   %.5f   |",
                         i, TimeToString(time1[i]), open[i], close[i], closef[i]);
            }
         }
    /*  Result
            1. CopySeries  returns 0 values. Error code=0
            [ 0] 1.06722 1.06733 1.06653 1.06520 1.06573 1.06649 1.06694 1.06675 1.06684 1.06604
            [10] 1.06514 1.06557 1.06456 1.06481 1.06414 1.06394 1.06364 1.06386 1.06239 1.06247
            2. CopySeries  returns 0 values. Error code=0
            [ 0] 1.06722 1.06733 1.06653 1.06520 1.06573 1.06649 1.06694 1.06675 1.06684 1.06604
            [10] 1.06514 1.06557 1.06456 1.06481 1.06414 1.06394 1.06364 1.06386 1.06239 1.06247
              | Time             |    Open      | Close double | Close float |
            0 | 2023.03.01 17:00 |   1.06660    |   1.06722    |   1.06722   |
            1 | 2023.03.01 18:00 |   1.06722    |   1.06733    |   1.06733   |
            2 | 2023.03.01 19:00 |   1.06734    |   1.06653    |   1.06653   |
            3 | 2023.03.01 20:00 |   1.06654    |   1.06520    |   1.06520   |
            4 | 2023.03.01 21:00 |   1.06520    |   1.06573    |   1.06573   |
            5 | 2023.03.01 22:00 |   1.06572    |   1.06649    |   1.06649   |
            6 | 2023.03.01 23:00 |   1.06649    |   1.06694    |   1.06694   |
            7 | 2023.03.02 00:00 |   1.06683    |   1.06675    |   1.06675   |
            8 | 2023.03.02 01:00 |   1.06675    |   1.06684    |   1.06684   |
            9 | 2023.03.02 02:00 |   1.06687    |   1.06604    |   1.06604   |
    */
      }
  9. MQL5: OrderSend함수의 작동을 수정했습니다. 동일한 계정이 여러 플랫폼에서 동시에 사용된 경우에 잘못된 주문 티켓을 함수 요청이 반환할 수 있었습니다.
  10. MQL5: EX5 라이브러리 가져오기 수정. 가져온 라이브러리의 이름이 가져온 파일의 이름과 일치하는 경우 오류가 발생했습니다.
  11. MetaEditor: 공유 프로젝트 멤버에게 푸시 알림을 전송하는 기능이 추가되었습니다. 새 옵션은 프로젝트 설정 및 파일의 변경 사항을 사용자에게 알릴 수 있습니다. 알림을 활성화하려면 MQL5.community 프로필의 "세팅 \ 보안" 섹션 아래에 MetaQuotes ID를입력하십시오.


    프로젝트 업데이트에 대한 푸시 알림


  12. MetaEditor: 탐색기의 파일 아이콘이 업데이트되었습니다. 새롭고 단순한 모양을 사용하여 더 쉽게 이해할 수 있도록 했습니다.
  13. 테스터: "|"가 포함된 경우에 입력 문자열의 매개변수가 잘리는 오류를 수정했습니다.
  14. 충돌 로그에 보고되는 오류를 수정했습니다.

MetaTrader 5 웹 터미널 빌드 3620

  1. 웹 터미널 인터페이스에서 사용 가능한 색상 템플릿을 추가했습니다. 템플릿은 차트 바, 선, 종합 시세와 계정 자산의 가격의 표시에 색상을 적용합니다. 우리 디자인 팀은 귀하의 제안과 일반적인 색상 조합을 기반으로 색상 템플릿의 사전 설정 사양을 만들었습니다.


    새로운 웹 터미널 색상 템플릿


  2. 재설계된 심볼 정보 창. 거래 상품 데이터는 쉽게 볼 수 있도록 논리 블록으로 재정렬 되었습니다.


    트레이딩 상품 사양 창 업데이트


  3. 웹 터미널을 통해 실계정을 만들 때 나타나는 문제를 수정했습니다. 등록 양식을 작성한 후에 서버에서 오류를 반환하기도 했었습니다.
  4. 거래 대화 상자의 오류를 수정했습니다. 사용자가 포지션 수정 대화 상자가 열려 있는 동안 도구 상자 창에서 X 버튼을 눌러 포지션을 청산하면 대화창의 내용이 재설정되지 않았습니다. 업데이트 후에는 이 경우에 대화 상자가 새로운 주문 실행 모드로 자동 재설정됩니다.
  5. 계정 관리 대화 상자의 서버 필드의 표시를 수정했습니다.
  6. 도구 모음에서 현재 차트 주기의 표시를 수정했습니다.
  7. 거래 대화 상자에서 기본 자산 단위로 볼륨 표시를 수정했습니다.
  8. 스탑로스 및 익절 레벨 변경 수정. 값 중 하나를 변경하면 특정 조건에서 두 번째 값이 재설정될 수 있었습니다.
  9. 투자 위험 경고 표시를 수정했습니다.

업데이트는 라이브 업데이트 시스템을 통해서 제공됩니다.

사유: