기고글 토론 "MQL5의 ALGLIB 수치 해석 라이브러리"

 

새로운 기고글 MQL5의 ALGLIB 수치 해석 라이브러리 가 게재되었습니다:

이 글에서는 금융 데이터 분석의 효율성을 향상시킬 수 있는 ALGLIB 3.19 수치 분석 라이브러리와 그 응용 프로그램 및 새로운 알고리즘에 대해 간략히 살펴봅니다.

ALGLIB를 금융 데이터로 작업할 때 선택하는 이유는 무엇일까요?

라이브러리의 주요 이점은 다음과 같습니다:

  • 이동성: ALGLIB은 다양한 컴파일러를 사용하여 다양한 플랫폼에서 쉽게 컴파일 되므로 다양한 배경을 가진 여러 개발자들이 사용할 수 있습니다.
  • 사용 편의성: 여러 프로그래밍 언어를 지원하므로 여러분은 새로운 구문을 배울 필요 없이 가장 익숙한 언어를 선택할 수 있습니다.
  • 오픈 소스: ALGLIB은 오픈 소스이며 GPL 2+ 사용 조건에 따라 사용할 수 있습니다. 따라서 과학 연구와 상업 프로젝트 모두에 사용할 수 있습니다.
  • 상업용 사용자 지원: 상업용 사용자는 ALGLIB을 사용할 때 법적으로 사용권에 대한 보호를 받을수 있는라이선스를 구매할 수 있습니다.

또한 라이브러리에는 제안된 메서드의 주요 기능성에 대한 방대한 테스트 사례 모음이 포함되어 있습니다. 이렇게 하면 테스트 및 감지된 오류를 프로젝트 작성자에게 전달할 수 있습니다.

작성자: MetaQuotes

 

"MQL의 ALgLIB"에 대해 항상 궁금했는데, 원본과 얼마나 가깝고 일치하는지 궁금합니다.

올바르게 이해하면, 최악의 상황은 예를 들어 C/C++와 MQL에서 AlgLIB를 사용하여 다른 결과를 얻는 것입니다.

 
Maxim Kuznetsov #:

"MQL의 ALgLIB"에 대한 질문은 항상 흥미로웠습니다. 원본과 얼마나 가깝고 일치하는가?

올바르게 이해하면, 최악의 상황은 예를 들어 C/C++와 MQL에서 AlgLIB를 사용하여 다른 결과를 얻는 것입니다.

마지막 두 줄(테스트 사례에 관한)은 바로 이것입니다. 실행, 테스트 및 비교, 아무도 당신을 막지 않습니다.
 
Aleksey Nikolayev #:
마지막 두 줄(테스트 사례에 대한 내용)은 바로 그 내용입니다. 실행, 테스트 및 비교, 아무도 당신을 막을 수 없습니다.

마지막 두 줄은 원래 AlgLIB의 테스트 사례에 관한 것입니다. MQL5 버전에는 테스트가 없습니다.

 
Maxim Kuznetsov #:

의 테스트 사례에 대한 마지막 두 줄입니다. MQL5 각색에는 테스트가 없습니다.

가지가 있다고 생각합니다. 그러나 그것들이 아니라면, MQL5에서 그것들을 다시 작성하지 못하는 이유는 무엇인가요?
 

시야를 넓힐 수 있는 몇 가지 링크를 소개합니다.

<img width="640" height="480" src="https://c.mql5.com/3/419/3676818984909.png" loading="lazy" alt style="vertical-align:middle;"/ translate="no">

 
Maxim Kuznetsov #:

의 테스트 사례에 대한 마지막 두 줄입니다. MQL5 각색에는 테스트가 없습니다.

모든 광범위한 Alglib 테스트 사례는 항상 MQL5 라이브러리의 첫 번째 포팅 버전(2012년 10월) 에서 나온 것입니다:

\MQL5\Scripts\UnitTests\Alglib\
                               TestClasses.mq5
                               TestInterfaces.mq5
                               TestClasses.mqh
                               TestInterfaces.mqh

이제 거의 모든 기능을 포괄하는 3,850KB의 소스 코드와 105,000줄의 코드로 구성된 테스트입니다.

누구나 단위 테스트 TestClasses.mq5 / TestInterfaces.mq5를 컴파일하여 터미널에서 실행할 수 있습니다.

Библиотеки: ALGLIB - библиотека численного анализа - Хорошая библиотека численного анализа MetaQuotes.
Библиотеки: ALGLIB - библиотека численного анализа - Хорошая библиотека численного анализа MetaQuotes.
  • 2012.10.12
  • www.mql5.com
ALGLIB - библиотека численного анализа MetaQuotes. Библиотека ALGLIB - крайне нужный инструмент исследователя и строителя торговых систем. Хотелось бы увидеть развернутую документацию по использованию функционала библиотеки и несколько статей на эту тему
 

Alglib 외에도 다른 수학 라이브러리에 대한 테스트 사례가 있습니다:


 
동료 여러분, 라이브러리의 버전 번호는 어디(어떤 파일에서)에서 확인할 수 있나요?
 

업데이트 후 신경망이 작동을 멈췄습니다.

이전 버전의 ALGLIB로 롤백했습니다. 필요한 경우 첨부합니다.

파일:
Alglib_old.zip  644 kb
 

안녕하세요!

누구든지 비선형 ISC 최적화를 사용하는 방법을 알아낼 수 있었나요?

다음은 Alglib 사이트 https://www.alglib.net/translator/man/manual.cpp.html#example_lsfit_d_nlf 의 예입니다 .

제가 뭘 잘못하고 있는지 알려주시겠습니까?

//+------------------------------------------------------------------+
//|Optim.mq5 |
//|vp |
//| https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "vp"
#property link      "https://www.mql5.com"
#property version   "1.00"
#include <Math\Alglib\alglib.mqh>
 
 void function_cx_1_func(double &c[],double &x[],double &func,CObject &obj)
{
    // 이 콜백은 f(c,x)=exp(-c0*sqr(x0))를 계산합니다.
    // 여기서 x는 X축의 위치이고 c는 조정 가능한 매개변수입니다.
    func = MathExp(-c[0]*MathPow(x[0],2));
}


void OnStart()
  {
int info;
CObject  obj;
vector v = {-1,-0.8,-0.6,-0.4,-0.2,0,0.2,0.4,0.6,0.8,1.0}; 
double y[] = {0.223130, 0.382893, 0.582748, 0.786628, 0.941765, 1.000000, 0.941765, 0.786628, 0.582748, 0.382893, 0.223130};
double c[] = {0.3}; 
CMatrixDouble x;
x.Col(0,v);
double epsx = 0.000001;
int maxits = 0;
double diffstep = 0.0001;

//
// 웨이트 없이 피팅
//
CLSFitStateShell state;
CAlglib::LSFitCreateF(x,y,c,diffstep,state);
CAlglib::LSFitSetCond(state,epsx,maxits);
CNDimensional_Rep rep;
CNDimensional_PFunc function_cx_1_func;
CAlglib::LSFitFit(state,function_cx_1_func,rep,0,obj);

CLSFitReportShell grep;
CAlglib::LSFitResults(state,info,c,grep); 
 
ArrayPrint(c); // 예상: [1.5]
Print(grep.GetIterationsCount());
Print(grep.GetRMSError());
   
  }