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

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

Rは、個人的にはMetaTrader/MQLが「複雑な計算を簡単に、今すぐに」という本当のニーズからいかにかけ離れていたかに気づかせてくれた素晴らしいシステムだと思います。

私たち(C++開発者)は、「自分で何でもできるから、低レベルのベースと計算のスピードをあげる」というアプローチを血肉にしています。MQL5は64bitで素晴らしいパフォーマンスを発揮します。

私自身がRに取り組み始めたとき、1行にできるだけ多くの強力な関数が必要であり、一般的な研究ができるようにする必要があることに気づきました。

そこで、急転直下、MetaTrader 5のバージョンアップに着手しました。

  • 以前書き直した数学ライブラリAlglibとFuzzyを標準配布し、ユニットテストでカバーした。
  • Rから統計関数のアナログを開発し、テストを実行し、テストでカバーする。作業はまだ進行中であり、ライブラリは拡張中である
  • R の plot のアナログとして Graphics ライブラリの最初のベータ版を開発した。
  • 表形式のデータを操作できるように、ターミナルの出力ウィンドウのインターフェイスを変更しました。 出力の方向の変更、不要な列の無効化、Expert Advisorの出力ウィンドウのフォントを等幅に変更しました。
  • 構造体を含む配列の自動印刷を行う強力なArrayPrint 機能が追加されました。
  • ディスク上の配列を素早くロード/アンロードするためのFileLoad/FileSave 関数を追加した。


もちろん、まだ道半ばですが、正しい努力のベクトルはすでに明確です。

あなたのモチベーションは最高ですおっしゃる通りなら、さっそく忍者を骨抜きにc multichart)))。

しかし、IMHOは、ここで我々は根本的に新しいものを作成する必要があります、つまり、あなたが書いたものに加えて、氏Reshetov、あなたはちょうど研究スタジオを必要とし、任意のデータセットで動作するだけでなく、市場からダウンロード可能な、多くのことが起こるかを理解するために非常につまらない、合成例を試す必要があるので、まあ、あなたはプログラマプログラマとして私を理解しておくべきです)))。さまざまなチャート、散布図、ヒットマップ、分布などを描く必要がありますね。一般的には、このようなツール群がMetaEditorから直接利用できるようになれば、とてもクールだと思うのですが、正直なところ、期待はしていません......。

でも、一般的には、もちろん、あなたの思考の流れが好きです))

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

詳細や検証のない、丁寧な回答でした。そして、その答えがWolfram AlphaとMatlabに合致しなかったことが問題なのです。

横道にそれる必要はない。根本的な問題は、はっきりと述べられているのだから。

彼の答えがWolframと一致しないとはどういうことですか?その人の答えが「0」でなかったという点では一致しませんでしたか?その人は、「積分=0のゼロ点では、必ずしも密度がゼロでなければならないとは思わない」と答えた(そのように質問をぶつけたのだが)。彼は明確にそう言った。そして、どの点での密度値も無関係であると付け加えた(私は「無関係」を、今回の質問とは無関係と読んだ)。これは、極めて明快な数学的記述である。

今回の問題では、数学が重要です。

ソレ関数の積分(ガンマ分布の確率密度 関数)があります。Wolframの方程式にパラメータを与えて,積分する領域と関数のパラメータを指定すると,積分して答えを出してくれるのは,誰でも知っていることです.しかし、もしあなた自身が座って、ある領域でこの積分を計算したら、0では0、領域全体では1、そしてある部分領域では何らかの値[0,1]が得られると思ったことはありませんか?方程式を解くだけでいいのです

ガンマ分布の確率密度関数の極限が正の領域のどこかに行くというのは、その関数の性質である。その機能を統合して何が得られるかは関係ない。その人が書いたものです。

根本的な問題をかわしているわけではありません。私たちの指摘は、私たちの力の及ばないところで確認されたこと、つまりゼロの時の密度は無関係(irrelevant)であることを、もう一度言っておきます。

 
ゼンヤ

あなたのモチベーションは最高ですすべてがあなたの言うとおりなら、あなたはすぐに骨の髄まで忍者c multichart)))をかむでしょう。

しかし、IMHOは、ここで我々は根本的に新しい何かを作成する必要があります、つまり、あなたが書いたものに加えて、氏Reshetov、 あなたは多くのことが起こるかを理解するために非常につまらない、合成例を試す必要があるので、任意のデータセットを扱うための研究スタジオを、市場からダウンロードできるだけでなく、必要な、よく、あなたはプログラマプログラマとして私を理解する必要があります))さまざまなチャート、散布図、ヒットマップ、分布などを描く必要がありますね。一般的には、このようなツール群がMetaEditorから直接利用できるようになれば、とてもクールだと思うのですが、正直なところ、期待はしていません......。

でも、一般的には、もちろん、あなたの思考の流れが好きです)))

レシェトフのこの "ショット "のことでしょうか?

"このRは、四角い車輪の腐った自転車の ようなものだ。Rの基本、つまりコアが曲がっていて、「鉛筆やすり」で真剣に微調整する必要があるのに、彼のパッケージのいくつかをどう言えばいいのでしょう?長年、Rの基本的な関数の正しさをチェックする気にもならなかった人たちに、どんな信頼性があるのでしょうか?Rの弱点である、Rによる計算の不正確さを「強さ」とすることはできるのか?

MetaQuotesが一部のユーザーの目を開かせ、オープンソースでテストすることで、根拠のないことではなく、誰もが独立してダブルチェックし、確認できるようになったことは良いことだと思います。もちろん、すべてのオープンソースではありません。なぜなら、Rの破壊的な宗派の一部の宗教的狂信者は、Rの曲がった部分を「一般に認められた標準」として擁護し、狂信的にうそをつくのではなく、提示されたテストに目を向け、独立してそれらをダブルチェックするのではなく、彼らの曲がった言語とパッケージでの計算の「無謬性」を盲信し続けるでしょうから。

MQLの機能を使ってトレーディングストラテジーを作成した方が、カーブやスロープのRで作成するよりも、より正しい結果が得られることは明らかです。

建設的なアプローチ、テスト、そのソースコード、そして「裸の王様 - R」を特定してくれたMetaQuotesの開発者に感謝します! "

 
ウラジミール・ペレヴェンコ

レシェトフが言っているのはこの「ショット」のことでしょうか?

いいえ、これはメッセージです。

ユーリー・レシェトフ

Rは、他の多くの言語と同様に、配列のデータを処理する機能を内在しているため、MQLよりも機械学習にははるかに便利です。機械学習のサンプルは2次元のデータ配列であることがほとんどなので、配列を扱うための関数が必要だということです。

  1. 小さい次元の配列として行と列を別の配列に挿入する。
  2. 配列の行と列を、より小さいサイズの配列に置き換えること
  3. 配列から行や列を削除する(例えば,重要でない予測因子や明らかな「外れ値」を持つ例をサンプルから削除する).
  4. アレイをパーツに分割し,元のアレイのパーツである2つ以上のアレイを作成する(サンプルをトレーニングパーツとテストパーツに分割したり,ウォーリングフォワードなどでより多くのパーツに分割するために必要).
  5. 均一な分布を持つ配列の行と列をランダムにシャッフルする(サンプルからの特定の例が異なる部分に該当することが必要で、できればこれらの部分に均一に分布していることが望ましい)。
  6. 行や列ごとのデータ処理のための各種機能(行や列ごとの算術平均や分散の計算、行内の最大値や最小値を求めてさらに正規化する等)。
  7. などなど。

MQLが配列のサンプルを扱うために必要な前述の機能を実装するまでは、機械学習アルゴリズムの開発者の多くは、すでにこのすべてが利用可能な他のプログラミング言語を好むだろう。あるいは、私の記憶が正しければ、便宜上2次元配列を1次元で表現しているAlgLibライブラリの気取らないMLP(1960年代のアルゴリズム)を使うことになるだろう。

もちろん、ランダムな分布の密度を表す関数も必要な機能である。しかし、このような関数は機械学習のタスクでは必ずしも必要ではなく、全く使われないタスクもある。しかし、サンプルを多次元配列として扱う操作は、機械学習アルゴリズムの実装がどのようなタスクでも必ず必要とされるものであり、もちろん、些細なCWRから明らかに正規化されたデータを学習するグリッドを教えるというタスクであれば話は別である。

 
ウラジミール・ペレヴェンコ

レシェトフが言っているのはこの「ショット」のことでしょうか?

"このRは腐っている。四角い車輪の自転車 だ。Rの基本、つまりコアが曲がっていて、「鉛筆のヤスリで」真剣に改良する必要があるのに、そのパッケージのいくつかについて何を語ろうというのだろう。長年、Rの基本的な関数の正しさをチェックする気にもならなかった人たちに、どんな権威があるのでしょうか?Rの弱点である、Rによる計算の不正確さを「強さ」とすることはできるのか?

MetaQuotesが一部のユーザーの目を開かせ、オープンソースでテストすることで、根拠のないことではなく、誰もが独自にダブルチェックし、確かめることができたのは良いことだと思います。もちろん、すべてのオープンソースではありません。なぜなら、Rの破壊的な宗派の一部の宗教的狂信者は、Rの曲がった部分を「一般に認められた標準」として擁護し、狂信的にでたらめを言うのではなく、提示されたテストに目を向け、独立してそれらをダブルチェックせず、彼らの曲がった言語やパッケージでの計算の「無謬性」を盲信し続けるでしょう。

MQLの機能を使ってトレーディングストラテジーを作成した方が、カーブやスロープのRで作成するよりも、より正しい結果が得られることは明らかです。

MetaQuotesの開発者の建設的なアプローチ、テストとそのソース、そして「裸の王様-R」の特定に特別な感謝を捧げます! "

ミンキーMQL」についての投稿はもう削除されましたか?トランプ当選後にラドバ系の人物がFacebookをこき下ろすのと同じように、投稿をこき下ろしてるんですね。

 

お遊びでWolfram Alphaでガンマ分布の例を見てみましょう。

彼には、少し単純化したガンマ分布密度関数という関数が与えられている。

ポイントは分母のxにある。右の極限は、見ての通り、x->0でのもので、Wolframは正しく推定しています: inf.

つまり、右の極限では、ゼロでの密度は無限大になる(これはまさにdgammaの答えである)。

この関数を大サポータで積分してみよう。

積分は1である(もちろん、完全な支持をとっているわけではないので、四捨五入されている)。

結論として、この関数は極点で無限大になるにもかかわらず、その積分はそのままうまくカウントされる。

 
アレクセイ・ブルナコフ

ここでは、Wolfram Alphaのガンマ分布の例を、ほんの少しだけ紹介します。

結論は、関数が極点で無限大になっても、その関数の積分はそのままうまくカウントされる、ということです。

例を挙げていただき、ありがとうございます。この積分は収束する。

点x=0での極値も密度を求めることができ、発散することはない。

 
量子力学

例を挙げていただき、ありがとうございます。その積分は収束している。

x=0での極限値を用いて密度を求めることも可能であり、この場合は発散することはない。


ありがとうございました。リスペクトです。

 

クイック処理パッケージを使用したRによる例。

library(data.table)

library(ggplot2)


start <- Sys.time()


set.seed(1)

dummy_coef <- 1:9


x <- as.data.table(matrix(rnorm(9000000, 0, 1), ncol = 9))

x[, (paste0('coef', c(1:9))):= lapply(1:9, function(x) rnorm(.N, x, 1))]


print(colMeans(x[, c(10:18), with = F]))


x[, output:= Reduce(`+`, Map(function(x, y) (x * y), .SD[, (1:9), with = FALSE], .SD[, (10:18), with = FALSE])), .SDcols = c(1:18)]


x[, sampling:= sample(1000, nrow(x), replace = T)]


lm_models <- x[, 

{

lm(data = .SD[, c(1:9, 19), with = F], formula = output ~ . -1)$coefficients

}, 

by = sampling]


lm_models[, coefs:= rep(1:9, times = 1000)]


avg_coefs <- lm_models[, mean(V1), by = coefs]

plot(dummy_coef, avg_coefs$V1)


lm_models[, 

  print(shapiro.test(V1)$p.value)

  , by = coefs]


ggplot(data = lm_models, aes(x = V1)) +

geom_histogram(binwidth = 0.05) +

facet_wrap(~ coefs, ncol = 3)


Sys.time() - start

再生時間:5秒1,000の線形モデルが構築された。それぞれ1000回の観測で。

[1] 0.8908975

[1] 0.9146406

[1] 0.3111422

[1] 0.02741917

[1] 0.9824953

[1] 0.3194611

[1] 0.606778

[1] 0.08360257

[1] 0.4843107

すべての係数は正規分布している。

そして、可視化のためのggplot-ic。

 

そしてもう一つの例。また、統計シミュレーションのための大サンプル回転にも関係する。

########## simulate diffference between mean density with different sample size


library(data.table)

library(ggplot2)


rm(list=ls());gc()


start <- Sys.time()


x <- rnorm(10000000, 0, 1)

y <- rnorm(10000000, 0, 1)


dat <- as.data.table(cbind(x, y))

dat[, (paste0('sampling_', c(100, 1000, 10000))):= lapply(c(100, 1000, 10000), function(x) sample(x, nrow(dat), replace = T))]


dat_melted <- melt(dat, measure.vars = paste0('sampling_', c(100, 1000, 10000)))


critical_t <- dat_melted[, 

   {

    mean(x) - mean(y)

   }

   , by = .(variable, value)]


ggplot(critical_t, aes(x = V1, group = variable, fill = variable)) + 

stat_density(alpha = 0.5)


Sys.time() - start


gc()

ランニングタイム3.4秒。

ゼロを中心とした正規分布の標本を作成します。

1,000×10,000組の値

10 000 upon 1 000 ペアの値

100組の値のうち10万個

各サンプルの平均値の差(MO==0)をカウントする。

異なるサイズのサンプルに対するサンプリング平均分布の密度を導出する。

ここでのsampling_100は、サンプルサイズを得るために10,000,000 / 100が必要であることを意味します。つまり、標本が小さいと標準誤差が大きくなる...。

理由: