MetaTrader 5 플래폼 업데이트 3390: OpenCL과 수학 함수에서 플롯, 머신 러닝에서 활성화와 손실 메서드

 

MetaTrader 5 플랫폼 업데이트는 2022년 8월 4일 목요일에 출시됩니다. 업데이트에는 다음 변경 사항이 포함됩니다.

  1. 터미널: 거래 계정에 처음으로 연결하는 동안 튜토리얼을 자동으로 여는 기능을 추가했습니다. 이것은 초보자가 거래와 관련한 기본 사항을 배우고 플랫폼의 기능을 탐색하는 데 도움이 됩니다. 이 자습서는 여러 섹션으로 나뉘며 각 섹션에서는 특정 주제에 대한 간략한 정보를 제공합니다. 트레이닝의 진행 상황은 파란색 선으로 표시됩니다.

    Added automatic opening of a tutorial during the first connection to a trading account


  2. 터미널: '수익으로 마감'/'손실로 마감' 수정 벌크 실행. 이전에는 반대의 포지션이 존재하는 경우 반대의 포지션을 사용했습니다. 예를 들어 EURUSD에 대해 2개의 손실 중인 매수 포지션이 있고 EURUSD에 대해 1개의 수익 중인 매도 포지션이 있는 경우 '손실 마감' 벌크 실행을 하면 세 포지션 모두가 청산되었습니다. 매수와 매도는 '선택 청산'으로 청산되고 남아있는 매수는 평상시 처럼 청산됩니다. 이제 명령이 제대로 작동합니다: 수익 중이거나 손실중인 선택된 포지션만 청산합니다.

  3. 터미널: 음수인 역사적 가격의 표시 수정. 이러한 가격이 모든 기간에서 올바르게 표시됩니다.
  4. 터미널: 터미널의 시스템 리소스의 소비를 최적화하고 크게 줄였습니다.
  5. 터미널: 거래 상품에 대한 기본 데이터베이스가 업데이트되었습니다. 거래 종목에 사용할 수 있는 데이터 수집기의 수가 15개로 확장되었습니다. 사용자는 가장 인기 있는 경제관련 정보 수집기를 통해 더 많은 시세 틱커에 액세스할 수 있습니다.


    Updated fundamental database for trading instruments

    글로벌 거래소에는 7000여 증권과 2000여 ETF가 상장돼 있습니다. 또한 거래소는 선물 및 기타 파생 상품을 제공합니다. MetaTrader 5 플랫폼은 거래소 상품과 관련한 거대한 데이터베이스에 액세스를 제공합니다. 관련된 데이터에 액세스하기 위해 사용자는 Market Watch에서 클릭 한 번으로 선택한 애그리게이터의 웹사이트로 갈 수 있습니다. 플랫폼은 각 금융 상품에 대한 다양한 정보 소스를 제공합니다.


  6. 터미널: 새로운 주문 창에서 손절매와 이익실현 표시를 수정했습니다. FIFO 계정의 경우 동일한 상품에 대한 기존 오픈 포지션의 스탑 레벨에 따라 스탑 레벨이 자동으로 설정됩니다. 이 절차는 FIFO 규칙을 준수하는 데 필요합니다.

  7. MQL5: 수학 함수는 이제 행렬 및 벡터와 함께 작동할 수 있습니다.

    우리는 알고리즘 트레이딩과 머신 러닝을 위한 MetaTrader 5 플랫폼의 기능을 계속 확장하고 있습니다. 전에는 행렬과 벡터라는 새로운 데이터 유형을 추가하였고 여기에서는 데이터 처리에 배열을 사용할 필요가 없었습니다. 이러한 데이터 유형을 사용하기 위한 70개 이상의 메소드가 MQL5에 추가되었습니다. 새로운 메서드를 사용하면 단일 작업으로 선형 대수 및 통계 계산을 수행할 수 있습니다. 코드 라인이 많지 않더라도 곱셈, 변환 및 방정식 시스템을 쉽게 구현할 수 있습니다. 최신 업데이트에는 수학 함수가 포함되어 있습니다.

    수학 함수는 원래는 스칼라 값에 대한 관련 연산을 수행하도록 설계되었습니다. 이 빌드에서는 대부분의 함수를 행렬과 벡터에 적용할 수 있습니다. 다음을 포함합니다. MathAbs, MathArccos, MathArcsin, MathArctan, MathCeil, MathCos, MathExp, MathFloor, MathLog, MathLog10, MathMod, MathPow, MathRound, MathSin, MathSqrt, MathTan, MathExpm1, MathLog1p, MathArccosh, MathArcsinh, MathArctan. 이러한 연산은 행렬 또는 벡터의 요소별 처리를 의미합니다. 예시:
    //---
      matrix a= {{1, 4}, {9, 16}};
      Print("matrix a=\n",a);
    
      a=MathSqrt(a);
      Print("MatrSqrt(a)=\n",a);
      /*
       matrix a=
       [[1,4]
        [9,16]]
       MatrSqrt(a)=
       [[1,2]
        [3,4]]
      */
    MathModMathPow의 경우 두 번째 요소는 적절한 크기의 벡터/행렬 또는 스칼라일 수 있습니다.

    다음 예제는 벡터에 수학 함수를 적용하여 표준 편차를 계산하는 방법을 보여줍니다.
    //+------------------------------------------------------------------+
    //| Script program start function                                    |
    //+------------------------------------------------------------------+
    void OnStart()
     {
    //--- Use the initializing function to populate the vector
      vector r(10, ArrayRandom); // Array of random numbers from 0 to 1
    //--- Calculate the average value
      double avr=r.Mean();       // Array mean value
      vector d=r-avr;            // Calculate an array of deviations from the mean
      Print("avr(r)=", avr);
      Print("r=", r);
      Print("d=", d);
      vector s2=MathPow(d, 2);   // Array of squared deviations
      double sum=s2.Sum();       // Sum of squared deviations
    //--- Calculate standard deviation in two ways
      double std=MathSqrt(sum/r.Size());
      Print(" std(r)=", std);
      Print("r.Std()=", r.Std());    
     }
    /*
      avr(r)=0.5300302133243813
      r=[0.8346201971495713,0.8031556138798182,0.6696676534318063,0.05386516922513505,0.5491195410016175,0.8224433118686484,...
      d=[0.30458998382519,0.2731254005554369,0.1396374401074251,-0.4761650440992462,0.01908932767723626,0.2924130985442671, ...
       std(r)=0.2838269732183663
      r.Std()=0.2838269732183663
    */ 
    //+------------------------------------------------------------------+
    //| Fills the vector with random values                              |
    //+------------------------------------------------------------------+
    void ArrayRandom(vector& v)
     {
      for(ulong i=0; i<v.Size(); i++)
        v[i]=double(MathRand())/32767.;
     }
    

  8. MQL5: 템플릿 함수에서 해당 행렬, matrixf, vector과 vectorf 유형 대신에 matrix<double>, matrix<float>, vector<double>, vector<float> 표기법에 대한 지원이 추가되었습니다.

  9. MQL5: float유형의 연산에 대한 수학 함수가 개선되었습니다. 수학 함수를 'float' 행렬 및 벡터에 적용할 수 있도록 새로 구현된 기능은 'float' 스칼라에 적용된 수학 함수가 개선되게 했습니다. 이전에는 이러한 함수 매개변수가 무조건 'double' 유형으로 캐스트된 다음 수학 함수의 해당 구현이 호출되었으며 결과는 'float' 유형으로 다시 캐스트 되었습니다. 이제 추가적으로 타입의 캐스팅 없이 작업이 구현됩니다.

    다음 예는 수학적으로 사인을 계산할 때의 차이를 보여줍니다.

    //+------------------------------------------------------------------+
    //| Script program start function                                    |
    //+------------------------------------------------------------------+
    void OnStart()
     {
    //---  Array of random numbers from 0 to 1
      vector d(10, ArrayRandom);
      for(ulong i=0; i<d.Size(); i++)
       {
        double delta=MathSin(d[i])-MathSin((float)d[i]);
        Print(i,". delta=",delta);
       }
     }
    /*
       0. delta=5.198186103783087e-09
       1. delta=8.927621308885136e-09
       2. delta=2.131878673594656e-09
       3. delta=1.0228555918923021e-09
       4. delta=2.0585739779477308e-09
       5. delta=-4.199390279957527e-09
       6. delta=-1.3221741035351897e-08
       7. delta=-1.742922250969059e-09
       8. delta=-8.770715820283215e-10
       9. delta=-1.2543186267421902e-08
    */
    //+------------------------------------------------------------------+
    //| Fills the vector with random values                              |
    //+------------------------------------------------------------------+
    void ArrayRandom(vector& v)
     {
      for(ulong i=0; i<v.Size(); i++)
        v[i]=double(MathRand())/32767.;
     }

  10. MQL5: 행렬 및 벡터에 대한 활성화 및 파생 메서드 추가:
    AF_ELU               지수 선형 단위
    AF_EXP               지수
    AF_GELU              가우스 오차 선형 단위
    AF_HARD_SIGMOID      하드 시그모이드
    AF_LINEAR            리니어
    AF_LRELU             Leaky REctified Linear Unit
    AF_RELU              정류 리니어 유닛
    AF_SELU              스케일된 지수 선형 단위
    AF_SIGMOID           시그모이드
    AF_SOFTMAX           소프트맥스
    AF_SOFTPLUS          소프트플러스
    AF_SOFTSIGN          소프트사인
    AF_SWISH             Swish
    AF_TANH              쌍곡선 탄젠트
    AF_TRELU             Thresholded REctified Linear Unit
    신경망 활성화 함수는 가중치 입력 신호의 합이 네트워크 수준에서 노드 출력의 신호로 변환되는 방식을 결정합니다. 활성화 함수의 선택은 신경망 성능에 큰 영향을 미칩니다. 모델의 다른 부분은 다른 활성화 함수를 사용할 수 있습니다. 알려진 모든 함수 외에도 MQL5는 파생적인 것들을 제공합니다. 파생 함수를 사용하면 학습동안 일어난 오류를 기반으로 조정을 빠르게 계산할 수 있습니다.

  11. MQL5: 행렬 및 벡터에서 손실 함수가 추가되었습니다. 손실 함수는 다음과 같은 매개변수가 있습니다.
    LOSS_MSE            평균 제곱 오차
    LOSS_MAE            평균 절대 오차
    LOSS_CCE            범주형 교차엔트로피
    LOSS_BCE            이진 교차 엔트로피
    LOSS_MAPE           중간값 절대 백분율 오류
    LOSS_MSLE           평균 제곱 로그 오류
    LOSS_KLD            Kullback-Leibler 다이버전스
    LOSS_COSINE         코사인 유사성/근접성
    LOSS_POISSON        푸아송
    LOSS_HINGE          힌지
    LOSS_SQ_HINGE       제곱 힌지
    LOSS_CAT_HINGE      범주형 힌지
    LOSS_LOG_COSH       로그 쌍곡선 코사인
    LOSS_HUBER          후버

    손실 함수는 모델이 실제 값을 얼마나 잘 예측하는지를 평가합니다. 모델 구성은 각 단계에서 함수 값의 최소화를 목표로 합니다. 접근 방식은 특정 데이터 세트에 따라 다릅니다. 또한 손실 함수는 무게와 오프셋에 따라 달라질 수 있습니다. 손실 함수는 1차원이며 신경망에 대한 일반적인 평가를 제공하기 때문에 벡터가 아닙니다.

  12. 행렬과 벡터와 관련해 matrix::CompareByDigits 과 vector::CompareByDigits 메서드를 추가했습니다. 두 행렬/벡터의 요소를 유효 자릿수까지 비교합니다.

  13. 문자열과 관련한 MathMinMathMax함수에 대한 지원이 추가되었습니다. 함수는 사전식 비교를 사용합니다. 문자는 대소문자를 구분하여 알파벳순으로 비교됩니다.

  14. MQL5: 최대 OpenCL 개체 수가 256개에서 65536개로 증가했습니다. OpenCL 개체 핸들은CLContextCreate, CLBufferCreateCLProgramCreate함수를 사용하여 MQL5 프로그램에서 생성됩니다. 이전의 핸들을 256개로 제한한 것은 머신 러닝 메서드를 효율적으로 사용하기에 충분하지 않았습니다.

  15. MQL5: 'double' 지원 없이 그래픽 카드에서 OpenCL을 사용할 수 있는 기능이 추가되었습니다. 많은 작업에서 float를 사용한 계산이 사용되었지만 이전에는 MQL5 프로그램에서 Double을 지원하는 GPU만 허용되었습니다. float 유형은 공간을 덜 차지하므로 원론적으로 병렬 컴퓨팅의 기본으로 간주됩니다. 따라서 이전의 요구 사항은 없어졌습니다.

    특정 작업에 대한 double 지원과 함께 GPU의 필수 사용을 설정하려면CLContextCreate호출에서 CL_USE_GPU_DOUBLE_ONLY를 사용하십시오.
       int cl_ctx;
    //--- Initializing the OpenCL context
       if((cl_ctx=CLContextCreate(CL_USE_GPU_DOUBLE_ONLY))==INVALID_HANDLE)
         {
          Print("OpenCL not found");
          return;
         }

  16. MQL5: CustomBookAdd함수의 작동이 수정되었습니다. 이전에는MqlBookInfo::volume_real필드에서 0이 아닌 값으로 인해 함수가 시장 심도 스냅샷을 생성할 수 없었습니다. 이제 다음과 같이 검사가 수행됩니다.
    전송된 데이터는 검증됩니다. 유형, 가격 및 볼륨 데이터는 각 요소에 대해 지정되어야 합니다. MqlBookInfo.volume 및 MqlBookInfo.volume_real은 0 또는 음수가 아니어야 합니다. 두 볼륨이 모두 음수이면 오류로 간주됩니다. 볼륨 유형 중 하나 또는 둘 다를 지정할 수 있지만 시스템은 표시되거나 양수인 유형을 사용합니다.

       volume=-1 && volume_real=2 — volume_real=2가 사용됩니다.

       volume=3 && volume_real=0 — volume=3이 사용됩니다.

    증가된 정밀도 볼륨 MqlBookInfo.volume_real은 MqlBookInfo.volume보다 우선 순위가 높습니다. 따라서 두 값이 모두 지정되고 유효한 경우 volume_real이 사용됩니다.

    시장 심도의 요소 중 하나라도 잘못 설명된 경우 시스템은 전송된 상태를 완전히 폐기합니다.

  17. MQL5: CalendarValueLast함수의 작동이 수정되었습니다. 통화 필터를 사용할 때 오류로 인해 경제 달력('변경' 매개변수가 호출 후 새 값으로 설정됨) 변경 후에 함수의 연속된 호출이 일부events를 건너뛸 수 있었습니다.
    CalendarValueLast(change, result, "", "EUR")
  18. MQL5: ArrayBSearch함수의 동작을 수정했습니다. 동일한 요소가 여러 개 발견되면 임의의 결과가 아닌 첫 번째 결과에 대한 링크가 반환됩니다.
  19. MQL5: 클래스 내에서 템플릿 함수의 가시성에 대한 검사를 수정했습니다. 오류로 인해 private/protected로 선언된 클래스 템플릿 함수가public으로 나타났습니다.
  20. 메타에디터: MetaAssist의 오류 및 모호한 동작을 수정했습니다.
  21. 메타에디터: 터미널 설치 디렉토리의 경로를 나타내는 %terminal% 매크로에 대한 지원이 추가되었습니다. 예: %terminal%\MQL5\Experts. 


    Added support for the %terminal% macros which indicates the path to the terminal installation directory

  22. 메타에디터: 디버거에서 배열 표시가 개선되었습니다.
  23. 메타에디터: 디버거에서 값을 복사하기 위한 버퍼가 증가했습니다.
  24. 메타에디터: 오류 힌트가 개선되었습니다.
  25. 메타에디터: *.mproj 프로젝트 파일에 상대 경로 표시가 추가되었습니다. 이전에는 절대 경로를 사용했기 때문에 프로젝트 이동 시 컴파일 오류가 발생했습니다.
  26. 메타에디터: BMP리소스의 자동 임베딩을 프로젝트에서 전역적으로 사용 가능한 32비트 비트맵 배열로 추가했습니다. 이렇게 하면 그래픽 리소스를 읽기 위해 코드 내에서ResourceReadImage를 호출할 필요가 없습니다.
    'levels.bmp' as 'uint levels[18990]'
    
  27. 메타에디터: 확장된 BMP 파일 형식의 읽기 기능이 향상되었습니다.
  28. 메타에디터: 업데이트된 UI 번역.
  29. 충돌 로그에 보고되는 오류를 수정했습니다.


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

사유: