トレーディングにおける機械学習:理論、モデル、実践、アルゴトレーディング - ページ 199

 
アレクセイ・ブルナコフ

次に、一様な連続分布の場合、極点での密度が正で積分が0になることを、直訳順にコメントします。https://en.wikipedia.org/wiki/Uniform_distribution_(連続)

記事のRの誤りについて、最初の発言に戻ろう。

私たちの意見は、エラーは存在し、それは実装の不注意によって引き起こされるものです。

 
レナト・ファットフーリン

つまり、@Quantumは MQL5におけるR mathライブラリのアナログの純粋な実装と完全なチェックである。

これは理論家の推理ではありません。そして、ライブラリが正しいことを保証するユニットテストを書くときも、深く掘り下げている。


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の結果を常に比較し、結果を示し、それに対して公に答える用意があるのです。もちろん、私たちの数学パッケージには、ユニットテストとベンチマークを含む3つの大きなスクリプトを添付しました(これはソースコードにあります)。

きっと@Quantumが Rでバグレポートを書いてくれるでしょう。つい数時間前に更新された記事が公開されました。


RとMQL5の性能を比較したコードを見てみたいです。

MQL5のベンチマークコードは \scriptsUnitTestsTestStatBenchmark.mq5 に、RコードはStatistical Distributions in MQL5 - take the best from R and make it faster, see "Appendix" の末尾に掲載されています。統計関数の時間軸を計算した結果」。

MetaQuotes-Demoサーバーに接続し、必ずMetaTrader 5 build 1467にアップグレードしてください。このベータ版には、新しいライブラリとすべてのテスト用スクリプトが含まれています。

 
レナト・ファットフーリン

これは初歩的なことで、全く理解できることです。

誰にでも失敗はある、それが開発者の性です。失敗を重ねても、くじけずに頑張る。

Rのこのエラーは、ただ一つの基本的な機能に対する不注意と信頼から、他の機能を台無しにしてしまったのです。修正されることになります。

私たちは、テストを行い、すべてを詳細に調べながらライブラリを作成し、常にMQL5とWolfram Alpha、Rを比較し、結果を示し、それに対して公に答える用意があるのです。もちろん、私たちの数学パッケージには、ユニットテストとベンチマークを含む3つの大きなスクリプトを添付しました(これはソースコードにあります)。

きっと@Quantumが Rでバグレポートを書いてくれるでしょう。つい数時間前に更新された記事が公開されました。


MQL5でのベンチマークコードは \scriptsUnitTestsTestBenchmark.mq5 に、RでのコードはStatistical Distributions in MQL5 - take the best from R and make it fast in "Appendix" の記事の最後に記載されています。統計関数の時間計算の結果」。

MetaQuotes-Demoサーバーに接続し、必ずMetaTrader 5 build 1467にアップグレードしてください。このベータ版には、新しいライブラリとすべてのテスト用スクリプトが含まれています。

性能比較については、まだ自分の意見がまとまりません。そして、これは原則的な問題です。

Rは開発のための理想的な環境、一言で言えばインタプリタであるということです。しかし、開発中に存在するコードは、作業中のコードとは大きく異なります。何倍もの行数で。一方、ワーキングコードは、非常に短く、非常に容量が大きいです。そのため、計算量の多いアルゴリズムや行列演算、全コアに負荷をかけるランダムフォレストなど、取引の意思決定をする際に意味のあるパッケージの機能を比較する必要があります。

PS.

Rの古いバージョンを使用しています。MRAN- Microsofn R OpenのウェブサイトからRバージョン3.3.1(2016-06-21)を取得する必要があります。その際、MKLのインストールは必須です。マイクロソフトは、前述の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は開発のための理想的な環境、一言で言えばインタプリタであるということです。しかし、開発中に存在するコードは、作業中のコードとは大きく異なります - 何倍もの行数で。一方、ワーキングコードは、非常に短く、非常に容量が大きいです。そのため、例えばランダムフォレストのように、計算量の多いアルゴリズムや行列演算、全コアへの負荷など、取引を決定する上で意味のあるパッケージの機能を比較する必要があるのです......。

Rの機能を体系的にMQL5に変換しています。そして、関数呼び出しの本質が非常に似ていることが判明するような形で。

以下は、記事中の通信文の例です。


流通
MQL5 関数
R機能
1通常
MathProbabilityDensityNormal
MathCumulativeDistributionNormal
MathQuantileNormal
MathRandomNormal
dnorm
pnorm
qnorm
rnorm
2ベータ版
MathProbabilityDensityBeta
MathCumulativeDistributionBeta
MathQuantileBeta
MathRandomBeta
dbeta
pbeta
qbeta
rbeta
3二項式
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
8ガンマ
MathProbabilityDensityGamma
MathCumulativeDistributionGamma
MathQuantileGamma
MathRandomGamma
dgamma
pgamma
qgamma
rgamma
9ジオメトリック
MathProbabilityDensityGeometric
MathCumulativeDistributionGeometric
MathQuantileGeometric
MathRandomGeometric
dgeom
pgeom
qgeom
rgeom
10ハイパーゲオメトリック
MathProbabilityDensityHypergeometric
MathCumulativeDistributionHypergeometric
MathQuantileHypergeometric
MathRandomHypergeometric
dhyper
phyper
qhyper
rhyper
11
ロジスティック
MathProbabilityDensityLogistic
MathCumulativeDistributionLogistic
MathQuantileLogistic
MathRandomLogistic
dlogis
plogis
qlogis
rlogis
12ログノーマル
MathProbabilityDensityLognormal
MathCumulativeDistributionLognormal
MathQuantileLognormal
MathRandomLognormal
dlnorm
plnorm
qlnorm
rlnorm
13負の二項式
MathProbabilityDensityNegativeBinomial
MathCumulativeDistributionNegativeBinomial
MathQuantileNegativeBinomial
MathRandomNegativeBinomial
dnbinom
pnbinom
qnbinom
rnbinom
14非中央値ベータ
MathProbabilityDensityNoncentralBeta
MathCumulativeDistributionNoncentralBeta
MathQuantileNoncentralBeta
MathRandomNoncentralBeta
dbeta
pbeta
qbeta
rbeta
15非心円カイ二乗
MathProbabilityDensityNoncentralChiSquare
MathCumulativeDistributionNoncentralChiSquare
MathQuantileNoncentralChiSquare
MathRandomNoncentralChiSquare
dchisq
pchisq
qchisq
rchisq
16
ディセントラルF
MathProbabilityDensityNoncentralF()
MathCumulativeDistributionNoncentralF()
MathQuantileNoncentralF()
MathRandomNoncentralF()
df
pf
qf
rf
17ディセントラルT学生
MathProbabilityDensityNoncentralT
MathCumulativeDistributionNoncentralT
MathQuantileNoncentralT
MathRandomNoncentralT
dt
pt
qt
rt
18ポワッソン
MathProbabilityDensityPoisson
MathCumulativeDistributionPoisson
MathQuantilePoisson
MathRandomPoisson
dpois
ppois
qpois
rpois
19Tスチューデント
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

RからのコードをMQL5で書くのと、サイズや時間がほぼ同じになるようにしています。

明日は、グラフィカルなライブラリのベータ版をリリースし、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, 3.6 Ghz CPU, 16 GB RAM, Windows 10 x64で行いました。計算時間の結果はマイクロ秒単位


流通
MQL5時間
PDF計算時間(µs)
R計算時間
PDF計算時間(µs)
PDF
R/MQL5
MQL5計算時間
CDF計算時間(µs)
R計算時間
CDF計算時間(µs)
しゅはいせんばん
R/MQL5
MQL5計算時間
量子化時間 (µs)
R計算時間
量子化計算時間 (µs)
量子化
R/MQL5
MQL5生成時間
乱数発生時間 (µs)
R生成時間
乱数発生時間(μs)
ランダム
R/MQL5
1
二項式
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
3
ガンマ
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
8
ハイパーゲオメトリック
1.8511.095
5.997
0.9
8.819
9.799
0.75
9.957
13.28
302.55
880.356
2.91
9
ロジスティック
1.27
4.267
3.36
1.11
4.267
3.844
0.71
3.13
4.408
178.65
626.632
3.508
10
ワイブル
2.99
5.69
1.903
2.74
4.268
1.558
2.64
6.828
2.586
536.37
1558.472
2.906
11
ポワッソン
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
F
3.86
10.241
2.653
9.94
22.472
2.261
65.47
135.396
2.068
1249.22
1801.955
1.442
13
カイ二乗
2.47
5.974
2.419
7.71
13.37
1.734
44.11
61.725
1.399
210.24
1235.059
5.875
14
非心円カイ二乗
8.05
14.223
1.767
45.61
209.068
4.584
220.66
10342.96
46.873
744.45
1997.653
2.683
15
ノンセンチュラル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
非心臓ベータ
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
18
通常
1.15
4.267
3.71
0.81
3.983
4.917
0.7
2.277
3.253
293.7
696.321
2.371
19
ログノーマル
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
T
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
<Random R/MQL5>
3.13



しかし、指定されたバージョンはもちろんテストされます。スピードも性能も。

 
サンサニッチ・フォメンコ

"間違った答え "は間違いです

...

例えば、MQLのドキュメントにはアークサインに関する例があり、arcsine(2)=infinityと記載されています。これは正確ではありません。その通り: arcsinus(2) = NaN、つまり数値がない、arcsinus(1) = Inf、しかし取引中の気配値欠落 = NA、つまりあるべき(または週末にあり得る)のにない。

誤答を少し皮肉って書きました。スマイリーフェイスを付ければよかった・・・。実は最後に、定義されていない機能領域でのコンパイラやインタプリタの動作は、システムアーキテクチャや開発者に完全に依存するため、どちらの場合もバグではないことを書き加えました。その場合はナンを返した方がいいに決まっている。
つまり、定義されていないパラメータで関数を呼び出して、他のライブラリと結果を比較するのはやめましょう。そうしないと、何百もの「バグ」を見つけることができますよ。

ところで、アークシヌスを使った例も面白いですね。
mql -
MathArcsin(1) = MathArcsin(2) = -nan(ind)

ウルフラム
アークサイン(1) = Pi/2
Arcsin(2) = 何か複雑なもの。有効な結果を伴う解答はない。

R -
asin(1) = Pi/2
asin(2) = nan (答えは実数の場合)
asin(2+0i) = wolframのような複雑なもの

wiki によると asin(1) はまだ定義されているようです(https://en.wikipedia.org/wiki/Inverse_trigonometric_functions)。servicedesk にバグレポートを書くことができます。
しかし、asin(2)は未定義の領域なので、どこでもOKでマッチします。

また、前回の投稿についてですが、単純な数学で0による除算は不可能なので、mqlスクリプトがエラーでクラッシュするのは論理的なことであり、ここにバグはないのです。しかし、小数点以下16桁まで結果を精密にし、ゼロで割ることが何らかの理由で不可能な場合はnanやInfを返す、そんなきめ細かさがとても不思議です。Infに戻して、スクリプトの突然のクラッシュで開発者を苦しめないようにする必要があると思います。

 
Renatさん、このRからmqlへのいくつかの関数の翻訳は、本当にあなたの言っていた驚きだったのでしょうか?
 

実数値分割制御を無効にするには、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が表示されます。

ありがとうございます、とても正しい設定です。しかも、ゼロをゼロで割るとinfではなくnanになり、さらに正しい!こんな精度があるとは思ってもいませんでした。
理由: