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

 
알렉세이 버나코프 :

그런 다음 문자 그대로의 순서로 균일 연속 분포의 경우 극점 밀도는 양수이고 적분은 0입니다. https://en.wikipedia.org/wiki/Uniform_distribution_(continuous)

기사의 원래 R 오류 설명으로 돌아가 보겠습니다.

우리의 의견은 여전히 유효합니다. 오류가 존재하며 구현 부주의로 인해 발생합니다.

 
레나트 팻쿨린 :

문제는 가장 순수한 형태의 @Quantum이 MQL5 의 R 수학 라이브러리 유사체의 구현 및 전체 검증에 참여하고 있다는 것입니다.

이것은 이론적 추론이 아닙니다. 그리고 그는 라이브러리의 정확성에 대한 확신을 제공하는 단위 테스트를 작성할 때 찾기 위해 깊이 파고듭니다.


R에서 모든 것이 정확하다고 선험적으로 가정할 필요는 없습니다. 오히려 C++의 함수 구현이 있더라도 모든 것이 오히려 원시적으로 구현되었다고 말하고 싶다. 그리고 속도 면에서 우리 컴파일러의 소스 코드에 있는 MQL5 라이브러리가 평균 3배의 승리를 거둔 것을 볼 수 있습니다.

모든 것을 다시 확인하기 위해 수고를 했고 명백한 오류를 발견했습니다. 다음 오류가 확인되었습니다.

발행일자를 봐주세요. 과학자들의 조언과 함께 작업이 어떻게 진행되고 있는지 확인하십시오.

또한 @Quantum 을 과학자로 생각하지 않는 것도 실수입니다.

친애하는 레나트!

귀하의 최근 게시물을 바탕으로 다음과 같은 질문이 있습니다. 저에게는 근본적인 성격이 있습니다.

1. 기사를 발행한 날짜로 보아 2003년입니다. 다른 소프트웨어 시스템과 마찬가지로 R에서도 오류가 발생하고 릴리스를 게시할 때 수정 목록이 항상 게시되는 것은 매우 자연스러운 일입니다. 동시에 R의 장점은 사용자가 매우 많기 때문에 버그가 적다는 점을 항상 강조해 왔습니다. 그리고 여기에서는 2003년 이후로 알고리즘의 버그가 게시 수준에서 확인되었으며 수정되지 않았습니다. 이것은 나에게 명확하지 않습니다.

이 문제에 대해 R에서 요청했습니까?

2. R과 MQL5의 성능을 비교한 코드를 보고 싶습니다.

미리 감사드립니다.

 
산산이치 포멘코 :

친애하는 레나트!

귀하의 최근 게시물을 바탕으로 다음과 같은 질문이 있습니다. 저에게는 근본적인 성격이 있습니다.

1. 기사를 발행한 날짜로 보아 2003년입니다. 다른 소프트웨어 시스템과 마찬가지로 R에서도 오류가 발생하고 릴리스를 게시할 때 수정 목록이 항상 게시되는 것은 매우 자연스러운 일입니다. 동시에 R의 장점은 사용자가 매우 많기 때문에 버그가 적다는 점을 항상 강조해 왔습니다. 그리고 여기에서는 2003년 이후로 알고리즘의 버그가 게시 수준에서 확인되었으며 수정되지 않았습니다. 이것은 나에게 명확하지 않습니다.

이것은 기초적이고 절대적으로 이해할 수 있습니다.

누구나 실수를 합니다. 그것이 개발자의 본성입니다. 우리는 실수를 많이 하고 낙심하지 않습니다.

R의 이 오류는 단순히 부주의하고 다른 하나를 엉망으로 만든 하나의 기본 기능을 신뢰하는 것입니다. 그들은 그것을 고칠 것입니다.

이 문제에 대해 R에서 요청했습니까?

우리는 테스트를 수행하고 라이브러리를 작성하는 동안 모든 것을 자세히 파악했으며 MQL5 - Wolfram Alpha - R의 결과를 지속적으로 비교하고 결과를 보여주었고 공개적으로 답변할 준비가 되어 있습니다. 물론 우리는 수학 패키지(모두 소스 코드에 있음)에 제어 단위 테스트와 벤치마크가 포함된 세 개의 큰 스크립트를 포함했습니다.

@Quantum 이 R에 버그 보고서를 제출할 것이라고 확신합니다. 업데이트된 기사는 불과 몇 시간 전에 발표되었습니다.


2. R과 MQL5의 성능을 비교한 코드를 보고 싶습니다.

MQL5 벤치마크 코드는 \Scripts\UnitTests\Stat\TestStatBenchmark.mq5에 있으며 R 코드는 "부록. 통계 함수의 계산 시간 측정 결과".

MetaQuotes-Demo 서버에 연결하여 MetaTrader 5 빌드 1467로 업그레이드하십시오. 새 라이브러리와 모든 테스트 스크립트가 포함된 것은 이 베타 버전이었습니다.

 
레나트 파트훌린 :

이것은 기초적이고 절대적으로 이해할 수 있습니다.

누구나 실수를 합니다. 이것이 개발자의 본성입니다. 우리는 실수를 많이 하고 낙심하지 않습니다.

R의 이 오류는 단순히 부주의하고 다른 것을 엉망으로 만든 하나의 기본 기능을 신뢰하는 것입니다. 그들은 그것을 고칠 것입니다.

우리는 테스트를 수행하고 라이브러리를 작성하는 동안 모든 것을 자세히 파악했으며 MQL5 - Wolfram Alpha - R의 결과를 지속적으로 비교하고 결과를 보여주었고 공개적으로 답변할 준비가 되어 있습니다. 물론 우리는 수학 패키지(모두 소스 코드에 있음)에 제어 단위 테스트와 벤치마크가 포함된 세 개의 큰 스크립트를 포함했습니다.

@Quantum 이 R에 버그 보고서를 제출할 것이라고 확신합니다. 업데이트된 기사는 불과 몇 시간 전에 발표되었습니다.


MQL5 벤치마크 코드는 \Scripts\UnitTests\Stat\TestStatBenchmark.mq5에 있으며 R 코드는 "부록. 통계 함수의 계산 시간을 측정한 결과".

MetaQuotes-Demo 서버에 연결하여 MetaTrader 5 빌드 1467로 업그레이드하십시오. 새 라이브러리와 모든 테스트 스크립트가 포함된 것은 이 베타 버전이었습니다.

성능 비교에 대한 의견을 형성할 수 없지만. 그리고 이것은 근본적인 성격입니다.

사실은 R이 이상적인 개발 환경이라는 것입니다. 한 마디로 인터프리터입니다. 그러나 개발 중에 존재하는 코드는 작업 코드와 매우 다릅니다. 행 수에서 여러 번입니다. 그리고 여기에 작업 코드가 있습니다. 매우 짧고 동시에 내용이 매우 풍부합니다. 따라서 계산 집약적 알고리즘, 행렬 연산, 모든 코어 로드를 사용하는 randomforest와 같이 거래 결정을 내릴 때 의미가 있는 패키지의 모든 기능을 비교해야 합니다....

추신.

오래된 버전의 R을 사용하고 있습니다. MRAN - Microsofn R Open 웹사이트에서 R 버전 3.3.1(2016-06-21)을 가져와야 합니다. 이 경우 MKL을 설치해야 합니다. Microsoft는 R의 특정 릴리스에서 일부 패키지 및 기능의 실행 속도를 최대 50(!)배 높일 수 있다고 주장했습니다.

Microsoft R Open: The Enhanced R Distribution · MRAN
  • Microsoft Corporation
  • mran.revolutionanalytics.com
Microsoft R Open, formerly known as Revolution R Open (RRO), is the enhanced distribution of R from Microsoft Corporation. It is a complete open source platform for statistical analysis and data science. The current version, Microsoft R Open 3.3.1, is based on (and 100% compatible with) R-3.3.1, the most widely used statistics software in the...
 
산산이치 포멘코 :

성능 비교에 대한 의견을 형성할 수 없지만. 그리고 이것은 근본적인 성격입니다.

사실은 R이 이상적인 개발 환경이라는 것입니다. 한 마디로 인터프리터입니다. 그러나 개발 중에 존재하는 코드는 작업 코드와 매우 다릅니다. 행 수에서 여러 번입니다. 그리고 여기에 작업 코드가 있습니다. 매우 짧고 동시에 내용이 매우 풍부합니다. 따라서 계산 집약적인 알고리즘, 행렬 연산, 모든 코어 로드를 사용하는 randomforest와 같이 거래 결정을 내릴 때 의미가 있는 패키지의 모든 기능을 비교해야 합니다....

R 기능을 MQL5로 체계적으로 변환하고 있습니다. 그래서 함수 호출의 본질은 매우 가깝습니다.

다음은 기사의 일치 예입니다.

아니요.
분포
MQL5 기능
R 언어 기능
하나 정상
 MathProbabilityDensityNormal
MathCumulativeDistributionNormal
MathQuantileNormal
MathRandomNormal
dnorm
pnorm
qnorm
rnorm
2 베타
 MathProbabilityDensityBeta
MathCumulativeDistributionBeta
MathQuantileBeta
MathRandomBeta
dbeta
pbeta
qbeta
rbeta
이항식
 MathProbabilityDensityBinomial
MathCumulativeDistributionBinomial
MathQuantileBinomial
MathRandomBinomial
dbinom
pbinom
qbinom
rbinom
4
코시
 MathProbabilityDensityCauchy
MathCumulativeDistributionCauchy
MathQuantileCauchy
MathRandomCauchy
dcauchy
pcauchy
qcauchy
rcauchy
5 카이제곱
 MathProbabilityDensityChiSquare
MathCumulativeDistributionChiSquare
MathQuantileChiSquare
MathRandomChiSquare
dchisq
pchisq
qchisq
rchisq
6 지수
 MathProbabilityDensityExponential
MathCumulativeDistributionExponential
MathQuantileExponential
MathRandomExponential
dexp
pexp
qexp
rexp
7 F 피셔
 MathProbabilityDensityF
MathCumulativeDistributionF
MathQuantileF
MathRandomF
df
pf
qf
rf
여덟 감마
 MathProbabilityDensityGamma
MathCumulativeDistributionGamma
MathQuantileGamma
MathRandomGamma
dgamma
pgamma
qgamma
rgamma
아홉 기하학적
 MathProbabilityDensityGeometric
MathCumulativeDistributionGeometric
MathQuantileGeometric
MathRandomGeometric
dgeom
pgeom
qgeom
rgeom
초기하
 MathProbabilityDensityHypergeometric
MathCumulativeDistributionHypergeometric
MathQuantileHypergeometric
MathRandomHypergeometric
dhyper
phyper
qhyper
rhyper
열하나
물류
 MathProbabilityDensityLogistic
MathCumulativeDistributionLogistic
MathQuantileLogistic
MathRandomLogistic
dlogis
plogis
qlogis
rlogis
12 로그 정규
 MathProbabilityDensityLognormal
MathCumulativeDistributionLognormal
MathQuantileLognormal
MathRandomLognormal
dlnorm
plnorm
qlnorm
rlnorm
열셋 음의 이항
 MathProbabilityDensityNegativeBinomial
MathCumulativeDistributionNegativeBinomial
MathQuantileNegativeBinomial
MathRandomNegativeBinomial
dnbinom
pnbinom
qnbinom
rnbinom
십사 비중앙 베타
 MathProbabilityDensityNoncentralBeta
MathCumulativeDistributionNoncentralBeta
MathQuantileNoncentralBeta
MathRandomNoncentralBeta
dbeta
pbeta
qbeta
rbeta
열 다섯 비중심 카이제곱
 MathProbabilityDensityNoncentralChiSquare
MathCumulativeDistributionNoncentralChiSquare
MathQuantileNoncentralChiSquare
MathRandomNoncentralChiSquare
dchisq
pchisq
qchisq
rchisq
열여섯
오프 센터 F
 MathProbabilityDensityNoncentralF ()
MathCumulativeDistributionNoncentralF ()
MathQuantileNoncentralF ()
MathRandomNoncentralF ()
df
pf
qf
rf
17 논센트럴 스튜던트 T
 MathProbabilityDensityNoncentralT
MathCumulativeDistributionNoncentralT
MathQuantileNoncentralT
MathRandomNoncentralT
dt
pt
qt
rt
십팔 푸아송
 MathProbabilityDensityPoisson
MathCumulativeDistributionPoisson
MathQuantilePoisson
MathRandomPoisson
dpois
ppois
qpois
rpois
십구 학생의 T
 MathProbabilityDensityT
MathCumulativeDistributionT
MathQuantileT
MathRandomT
dt
pt
qt
rt
20
제복
 MathProbabilityDensityUniform
MathCumulativeDistributionUniform
MathQuantileUniform
MathRandomUniform
dunif
punif
qunif
runif
21 위불라
 MathProbabilityDensityWeibull
MathCumulativeDistributionWeibull
MathQuantileWeibull
MathRandomWeibull
dweibull
pweibull
qweibull
rweibull

우리는 MQL5에서 작성 시간과 크기 측면에서 R의 코드를 거의 동일하게 만들려고 합니다.

내일 우리는 그래픽 라이브러리를 베타 버전으로 출시하고 이미지와 함께 R 및 MQL5의 코드 조각에서 동등하게 유사한 크기를 시연할 것입니다.



오래된 버전의 R을 사용하고 있습니다. MRAN - Microsofn R Open 웹사이트에서 R 버전 3.3.1(2016-06-21)을 가져와야 합니다. 이 경우 MKL을 설치해야 합니다. Microsoft는 R의 특정 릴리스에서 일부 패키지 및 기능의 실행 속도를 최대 50(!)배 높일 수 있다고 주장했습니다.

R의 일반 버전이 갑자기 속도를 높일 수 있을지 의심스럽습니다. 거기에 있는 코드는 많이 변경되지 않습니다. 일부 기능, 특히 매트릭스 기능이 가속화될 수 있다는 것은 분명합니다. 또한 귀하의 진술은 R의 코드가 성능 측면에서 다소 부주의하게 작성되었다는 제 생각을 확인시켜줍니다.

이제 이 기사를 읽으면 기본 기능에서도 멀티스레딩 및 MKL 없이 최대 46배의 가속을 얻었음을 알 수 있습니다.

계산은 Intel Core i7-4790, CPU 3.6Ghz, 16GB RAM, Windows 10 x64에서 이루어졌습니다. 마이크로초 단위의 계산 시간 측정 결과

아니요.
분포
MQL5 시간
계산 PDF(µs)
R 시간
계산 PDF(µs)
PDF
R/MQL5
MQL5 시간
CDF 계산(µs)
R 시간
CDF 계산(µs)
CDF
R/MQL5
MQL5 계산 시간
분위수(µs)
R 계산 시간
분위수(µs)
분위수
R/MQL5
MQL5 생성 시간
난수(μs)
R 생성 시간
난수(μs)
무작위의
R/MQL5
하나
이항식
4.39
11.663
2.657
13.65
25.316
1.855
50.18
66.845
1.332
318.73
1816.463
5.699
2
베타
1.74
17.352
9.972
4.76
15.076
3.167
48.72
129.992
2.668
688.81
1723.45
2.502

감마
1.31
8.251
6.347
8.09
14.792
1.828
50.83
64.286
1.265
142.84
1281.707
8.973
4
코시
0.45
1.423
3.162
1.33
15.078
11.34
1.37
2.845
2.077
224.19
588.517
2.625
5
지수
0.85
3.13
3.682
0.77
2.845
3.695
0.53
2.276
4.294
143.18
389.406
2.72
6
제복
0.42
2.561
6.098
0.45
1.423
3.162
0.18
2.846
15.81
40.3
247.467
6.141
7
기하학적
2.3
5.121
2.227
2.12
4.552
2.147
0.81
5.407
6.675
278
1078.045
3.879
여덟
초기하
1.85 11.095
5.997
0.9
8.819
9.799
0.75
9.957
13.28
302.55
880.356
2.91
아홉
물류
1.27
4.267
3.36
1.11
4.267
3.844
0.71
3.13
4.408
178.65
626.632
3.508

와이블
2.99
5.69
1.903
2.74
4.268
1.558
2.64
6.828
2.586
536.37
1558.472
2.906
열하나
푸아송
2.91
5.974
2.053
6.26
8.534
1.363
3.43
13.085
3.815
153.59
303.219
1.974
12
에프
3.86
10.241
2.653
9.94
22.472
2.261
65.47
135.396
2.068
1249.22
1801.955
1.442
열셋
치스퀘어
2.47
5.974
2.419
7.71
13.37
1.734
44.11
61.725
1.399
210.24
1235.059
5.875
십사
비중앙 카이스퀘어
8.05
14.223
1.767
45.61
209.068
4.584
220.66
10342.96
46.873
744.45
1997.653
2.683
열 다섯
비중앙 F
19.1
28.446
1.489
14.67
46.935
3.199
212.21
2561.991
12.073
1848.9
2912.141
1.575
열여섯
비중앙 베타
16.3
26.739
1.64
10.48
43.237
4.126
153.66
2290.915
14.909
2686.82
2839.893
1.057
17
음의 이항
6.13
11.094
1.81
12.21
19.627
1.607
14.05
60.019
4.272
1130.39
1936.498
1.713
십팔
정상
1.15
4.267
3.71
0.81
3.983
4.917
0.7
2.277
3.253
293.7
696.321
2.371
십구
로그 정규
1.99
5.406
2.717
3.19
8.819
2.765
3.18
6.259
1.968
479.75
1269.761
2.647
20

2.32
11.663
5.027
8.01
19.059
2.379
50.23
58.596
1.167
951.58
1425.92
1.498
21
비중심 T
38.47
86.757
2.255
27.75
39.823
1.435
1339.51
1930.524
1.441
1550.27
1699.84
1.096
<PDF R/MQL5>
3.474 <CDF R/MQL5>
3.465
<분위수 R/MQL5>
7.03
<랜덤 R/MQL5>
3.13



그러나 물론 우리는 지정된 버전을 확인할 것입니다. 속도와 성능 모두.

 
산산이치 포멘코 :

"잘못된 대답"에 대해 잘못 알고 있습니다.

...

예를 들어, MQL 문서는 arcsine에 대한 예를 제공하고 arcsine(2) = 무한대라고 명시합니다. 이것은 정확하지 않습니다. 정확히: arcsine(2) = NaN, 즉 숫자 값이 없습니다. arcsine(1) = Inf, 그러나 거래 중 따옴표 건너뛰기 = NA, 즉. 이어야 하지만(또는 주말에 있을 수 있음) 그렇지 않습니다.

나는 이 답변의 부정확성에 대해 아이러니하게 조금 썼습니다. 스마일리를 추가해야 했습니다... 일반적으로 두 경우 모두 오류가 아니라고 덧붙였습니다. 비정의 기능 영역에서 컴파일러와 인터프리터의 동작은 시스템 아키텍처와 개발자에 완전히 의존하기 때문입니다. 물론 이 경우에는 nan을 반환하는 것이 좋습니다.
일반적으로 정의되지 않은 매개변수를 사용하여 함수를 호출한 다음 결과를 다른 라이브러리와 비교할 필요가 없다는 사실에 대해 이야기하고 있습니다. 그렇지 않으면 수백 개의 "오류"를 이런 식으로 찾을 수 있습니다.

그런데 arcsine을 사용하면 흥미로운 예입니다.
mql-
MathArcsin(1) = MathArcsin(2) = -nan(ind)

볼프람-
아크신(1) = 파이/2
Arcsin(2) = 복잡한 것. 진정한 해결책은 없습니다.

아르 자형-
asin(1) = 파이/2
asin(2) = nan(실수에 대한 답)
asin(2+0i) = Wolfram에서와 같이 복잡한 것

위키에서는 asin(1)이 아직 정의되어 있다고 말합니다( https://en.wikipedia.org/wiki/Inverse_trigonometric_functions ). 서비스 데스크에 버그 보고서를 작성할 수 있습니다.
그러나 asin(2)는 이미 정의되지 않은 영역이며 모든 것이 정상이고 모든 곳에서 동일합니다.

마지막 게시물에 대해 다시 한 번 - 간단한 수학에서는 0으로 나누는 것이 불가능하므로 mql 스크립트가 오류와 함께 충돌하는 것이 논리적입니다. 여기에는 버그가 없습니다. 그러나 소수점 이하 16자리까지 결과의 정확도에 이런 세심함을 보는 것은 매우 이상한 일이며, 0으로 나눌 때 nan 또는 Inf를 반환하는 것이 어떤 이유에서인지 불가능합니다. IMHO, Inf를 반환하고 스크립트의 갑작스러운 충돌로 개발자를 괴롭히지 않아야 합니다.

 
Renat, 이 R에서 mql로의 여러 기능 이전이 당신이 얼마 전에 이야기한 것이 정말 놀라운 일이었습니까?
 

실수에서 0으로 나누기에 대한 제어를 비활성화하려면 metaeditor.ini 파일의 [Experts] 섹션에서 FpNoZeroCheckOnDivision=1 매개변수를 사용하십시오.

이 매개변수가 주어지면 다음 코드는 inf를 반환합니다.

 void OnStart ()
  {
   double x= 0 ;  
   Print ( 1 /x);
  }

당연히이 매개 변수의 존재는 상수 0.0으로 나눌 때 컴파일 오류 를 제거하지 않습니다.
Print(1/0.0);

'0.0' - division by zero in the constant expression    s1.mq5    8    12
 
mytarmailS :
Renat, R에서 mql로 몇 가지 기능을 이전하는 것은 당신이 얼마 전에 이야기한 것이 정말 놀라운 일이었습니까?

아니요.

놀라움은 의미가 없습니다. 우리는 MQL5 및 MetaTrader 5의 프레임워크 내에서 모든 것을 할 것입니다.

 
레나트 파트훌린 :

이 매개변수가 주어지면 다음 코드는 inf를 반환합니다.

감사합니다, 아주 좋은 설정입니다. 그리고 0을 0으로 나누면 inf가 아니라 nan이 나옵니다. 이것은 훨씬 더 정확합니다. 나는 그러한 정확성을 기대하지도 않았습니다!
사유: